我有一个关系数据库,其中每个条目都标记为带有纬度/经度坐标的点。我让用户能够在地图上标记任意多边形,并希望返回多边形内的所有条目。
实现这一目标的最佳方法是什么?
此外,值得指出的是,小错误是可以的(即,如果有一种有效的方法将多边形转换为一组矩形,那就没问题了。)
答案 0 :(得分:2)
使用空间扩展,大多数数据库都有这个。 在MySql中,您只能将它们与非事务性的MyISAM表一起使用。
http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
答案 1 :(得分:2)
快速减少要考虑的点数的一种方法是计算多边形的边界矩形(即,只是多边形中点的min-x,min-y,max-x,max-y) ,然后选择边界矩形内的点(即x在min-x和max-x之间,y在y之间相同)。
当然并非所有这些点都必须在多边形内,但现在你可以用代码来磨练它。
答案 2 :(得分:-1)
老黑客:
计算连接<point far away>
到<point in question>
的线穿过多边形的任何边界线段的次数。