首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试点到多边形的Mysql距离

问测试点到多边形的Mysql距离
EN

Stack Overflow用户
提问于 2012-06-19 19:34:05
回答 1查看 1.4K关注 0票数 1

我已经使用Geometry type字段将一些地图区域存储到表中。

所以插件是这样的:

代码语言:javascript
复制
INSERT INTO zones (zoneName, coords) VALUES ('name',
PolygonFromText('POLYGON((
41.11396418691335 1.2562662363052368,
41.11370552595821 1.2560248374938965,
41.11851079510035 1.2459397315979004,
41.11880984984478 1.2461864948272705,
41.11396418691335 1.2562662363052368))'));

然后我有了用户位置,我需要知道他是否在某个区域内。这可以很好地与以下内容配合使用:

代码语言:javascript
复制
SELECT id 
  FROM zones 
 WHERE MBRContains(coords,GeomFromText('POINT(41.117783 1.260590)'))

但有时,用户位置并不完美,所以我认为最好知道哪个区域最接近用户位置。

这是我完全不知道的部分。我找到了一些查询来获得两个点之间的距离,但不是一个点和多边形。

EN

回答 1

Stack Overflow用户

发布于 2012-06-19 20:28:28

MBR系列函数(如MBRContains)并不适合您要做的事情;它们只测试边界矩形的包含。

您可能希望跳转到MySQL 5.6.1,并使用ST_函数,如ST_Contains。这些函数实际测试几何图形。

您正在处理的问题可以定义为当您将其与您的边界POLYGON项的集合进行比较时,POINT的位置不确定。

试试这个:从你的角度创建一个POLYGON,它是一个与你的不确定性大小一致的正方形。你可以把这个正方形想象成一个“模糊”点。(您也可以使用八角形或其他更接近于圆的形状来代替矩形,但查询速度会变慢。)

然后使用ST_Within查看是否有一个完全包含模糊点的唯一多边形。如果你只得到一个多边形,你就完成了。

如果你得到的多个多边形完全包含你的模糊点,这意味着你的一些边界多边形与其他边界多边形重叠。你需要弄清楚这在你的问题空间中意味着什么。如果您的数据是结构正确的地图边界数据,这意味着您有一个数据错误。(注:这并非闻所未闻:-)

如果没有完全包含模糊点的多边形,则模糊点可能与至少一个多边形的边界重叠,也可能不重叠。使用ST_Overlaps查找这些多边形。

如果你只得到一个,你就完成了--你的模糊点接近于一个多边形的边界。

如果你没有得到任何东西,你就完成了--你的模糊点远离了你所有多边形的边界。

如果你得到一个以上的匹配,你就有一个模糊性--你的模糊点在多个多边形的边界附近。

这是一个很难解决的问题。您可以减小模糊点的大小,然后重试。这可能只会产生一个多边形结果。但是,这样做可能会欺骗你自己,让你认为你的观点比他们更准确。

MySQL没有几何运算符Area(Intersection(Polygon, FuzzyPoint))。如果是这样的话,你可以选择与模糊点相交面积最大的多边形,这将是一个很好的消歧工具。但它仍然和你的观点一样不准确。

也许您的应用程序应该处理“太接近A、B和C的边界”的result类别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11100090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档