Я предполагаю, что вы используете PostgreSQL, основываясь на использовании gc_dist.Пока у вас установлен PostGIS, вы можете выполнять желаемую логику, используя встроенную функциональность.
Для этого вам нужно подготовить таблицу:
Сначала сохраните свое местоположение какПостГИС точка.Я предлагаю использовать WGS-84 для географических расчетов.
После того, как вы это сделаете, вы можете запросить все точки на любом заданном расстоянии от желаемого местоположения, используя ST_Contains
и ST_Buffer
, где ST_Buffer
охватывает центральную точку, для которой вы хотите найти соседей (-79.746639, 43.758152) в порядке long / lat.
Я никогда не использовал PostgreSQL для этого, но ясделали это с Oracle.Похоже, что для PostgreSQL используются те же настройки, что и для Oracle:
A.Сообщите базе данных, что вы будете создавать геометрический столбец. Здесь найден синтаксис .
SELECT AddGeometryColumn('db_name', 'table_name', 'desired_column_name', 4326,
'POINT', 2);
Выше 4326 - это постоянная "SRID", обозначающая WGS-84.
B.Добавьте индекс в столбец. Здесь найден синтаксис (эта страница кажется очень полезной).
CREATE INDEX desired_index_name
ON table_name
USING gist(desired_column_name);
C.Добавьте свои данные.
INSERT INTO table_name (desired_column_name)
VALUES('SRID=4326;POINT(-79.746639 43.758152)');
(мне любопытно, если приведенная выше строка должна содержаться в ST_GeomFromText
на основе других примеров)
или ( я нашел здесь )
INSERT INTO table_name (desired_column_name)
VALUES (ST_Transform(ST_MakePoint(-79.746639, 43.758152), 4326));
Примечание: я предполагаю, что это (X, Y), что означает порядок широты и долготы.
D.Запросите ваши данные.
SELECT * FROM table_name
WHERE
ST_Contains(
ST_Buffer(
ST_Transform(ST_MakePoint(-79.746639, 43.758152), 4326),
distance_probably_in_meters),
desired_column_name);