3

場所を含むユーザーが送信したイベントを含むGeoDjangoを使用してWebサービスを構築しています。次を使用して、自分の場所のモデル フィールドを作成しましたdjango.contrib.gis.db

location = models.PointField(srid=900913)

900913これは Google マップで使用されている投影法であり、Google マップにマーカーを配置することで位置を取得していることを読んだときに指定することにしました。座標は緯度/経度の形式で表示されます。このポイントを GEOS を使用して PostGIS DB に保存しています。

location = geos.Point(data['lng'], data['lat'], srid=900913)

この地点を地図上に表示したい場合は、DB から緯度と経度を取得し (例: lat = location.coords[1])、それらを使用して地図を中央に配置すると、うまくいきます。

マップを参照し、マップの境界内にある DB からのイベントを表示する場合は、GeoDjango のwithinクエリとマップの境界 (lat/lng 形式)を使用します。

    bounds = geos.Polygon.from_bbox((swLng, swLat, neLng, neLat))
    events = Event.objects.filter(location__within=bounds)

これは正常に機能しているように見え、これらのイベントの緯度/経度に対応するピンを地図上に表示します。

これまでのところ、何かがうまくいかないことを示唆するものは何もありませんが、私はこのようなことにはまったく慣れていないので、必然的に位置データをより複雑な方法で使用したい場合に備えて、正しいことを確認したいと考えています. 私が疑わしい理由は、私の Django 管理ペインが OpenStreetMap で場所を正しく表示しないことです。ここに示されている (0,0) 点に対応するように見える点を示しています。表示される場所フィールドのテキスト バージョンは ですSRID=900913;POINT(-1.277482509613037 50.874104373286066)。これは、明らかに緯度/経度のままです。管理マップ上でマウスを動かすと、右下隅に表示されている座標が lat/lng ではなく 900913 形式であることがわかります。

位置情報を正しい形式で保存する方法と、単純に緯度/経度を使用する場合と比べてどのような利点があるかを説明してください (私の推測では、ルックアップのために距離を km で指定したい場合は、使用できません)私の緯度/経度の場所)。

4

0 に答える 0