Java方法快速查找点是否属于某个国家/地区(多边形)

时间:2014-02-12 15:51:48

标签: java geometry geotools jts

我希望有人可以指出我正确的方向。

我们有数百万条记录在流动/流式传输,我们需要快速查找以确定它们属于哪个国家/地区多边形。

有人可以推荐一个完整的基于JAVA的方法来做到这一点。据我所知,我会使用JTS和/或geotools?我的想法是采用所有的国家多边形,并可能像FishNet或Grid一样将它们分开,以使它们更小,以获得更好的性能。然后我会将这些加载到基于java的内存空间索引中......当我通过I记录流时,会查找java空间索引以查看它们属于哪个国家/地区。 (可能像空间特征集合一样)。

这种方法对于大量数据听起来是否合理?从java的角度来看,我该如何实现呢?这只是使用JTS和/或Geotools吗?我会创建什么类型的索引。 (加载后多边形数据将是静态的,因为它只包含国家边界)

从阅读geotools文档来看,难以破译空间索引及其执行情况以及是否应该使用它?

任何帮助或指导将不胜感激。

由于

2 个答案:

答案 0 :(得分:3)

您尝试解决的问题称为point in polygon问题。 previous answer给出了使用JTS(Java拓扑套件)测试一个点是否在一个多边形中的示例。

我不知道对于多个多边形是否有更有效的解决方案。您可能希望依次测试多边形,按distance排序。

答案 1 :(得分:1)

简答:从您所在的国家/地区建立一个梯形地图,点位置为O(log n),其中n是线段数。

参考:计算几何的第6章:算法与应用,Mark de Berg,Otfried Cheong,Marc van Kreveld,Mark Overmars