MySQL:Spatial Query用于查找纬度/经度点是否位于给定边界内

时间:2014-08-25 18:11:57

标签: mysql geospatial

我正在开发谷歌地图搜索功能。这样做的目的是找出(地理定位)点是否位于多边形内,如下图所示?

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 个答案:

答案 0 :(得分:6)

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

  1. 你必须在结尾处重复第一点 - 这是为了区别于LINESTRING,基本上,即它已经关闭。

  2. POLYGONS以双括号开头并结束,即POLYGON((x1 y1, x2 y2.......xn yn, x1 y1))。这是为了允许内环用多边形内的单括号集描绘。

  3. 有关详细信息,请参阅wikipedia WKT article

    如果您将查询写为:

    ,您应该会发现
    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
    

    然后应该工作。