3

基本的に、私は3つの座標を使用しています。

  1. テネシー州クリーブランド-(35.255097、-84.86844)-これが起源です。
  2. ジョージア州アトランタ-(32.4608333、-84.9877778)-これはその起源にはるかに近いです。
  3. ジョージア州コロンバス-(33.7488889、-84.3880556)-これは間違いなく遠くにあります。

これが比較のためにこれらの3つのポイントを持つGoogleマップです。

ここで、PostgresqlのEarthdistanceモジュールを使用して、オペレーターを使用し<@>て2つのポイント間のエアマイルを取得します。

SELECT 'Celeveland, TN' AS origin
 , '(35.255097,-84.86844)' AS origin_cords
 , city || ', ' || region AS dest
 , cords AS cords
 , cords <@> '(35.255097,-84.86844)'::point AS distance_miles
FROM maxmind.city
WHERE (region = 'GA' AND city ='Atlanta') OR (region = 'GA' AND city = 'Columbus')
;

しかし、これは私が得るものです...

     origin     |     origin_cords      |     dest     |          cords           |  distance_miles  
----------------+-----------------------+--------------+--------------------------+------------------
 Celeveland, TN | (35.255097,-84.86844) | Columbus, GA | (32.4608333,-84.9877778) |  18.952732930393
 Celeveland, TN | (35.255097,-84.86844) | Atlanta, GA  | (33.7488889,-84.3880556) | 34.5888147812704
(2 rows)

つまり、ジョージア州コロンバスは、ジョージア州アトランタ(34.58mi)よりも、ジョージア州クリーブランド(18.95mi)に近いということです。Postgresql9.1とPostgresql8.4でこれらの結果を確認しました。

4

1 に答える 1

3

座標の順序を逆にすると、PostGISは緯度が最初になることを想定しています。

UPD:申し訳ありませんが、postgisタグで混乱しています。これはPostGIS関数ではありません。リンクした地球距離のドキュメントから、「最初のコンポーネントは経度を度で表すために使用され、2番目のコンポーネントは緯度を度で表すために使用されます」。そうです、それはグーグルマップで機能しますが、逆の順序です。

UPD 2GISStackexchange全体があるようです。

于 2012-02-22T04:43:40.280 に答える