2011-12-28 124 views
1

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

回答

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的情况下他们是学位。如果您的投影数据以米为单位,您将能够使用仪表。

对于生产应用程序,您应该使用几何类型,速度更快。从计算器以前question

简答题:地理是支持长距离 距离测量一个新的数据类型。如果您使用地理 - 您不需要 了解更多有关平面坐标系的知识。如果您关心的只是测量距离和长度,并且您拥有来自世界各地的数据,则地理位置通常最好是 。几何数据类型是一个较旧的数据类型,它具有许多支持它的功能,并且从第三方工具中获得很大的支持 。如果您对 空间参考系统非常满意,或者您正在处理的是所有数据都适合单个空间参考系统(SRID)的本地化数据,或者您需要进行大量空间处理,那么这是最好的选择。请参阅第8.8节“PostGIS 函数支持列表”,查看当前支持的内容以及 不支持的内容。

-3

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

这里有什么问题..

+0

你应该发布这是另一个问题。什么是错误信息? – 2011-12-29 15:55:49

+0

输入一个新问题,标记为php – Twelfth 2011-12-29 18:59:15