2011-02-08 69 views
1

我们有一个CSV格式的数据库,所有县(美国)及其边界由SRID和MULTIPOLYGON定义。我怎样才能确定任何给定的坐标(十进制经度和纬度),它属于哪个县。我们计划使用MySQL来存储数据并执行查询。如何确定一个坐标是否在mutilpolygon内?

回答

-1

也许​​将有所帮助。

3

如果您的形状繁多复杂,最好使用空间数据库。 PostGIS是免费的,并且可以在大多数MySQL平台上运行。空间数据库具有用于存储多边形的空间数据类型,包括查询数据库的点是否在多边形中的空间查询以及使所有事情都合理高效的空间索引。

OTOH,如果您只处理相当少量的相当简单的多边形,则可以使用普通数据库进行管理。我已经做了一次。我的方法:

有一个多边形表。每个多边形记录包含主键,无论您需要用每个多边形存储哪些信息,以及多边形的边界框 - 最大值和最小值x和y值。

多边形的点存储在点表中,该点表是多边形的子点。每个点记录都包含它所属的多边形的主键,序列号以及x和y值。

要查找可能包含点的多边形,可以查询多边形表,查找可能包含点的多边形 - 点位于其边界框内的多边形。将这些候选多边形读入内存,并检查每个多边形是否包含该点。

有很多算法。 http://en.wikipedia.org/wiki/Point_in_polygon

我使用了光线投射法,因为它很简单。在任何方向上从点到无穷大绘制一条线,并计算您截取的线段的数量。如果你穿过一个奇数,你的观点就在多边形内。

相关问题