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

MySQL:用于查找纬度/经度点是否位于给定边界内的空间查询,mysql,geospatial,Mysql,Geospatial,我正在研究谷歌地图搜索功能。这样做的目的是确定地理定位点是否位于多边形内,如下图所示 我使用的是mysql 5.6.20和Spatial extension,我知道它内置了有用的几何函数,所以我可以直接从数据库中查询地理编码的位置 我的目标是熟悉地理空间功能,所以我写了一个实验性的sql 给定点地理位置:点100.52438735961914 13.748889613522605 待测试的多边形或边界为: POLYGON100.49503326416016 13.7668971332545455

我正在研究谷歌地图搜索功能。这样做的目的是确定地理定位点是否位于多边形内,如下图所示

我使用的是mysql 5.6.20和Spatial extension,我知道它内置了有用的几何函数,所以我可以直接从数据库中查询地理编码的位置

我的目标是熟悉地理空间功能,所以我写了一个实验性的sql

给定点地理位置:点100.52438735961914 13.748889613522605

待测试的多边形或边界为: POLYGON100.49503326416016 13.7668971332545455100.55940628051758 13.746555203977100.56266784667969 13.72170897580617100.488853458984 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的建议,我们将不胜感激。

错误消息不是很清楚,但您的问题是您的多边形无效。它有两个问题:

您必须在末尾重复第一个点-这是为了将其与线字符串区分开来,本质上就是说,它是闭合的

多边形以双括号开始,以双括号结束,即POLYGONx1 y1,x2 y2…….xn yn,x1 y1。这是为了允许使用多边形内的单括号集描绘内环

有关更多信息,请参阅

您应该发现,如果将查询编写为:

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

那就是应该工作。

不客气。在我的一生中,我看了太多的WKT,这是从表中返回所有不在边界内的记录。选择ST_With Inst_GEOMFROMTEXT“POINT1.294087996646103.77771377563”,ST_GEOMFROMTEXT“POLYGON1.2965335457972 103.77599716187,1.2965335457972 103.7794303894,1.2916424443739 103.77599716187,1.291642444443739 103.7794303894,1.2965335457972 103.77599716187”作为地理围栏状态、名称、评论、纬度、经度、照片、,来自google的place\u id\u place\u数据按评论排序\u cntdesc@NileshKumar. 您使用的是什么版本的MySQL。并非所有版本的MySQL都支持正确的交叉函数-在5.7之前,它只支持EDF MBR操作。谢谢你的否决票,在你花了几百个小时帮助社区之后,人们这样做总是很好的,人们甚至都不去陈述他们的用例。@John MySQL verion是5.7.20A questoin,因为不清楚我在这里抱怨的完全相同的事情而关闭。我重复一遍,你问了一个糟糕的问题,然后否决了一个完美的答案,因为你不明白为什么它不适合你。可耻的态度。