我希望有人可以指出我正确的方向。
我们有数百万条记录在流动/流式传输,我们需要快速查找以确定它们属于哪个国家/地区多边形。
有人可以推荐一个完整的基于JAVA的方法来做到这一点。据我所知,我会使用JTS和/或geotools?我的想法是采用所有的国家多边形,并可能像FishNet或Grid一样将它们分开,以使它们更小,以获得更好的性能。然后我会将这些加载到基于java的内存空间索引中......当我通过I记录流时,会查找java空间索引以查看它们属于哪个国家/地区。 (可能像空间特征集合一样)。
这种方法对于大量数据听起来是否合理?从java的角度来看,我该如何实现呢?这只是使用JTS和/或Geotools吗?我会创建什么类型的索引。 (加载后多边形数据将是静态的,因为它只包含国家边界)
从阅读geotools文档来看,难以破译空间索引及其执行情况以及是否应该使用它?
任何帮助或指导将不胜感激。
由于
答案 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