Postgresql 查询PostGIS半径,得到奇数结果
我是PostGIS新手,我正在尝试创建一个radius查询。我有一个带有Postgresql 查询PostGIS半径,得到奇数结果,postgresql,postgis,Postgresql,Postgis,我是PostGIS新手,我正在尝试创建一个radius查询。我有一个带有几何图形字段(位置)的表,并且在单独的字段上有纬度和经度值 我正试图从lat:40.753777,lon:-73.981568找到半径为10公里的点 与: 结果给了我很远的路分。使用lat和lon对地球距离进行相同的查询,直接得到更接近的结果 SELECT postcode, lat, lon, st_asgeojson(position) geojson FROM addresses WHERE earth_box(ll_
几何图形字段(位置)的表,并且在单独的字段上有纬度和经度值
我正试图从lat:40.753777,lon:-73.981568找到半径为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查询有什么问题吗?一些注意事项:
我认为当你提出一个观点时,你交换了lat和lon,你的线条是ST_MakePoint(40.753777,-73.981568),但定义是:
因此,它应该是圣卢西亚的关键点(-73.981568,40.753777)
作为一个简单的解决方案,您可以使用ST_Distance_Spheroid函数():
经度和纬度与米无关,所以我认为这并不奇怪。如果数据点分布过于分散,无法合理转换为适当的投影,您可以使用地理
。另一方面,必须先使用long创建点,然后使用latHi@LaurenzAlbe。感谢您的回复,我认为可以在几何字段上计算距离,要获得与点的距离,必须使用地理信息?你知道我用哪一个SRID按米查找吗?@JGH是的,我用lat 42.035149和lon-78.8768906创建的geo json产生了{“类型”:“点”,“坐标”:[-78.8768906,42.035149]}
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;
geometry ST_MakePoint(double precision x, double precision y);
Note: x is longitude and y is latitude
SELECT
postcode, lat, lon, st_asgeojson(position) AS geojson,
ST_Distance_Spheroid(
position,
ST_GeomFromText('POINT(-73.981568 40.753777)',
4326), 'SPHEROID["WGS 84",6378137,298.257223563]'
) as distance
FROM addresses
WHERE distance < 10000 LIMIT 10;
ALTER TABLE addresses ADD COLUMN position_geog geography(Point,4326);
UPDATE addresses SET position_geog = position::geography;
CREATE INDEX ON addresses USING gist(position_geog);
-- and now you can use ST_DWITHIN with meters...