我需要一个商业友好的(Apache Licence、LGPL、Mozilla Public License 等)R-tree在 Java 中实现,以便用地名Web 服务替换时区,如问题“在不使用网络的情况下从纬度/经度确定时区”中所建议的那样Geonames.org 等服务。我在周围找到 了一些 ,但我想知道是否有人在实践中评估或使用过它们。
3 回答
https://github.com/rweeks/util/blob/master/src/com/newbrightidea/util/RTree.java - Russ Weeks 的 R-Tree 的 LGPL 实现。它看起来非常简单明了,不依赖于外部库。
http://www.mischiefblog.com/?p=171 http://www.mischiefbox.com/blog/uploads/rtree.jar Chris Jones 对 R-Tree 的 LGPL 实现。另一个简单明了的解决方案。
http://www.khelekore.org/prtree/ Robert Olofsson的优先级R-Tree 的 CPL 1.0 实现
http://jsi.sourceforge.net/ LGPL - 项目旨在维护 RTree 空间索引算法的高性能 Java 版本。
首先让我指出,如果您从给定坐标查找最近的城市,它可能不在同一时区!在我看来,你真正需要的是有关它的行政隶属关系的信息 - 最低限度是一个国家,但在某些情况下,它应该比这更多,即国家。可以使用 Google Maps API 检索该信息,然后将其与一些更详细的 TZ 信息相关联。
GeoNames - EarthTools有一个免费的替代品。服务本身有一些限制(请求数量等),但它仍然很好,经过测试并且对我来说工作得很好。
其次 - GeoNames - EarthTools有一个免费的替代品。服务本身有一些限制(请求数量等),但它仍然很好,经过测试并且对我来说工作得很好。
第三 - 如果您关心将数据导入数据库,大多数当前的数据库实现都提供您可以使用的地理空间索引。如果您需要在您的应用程序中嵌入该信息,您可以使用 H2Database(嵌入式 Java DB)和H2Spatial添加 - 尽管我已经尝试过,但我不能完全推荐它。Neo4j 有很好的空间索引实现
此外,您可以使用Solr进行地理空间搜索。这很好,它很快而且很容易实现。我实际上正在将我的数据库搜索迁移到 Solr 的过程中......
最后但并非最不重要的一点是,您会在下面找到我不久前测试过的一些:
可能还有更多,但到目前为止我测试过的那些......
我创建的 RTree 简单 Java 类: https ://github.com/hadmir/rtree/blob/master/RTree.java
所有对象都存储在两个 int[] 数组中,因此非常容易持久化(到文件)。此外,添加新矩形不会创建任何对象这一事实意味着您可以将数百万个矩形插入 RTree 并且 JVM 不会燃烧。这对于对象数量通常很大的地理项目很有用。
仅存储 2D 矩形(因此,对于复杂对象,您需要找到边界矩形)。查询返回与“查询矩形”相交或重叠的所有矩形(矩形 ID)。