Поскольку ваши данные не проецируются - это точки на сфероиде - линейные расстояния не имеют смысла. Пять миль на экваторе - намного меньший угол, чем 5 миль на полярном круге. Но, к счастью, PostGIS (> = 1.5) имеет ответ, который вы ищете:
SELECT * FROM table WHERE ST_DWithin(ST_GeogFromText('SRID=4326;POINT(0,0)'), geography(latlon), 12070);
У него есть geography
тип, который предназначен именно для такого рода вещей. Он похож на геометрию, но в нем всегда используется EPSG: 4326, и с ним работает гораздо меньше функций.
В приведенном выше примере я вызвал ST_GeogFromText () (есть также ST_GeographyFromText () , и я не уверен, есть ли разница) в точке интереса (это может работать с обычным WKT, потому что параметр SRID избыточный), и приведите столбец latlon к типу географии. Если вы делаете много из них, может быть более эффективно создать столбец географии в вашей таблице и полностью пропустить приведение. Наконец, ST_DWithin () может принимать параметры географии, и это правильно делает с линейными расстояниями.