如何确定坐标是否在mutilpolygon内?

时间:2011-02-08 21:58:40

标签: mysql sql coordinates polygon spatial

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

3 个答案:

答案 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会有所帮助。