2012-02-21 12 views
3

本質的には、3つの座標があります。<@>がPostgreSQLで適切な距離を返さないのはなぜですか?

  1. クリーブランド、テネシー州(35.255097、-84.86844) - これは起源です。
  2. アトランタ、ジョージア州(32.4608333、-84.9877778) - これはその起源に非常に近い。
  3. コロンバス、ジョージア州(33.7488889、-84.3880556) - これは間違いありません。今、私は2つの点の間の空気のマイルを取得するために<@>演算子を使用しますEarthdistance module for Postgresqlを使用して

Here is a Google Map with these three points for comparison.

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) 

だから何それは私に指示することはコロンブスは、GAはクリーブランド(18.95mi)、アトランタ、GAよりもTN(34.58miに近いということです)私はそれが本当ではないことを明確に伝えることはできますが。 PostgreSQL 9.1とPostgreSQL 8.4でこれらの結果を確認しました。

答えて

3

逆座標順、 PostGIS expects緯度は、最初にです。

UPD:申し訳ありません、私はPostgisタグと混同されていますが、これはPostGISの機能ではありません。 "最初のコンポーネントは、経度(度)を表し、2番目のコンポーネントは緯度(度)を表すと解釈されます)。あなたは正しいです、それはGoogleマップで動作しますが、逆の順序で動作します。

UPD 2GIS Stackexchangeと表示されています。

+0

どのコードの順序が逆になっていますか?私は緯度が最初だと信じています、それはGoogleマップで動作します。 –

+0

更新を参照してください。 –

+0

私はあなたのアップデートを理解していない、私の質問に対する解決策を特定しているのか、それとも自分の答えに問題があるのか​​? –