我正在研究谷歌地图搜索功能.这样做的目的是找出(地理定位)点是否位于多边形内,如下图所示?
我正在使用带有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正确.
解决方法:
错误消息不是很清楚,但您的问题是您的Polygon无效.它有两个问题:
>你必须重复最后的第一点 – 这是为了区别于LINESTRING,基本上,它是关闭的.
> POLYGONS以双括号开头并以双括号结束,即POLYGON((x1 y1,x2 y2 ……. xn yn,x1 y1)).这是为了允许使用多边形内的单个括号集来描绘内环.
有关更多信息,请参见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
那应该是有用的.