查询以查找PostGis中的点列和点之间的距离

时间:2011-12-28 14:23:33

标签: postgresql postgis

我在我的应用程序中使用PostGis进行基于位置的计算。在表格中,我在地理类型(Point(lon lat))中有一个名为“location”的列...就像表中存在的这个行数一样。 我想传递一个点(Point(lon lat))并检查这一点(我通过)和所有行中的位置列之间的距离....如果距离小于5米....它将返回名称关键点。如何查询。

2 个答案:

答案 0 :(得分:2)

假设您的数据的srid是4326,您要查找的查询是:

SELECT the_geom FROM mytable WHERE ST_DWithin(the_geom,ST_GeomFromEWKT("srid=4326;POINT(lon lat)"), 0.0008);

请注意,ST_DWithin中的单位(0.0008)与投影的单位相同,在4326的情况下,它们是度。如果投影数据以米为单位,则可以使用米。

对于生产应用程序,您应该使用几何类型,速度更快。从stackoverflow上一个question

  

简答:地理是一种支持远程的新数据类型   距离测量。如果你使用地理 - 你不需要   了解平面坐标系。地理位置一般   如果你关心的只是测量距离和长度而你就是最好的   拥有来自世界各地的数据。 Geometry数据类型是较旧的数据   具有许多支持它的功能的类型,并享有很大的支持   来自第三方工具。如果你很舒服,它是最好的   空间参考系统或您正在处理本地化数据   您的所有数据都适合单个空间参照系(SRID)   需要做很多空间处理。请参见第8.8节“PostGIS   功能支持矩阵“查看当前支持的内容和内容   不是。

答案 1 :(得分:-3)

太棒了。谢谢。它在数据库中工作正常。我有以下来自PHP的代码..回复,查询失败:
$ locationresult = pg_query($ con,“SELECT id,name FROM gps.locationnames WHERE ST_DWithin(location,ST_GeographyFromText('POINT(lon lat)'),500)”)或die('Query Failed:'。pg_last_error($ con) ));

这里有什么问题..