我们有一个CSV格式的数据库,所有县(在美国)及其边界由SRID和MULTIPOLYGON定义。如何确定任何给定的坐标(小数纬度和经度),它属于哪个县。我们计划使用MySQL来存储数据并进行查询。
答案 0 :(得分:3)
如果您的形状繁多且复杂,那么使用空间数据库最适合您。 PostGIS是免费的,可以运行在MySQL的大多数平台上。空间数据库具有用于存储多边形的空间数据类型,包括查询数据库是否在多边形中的点的空间查询,以及使一切都合理有效的空间索引。
OTOH,如果您只处理相当少量的相当简单的多边形,则可以使用普通数据库进行管理。我做过一次。我的方法:
有一个多边形表。每个多边形记录都包含主键,无论您需要为每个多边形存储的信息,以及多边形的边界框 - 最大值和最小x和y值。
多边形的点存储在点表中,即多边形的子表。每个点记录包含它所属多边形的主键,序列号以及x和y值。
要查找可能包含点的多边形,可以查询多边形表,查找可能包含该点的多边形 - 这些点位于其边界框内。将这些候选多边形读入内存,并检查每个多边形以查看它是否包含该点。
有许多算法。 http://en.wikipedia.org/wiki/Point_in_polygon
我使用了光线投射方法,因为它很简单。在任何方向上绘制从点到无穷大的线,并计算您截取的线段数。如果你越过一个奇数,你的点就在多边形内。
答案 1 :(得分:2)
尝试使用mysql的地理扩展
http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html
虽然Postgres with PostGIS是一个比较成熟的地理数据库,但如果您有选择的话,我会使用它。
答案 2 :(得分:-1)
也许this reference会有所帮助。