Domanda

In sostanza, ho tre coordinate in gioco.

  1. CLEVELAND, TN-(35.255097, -84.86844)-Questa è l'origine.
  2. ATLANTA, GA-(32.4608333, -84.9877778)-Questo è molto più vicino a quell'origine.
  3. COLUMBUS, GA-(33.7488889, -84.3880556)-Questo è decisamente più lontano.

Ecco una mappa di Google con questi tre punti per il confronto.

Ora usando il Modulo EarthDistance per PostgreSQL Userò il <@> Operatore per ottenere le miglia aeree tra i due punti.

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')
;

Eppure questo è quello che ottengo ...

     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)

Quindi quello che mi dice è che Columbus, GA è più vicino a Cleveland (18,95mi), TN di Atlanta, GA (34,58mi) anche se posso dire chiaramente che non è vero. Ho confermato questi risultati su PostgreSQL 9.1 e PostgreSQL 8.4.

È stato utile?

Soluzione

Ordine delle coordinate inverse, Postgis si aspetta latitudine per essere prima.

Aggiornamento: Mi dispiace, sono stato confuso dal tag Postgis, questa non è una funzione Postgis. Dalla documentazione di EarthDistance hai collegato: “Il primo Il componente viene preso per rappresentare longitudine In gradi e il secondo componente viene preso per rappresentare latitudine in gradi ”. Hai ragione, funziona su Google Maps, ma in ordine inverso.

Aggiorna 2: Sembra che abbiamo il tutto GIS Stackexchange.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top