【发布时间】:2019-03-29 03:38:06
【问题描述】:
我是 PostGIS 新手,我正在尝试创建半径查询。我有一个带有geometry 字段(位置)的表,并且在单独的字段中也有纬度和经度值。
我正在尝试从纬度:40.753777,经度:-73.981568 10 公里半径范围内查找点。
与:
SELECT postcode, lat, lon, st_asgeojson(position) geojson, ST_Distance(ST_MakePoint(lat, lon), ST_MakePoint(40.753777, -73.981568)) distance FROM addresses WHERE ST_DWithin(ST_MakePoint(lat, lon), ST_MakePoint(40.753777, -73.981568), 10000) order by id limit 10;
结果给了我很远的路点。使用 lat 和 lon 对地球距离的相同查询直接给了我更接近的结果。
SELECT postcode, lat, lon, st_asgeojson(position) geojson FROM addresses WHERE earth_box(ll_to_earth(40.753777, -73.981568), 10000) @> ll_to_earth(addresses.lat, addresses.lon) order by id limit 10;
但我真的不知道这是否正确,PostGIS 查询有什么问题?
【问题讨论】:
-
经度和纬度与米无关,所以我认为这并不奇怪。如果数据点过于分布而无法合理转换为适当的投影,您可以使用
geography。 -
附带说明,必须先使用 long 创建点,然后再使用 lat
-
嗨@LaurenzAlbe 感谢您的回复,我认为可以在几何字段上计算距离,以获取距点的距离必须使用地理吗?你知道我用哪个 SRID 来按米查找吗?
-
@JGH 是的,我从 lat 42.035149 和 lon -78.8768906 创建的地理 json 导致 {"type":"Point","coordinates":[-78.8768906,42.035149]}
标签: postgresql postgis