我们有一个 CSV 格式的数据库,其中包含所有县(在美国)及其由 SRID 和 MULTIPOLYGON 定义的边界。对于任何给定的坐标(十进制纬度和经度),我如何确定它属于哪个县。我们计划使用MySQL来存储数据并进行查询。
最佳答案
如果您的形状众多且复杂,最好使用空间数据库。 PostGIS 是免费的,可以在 MySQL 支持的大多数平台上运行。空间数据库具有用于存储多边形的空间数据类型、包括查询数据库以了解某个点是否在多边形中的空间查询以及使一切都合理高效的空间索引。
OTOH,如果您只处理少量相当简单的多边形,则可以使用普通数据库进行管理。我做过一次。我的做法:
有一个多边形表。每个多边形记录都包含主键、每个多边形需要存储的任何信息,以及多边形的边界框 - 最大和最小 x 和 y 值。
多边形的点存储在点表中,该表是多边形的子节点。每个点记录包含它所属的多边形的主键、序列号以及 x 和 y 值。
要查找可能包含点的多边形,您可以查询多边形表以查找可能包含该点的多边形 - 那些点位于其边界框内的多边形。这些候选多边形被读入内存,并检查每个多边形是否包含该点。
有许多算法。 http://en.wikipedia.org/wiki/Point_in_polygon
我使用了光线转换方法,因为它很简单。从该点向任意方向画一条线到无穷远,并计算您截取的线段数。如果您穿过奇数,则您的点在多边形内。
关于mysql - 如何确定坐标是否在多边形内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4938971/