postgis: ST_Distance между двумя географиями.Ошибка синтаксиса - PullRequest
1 голос
/ 31 марта 2019

я пытаюсь запустить это на своей таблице

select ST_Distance (
    select location from utenti where user_id=464,
    select location from utenti where user_id=474604
);

, имея столбец местоположения этого типа location geography(POINT, 4326)

Я получаю синтаксическую ошибку, и я не понимаю, почему.

как мне достичь своей цели?

например, если я выбираю этот столбец в двух запросах для каждого пользователя, я получаю такие данные, как "0101000020E61000001435F98F528125402AE5B512BAA34540"

и работает:

select ST_Distance(%s, %s);

это работает, но расстояние не похоже на правду.гм

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

Как указано в комментариях выше, вы можете переписать запрос как:

SELECT ST_Distance(a.geom, b.geom) FROM utenti a, utenti b WHERE a.user_id=464 AND b.user_id=474604; 

НО это даст вам расстояние в градусах (поскольку это то, что ваши баллы хранятся как). Таким образом, вы захотите изменить свою функцию на:

SELECT ST_Distance_Sphere(a.geom, b.geom) FROM utenti a, utenti b WHERE a.user_id=464 AND b.user_id=474604; 

ST_Distance_sphere примет во внимание некоторую кривизну Земли и вернет расстояние в метрах. Если вам требуется абсолютная точность и вы не беспокоитесь о скорости, вы можете учесть всю кривизну Земли, используя st_distance_spheroid .

0 голосов
/ 05 апреля 2019

Если расстояние от полигона до точки выберите st_distance (st_geomfromtext ('POINT (0 0)'), st_geomfromtext ('POLYGON ((1 1, 2 1, 2 2, 1 2, 1 1))'))

тот же базовый столбец пространственной геометрии для

select st_distance(
    st_geomfromtext(c.geom), 
    st_geomfromtext(b.geom)
) from  city c , build b where b.c_ID=c.ID
...