gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:26:41 24 4
gpt4 key购买 nike

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

enter image description here

我正在使用带有空间扩展的 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

我很不确定为什么它会返回“空”值。因为在函数文档中指出,如果点位于给定的多边形内,这应该返回“1”

如有任何建议,如何使我的 sql 正确,我们将不胜感激。

最佳答案

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

  1. 你必须在最后重复第一点 -- 这是为了将它与 LINESTRING 区分开来,本质上,即它是封闭的。

  2. 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

那么应该可以工作。

关于MySQL:空间查询以查找纬度/经度点是否位于给定边界内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com