5

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

我们有数百万条记录流过/流过我们需要快速查找以确定它们属于哪个国家多边形的地方。

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

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

从阅读 geotools 文档很难理解空间索引以及它的性能如何以及是否应该使用它?

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

谢谢

4

2 回答 2

3

您要解决的问题称为多边形问题中的点。先前的答案给出了一个使用 JTS(Java 拓扑套件)测试一个点是否在一个多边形中的示例。

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

于 2014-02-12T16:49:08.970 回答
1

简短回答:从您的国家构建梯形地图,点位置为 O(log n),其中 n 是线段数。

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

于 2014-02-12T19:06:26.747 回答