Запрос, чтобы найти расстояние между столбцом точки и точкой в ​​PostGis - PullRequest
1 голос
/ 28 декабря 2011

Я использую PostGis для расчетов на основе местоположения в моем приложении.В таблице у меня есть столбец с именем 'location' в географическом типе (Point (lon lat)) ... Как и в этом количестве строк, представленных в таблице.Я хочу передать точку (Point (lon lat)) и проверить расстояние между этой точкой (я прошел) и столбцом местоположения во всех строках .... и если расстояние меньше 5 м .... он вернет имяо точке. Как запросить это.

Ответы [ 2 ]

2 голосов
/ 28 декабря 2011

Предполагая, что ваш массив ваших данных равен 4326, запрос, который вы ищете:

SELECT the_geom FROM mytable WHERE ST_DWithin(the_geom,ST_GeomFromEWKT("srid=4326;POINT(lon lat)"), 0.0008);

Обратите внимание, что единицы (0,0008) в ST_DWithin находятся в тех же единицах вашей проекции вВ случае, если они градусы.Если ваши проекционные данные указаны в метрах, вы сможете использовать метры.

Для производственного приложения вы должны использовать геометрические типы, это быстрее.Из стека переполнения предыдущий вопрос :

Краткий ответ: география - это новый тип данных, который поддерживает измерения расстояний на большие расстояния.Если вы используете географию - вам не нужно много узнавать о планарных системах координат.География, как правило, лучше всего, если все, что вам нужно, это измерение расстояний и длин, и у вас есть данные со всего мира.Тип данных Geometry - это более старый тип данных, который имеет множество функций, поддерживающих его, и пользуется большой поддержкой сторонних инструментов.Лучше всего, если вы достаточно знакомы с системами пространственной привязки или имеете дело с локализованными данными, в которых все ваши данные помещаются в единую систему пространственной привязки (SRID), или вам необходимо выполнить большую объемную обработку.Обратитесь к разделу 8.8, «Матрица поддержки функций PostGIS», чтобы узнать, что в данный момент поддерживается, а что нет.

0 голосов
/ 29 декабря 2011

Отлично. Спасибо.Он отлично работает в базе данных.У меня есть следующий код из PHP .. это повторяется как, Query Failed:
$ locationresult = pg_query ($ con, "SELECT id, name FROM gps.locationnames WHERE ST_DWithin (location, ST_GeographyFromText ('POINT(lon lat) '), 500) ") или die (' Query Failed: '. pg_last_error ($ con));

В чем здесь проблема ..

...