几何查询中的MySQL
为什么这个查询返回3个国家,而它应该返回一个。 它返回: 1.法国 2.德国(正确的一个) 3.美国几何查询中的MySQL,mysql,Mysql,为什么这个查询返回3个国家,而它应该返回一个。 它返回: 1.法国 2.德国(正确的一个) 3.美国 我的国家边界数据是否有缺陷,或者这些几何函数是否存在一些技巧 MySQL还不能检查多边形中的一个点。它将检查您的点是否在([minX,maxX],[minY,maxY])范围内。另外,我在MySQL文档中没有看到 注 目前,MySQL没有按照规范实现这些功能。那些被实现的函数返回与相应的基于MBR的函数相同的结果。这包括以下列表中除Distance()和Related()之外的函数 这些功能可以
我的国家边界数据是否有缺陷,或者这些几何函数是否存在一些技巧 MySQL还不能检查多边形中的一个点。它将检查您的点是否在([minX,maxX],[minY,maxY])范围内。另外,我在MySQL文档中没有看到
注
目前,MySQL没有按照规范实现这些功能。那些被实现的函数返回与相应的基于MBR的函数相同的结果。这包括以下列表中除Distance()和Related()之外的函数
这些功能可以在未来的版本中实现,并完全支持空间分析,而不仅仅是基于MBR的支持
我使用了一种算法,如果直线不长,它在极地以外的区域可以非常精确。否则,您将需要求解球面三角形
简单的实现如下所示:
SELECT `NAME` FROM world_boundaries
WHERE Within(GeomFromText('POINT(8.5929098 50.0286713)'), ogc_geom);
选择多边形内点的查询:
create table point (x int, y int...) /* int values (int(lat * 10^6)) for better performance */
create table poly (x1 int, y1 int, x2 int, y2 int...) /* temporary table for 1 poly only */
从点、多边形中选择点\u id
式中((y=y1)或(y=y2))和((x=x1)或(x=x2))
按点分组\u id
具有总和(x1*(y2-y1)*符号(y2-y1)
在奔腾2.5Ghz上,在0.06秒内,与40条线的多边形相比,可计算20000点。:) 我添加了用于解决类似问题的方法。希望这有帮助。有没有任何php算法可以使用几何mysql数据并检查一个点是否在给定的多段线内?您可以扩展我为多个多边形提供的算法。将这项工作交给MySQL比用PHP计算要好,但无论如何,您可以看到我链接的文章,并用PHP重新编写这段代码。
select point_id from point, poly
where ((y<y2 and y>=y1) or (y<y1 and y>=y2)) and ((x<x2 and x>=x1) or (x<x1 and x>=x2))
group by point_id
having sum(x1*(y2-y1)*sign(y2-y1) < x*(y2-y1)*sign(y2-y1) - (y-y1)*(x2-x1)) % 2