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