MySQL:空间查询,用于确定纬度/经度点是否位于给定边界内。

5

我正在处理谷歌地图搜索功能。其目的是查找一个(地理位置)点是否位于一个多边形内,如下图所示:

enter image description here

我使用带有Spatial扩展的mysql 5.6.20,我知道它内置了很有用的几何函数,所以我可以直接从数据库中查询编码后的位置。

我的目标是熟悉地理空间函数,所以我编写了一个实验性的SQL语句。

给出一个点位置:POINT(100.52438735961914 13.748889613522605)

和要测试的多边形或边界为:POLYGON(100.49503326416016 13.766897133254545,100.55940628051758 13.746555203977,100.56266784667969 13.72170897580617,100.48885345458984 13.739051587150175)

以下是我的SQL示例:

SELECT ST_Within(
ST_GEOMFROMTEXT('POINT(100.52438735961914 13.748889613522605)'),
ST_GEOMFROMTEXT('POLYGON(100.49503326416016 13.766897133254545,
100.55940628051758 13.746555203977,100.56266784667969 13.72170897580617,
100.48885345458984 13.739051587150175)'))
As geoFenceStatus

但是,在输入命令后,我得到的回复似乎如下所示:
geoFenceStatus
===============
null

我不确定为什么它返回了'null'值。因为函数文档中指出,如果一个点在给定的多边形内部,应该返回'1'

如何正确获取我的SQL有什么建议将不胜感激。

1个回答

9
错误信息不够清楚,但是您的问题是您有一个无效的多边形。有两个问题:
  1. 您必须在末尾重复第一个点 - 这是为了将其与 LINESTRING 区分开来,即它是封闭的。
  2. POLYGONS 以双括号开始和结束,例如 POLYGON((x1 y1, x2 y2.......xn yn, x1 y1))。这是为了允许在多边形内使用单括号集来划分内部环。
请参阅维基百科WKT文章获取更多信息。
如果您将查询编写为以下内容,则应该会发现:
SELECT ST_Within(ST_GEOMFROMTEXT('POINT(100.52438735961914 13.748889613522605)'),
             ST_GEOMFROMTEXT('POLYGON((100.49503326416016 13.766897133254545, 100.55940628051758 13.746555203977,100.56266784667969 13.72170897580617, 100.48885345458984 13.739051587150175,
             100.49503326416016 13.766897133254545))'))
As geoFenceStatus

然后它应该可以工作。

1
不用谢。我一生中已经看了太多 WKT。 - John Powell
1
这里返回的是表中不在边界内的所有记录。 SELECT ST_Within(ST_GEOMFROMTEXT('POINT(1.2940879962646 103.77771377563)'), ST_GEOMFROMTEXT('POLYGON((1.2965335457972 103.77599716187, 1.2965335457972 103.7794303894,1.2916424443739 103.77599716187, 1.2916424443739 103.7794303894, 1.2965335457972 103.77599716187))'))As geoFenceStatus, name, reviews_cnt, latitude, longitude, photo, place_id from google_place_data order by reviews_cnt desc - Nilesh Kumar
@John MySQL 版本是 5.7.20。 - Nilesh Kumar
1
一个问题因为不清楚而被关闭,而我在这里抱怨的正是同样的事情。我再次重申,你提出了一个糟糕的问题,然后因为你不明白为什么它不能工作而对一个完美的答案进行了负面评价。这种态度令人不齿。 - John Powell
@JohnPowell - 快速问题.. 在ST_GEOMFROMTEXT中是否有一系列的坐标.. 比如说左上角,右上角,右下角,左下角,左上角? - Indark
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接