Если вы пытаетесь найти точки, находящиеся между двумя точками, вам, вероятно, потребуется дважды использовать ST_DWith, чтобы вы получили точки, находящиеся на пересечении круга, основанного на точке 1, и окружности, основанной на точке 2 , например,
SELECT addressid FROM maddress
WHERE ST_DWithin(geocode, ST_MakePoint(20.0924758, 72.7341809), 100.0)
AND ST_DWithin(geocode, ST_MakePoint(19.137381, 72.837223), 100.0);
Обратите внимание, что единицы в SRID единиц, что в вашем случае, как представляется, быть 4326, так что вы можете преобразовать ваши координаты в метрах, использовать тип географии данных, поэтому расстояние будет в метрах или конвертировать расстояние до градусов - есть разные варианты. Я уверен, что вы видели ST_DWithin docs, который объясняет эти параметры. Вы также можете рассмотреть параметр use_spheroid.
Вместо ST_MakePoint
выше, вы можете также использовать ST_GeomFromText
, который принимает форму «POINT (х)», как вы первоначально имели опционально позволяет указать SRID, например, с помощью 4326, вы также можете написать запрос как :
SELECT addressid FROM maddress
WHERE ST_DWithin(geocode, ST_GeomFromText('POINT(20.0924758 72.7341809)',4326), 100.0)
AND ST_DWithin(geocode, ST_GeomFromText('POINT(19.137381 72.837223)', 4326), 100.0);
EDIT После комментариев от OP, то получается, что геокод не столбец геометрии. Вы можете исправить это, выполнив.
ALTER TABLE maddress ADD COLUMN geom GEOMETRY (POINT, 4326);
UPDATE maddress set geom=ST_MakePoint(lng,lat);
CREATE INDEX ix_spatial_geom on maddress using gist(geom);
Затем вам необходимо использовать геометрию вместо геокода в запросах выше. Я предполагаю, что ваши очки в 4326.
Вам нужно будет описать, как вы создаете свои геометрические формы, потому что это то, что ошибка. –
@MikeT. OP ответил в комментариях, геокод оказывается полями lat/lon отдельно, и если вы посмотрите на POINT, у него есть запятая. Таким образом, здесь есть около 3 вопросов. –