Java商业友好的R树实现?

时间:2011-09-15 18:27:19

标签: java indexing r-tree

我需要在Java中实现商业友好(Apache许可证,LGPL,Mozilla公共许可证等)R-tree实现,以便将geonames Web服务替换为时区,如问题所示“ Determine timezone from latitude/longitude without using web services like Geonames.org”。我有found some around,但我想知道是否有人在实践中评估或使用过它们。

3 个答案:

答案 0 :(得分:13)

答案 1 :(得分:2)

首先让我指出,如果您从给定坐标查找最近的城市,它可能不在同一时区!在我看来,你真正需要的是一个关于它的行政隶属关系的信息 - 最小的是一个国家,但在某些情况下它应该更多,即国家。可以使用Google Maps API检索该信息,然后将其与一些更详细的TZ信息相关联。

有一个免费的替代GeoNames - EarthTools。服务本身有一些限制(请求数量等),但它仍然很好,经过测试并且对我来说也很合适。

其次 - GeoNames有一个免费的替代品 - EarthTools。服务本身有一些限制(请求数量等),但它仍然很好,经过测试并且对我来说也很合适。

第三,如果您愿意将数据导入数据库,那么大多数当前的数据库实现都会提供您可以使用的地理空间索引。如果您需要嵌入在您的应用程序中的信息,您可以使用H2Database(嵌入式Java DB)并添加H2Spatial - 虽然我已经尝试过但我不能完全推荐它。 Neo4j具有很好的空间索引实现

此外,您可以Solr使用GeoSpatial searches。这很好,它很快,而且很容易实现。我实际上正处于将数据库搜索迁移到Solr ...

的过程中

最后,但并非最不重要的是,在下面你会找到一些我曾经测试过的那些:

  • JSI - LGPL
  • GeoTools - LGPL,一个矫枉过正,会给你的远远超过你所需要的......但它太棒了!

可能还有一些,但到目前为止我测试的那些......

答案 2 :(得分:0)

由我创建的RTree简单Java类: https://github.com/hadmir/rtree/blob/master/RTree.java

所有对象都存储在两个int []数组中,因此很容易持久化(到文件)。此外,添加新rects并不会创建任何对象这一事实意味着您可以将数百万个矩形插入到RTree中,而JVM不会在火焰中燃烧。这对于地理项目非常有用,因为对象计数通常很大。

仅存储2D矩形(因此,对于复杂对象,您需要找到边界矩形)。查询返回与"查询矩形"相交或重叠的所有rects(rects的ID)。