2011-09-15 12 views
13

Necesito una implementación compatible con los comerciales (licencia Apache, LGPL, Mozilla Public License, etc.) R-tree en Java, para sustituir el servicio web geonames por zonas horarias, como se sugiere en la pregunta "Determine timezone from latitude/longitude without using web services like Geonames.org". Tengo foundsomearound, pero me preguntaba si alguien los ha evaluado o usado en la práctica.¿Implementación de R-tree compatible con Java?

+1

¿Puede explicar lo que es aceptablemente "comercialmente amigable"? – trashgod

+2

Java Topology Suite (JTS) de Vivid Solutions con licencia LGPL contiene una implementación de R-Tree. He utilizado con éxito JTS en mis aplicaciones pero no en la implementación de JTS R-Tree. Ver http://www.vividsolutions.com/jts/javadoc/com/vividsolutions/jts/index/strtree/STRtree.html –

+2

No directamente una implementación de R-tree, pero las versiones recientes de Apache Lucene tienen soporte para búsquedas geoespaciales eficientes. Ver por ejemplo http://www.ibm.com/developerworks/opensource/library/j-spatial/ para más detalles. –

Respuesta

2

Antes que nada permítanme señalarles que si busca la ciudad más cercana a partir de las coordenadas dadas, ¡podría no estar en el mismo huso horario! Lo que realmente necesita, en mi opinión, es una información sobre su afiliación administrativa: el mínimo sería un país, pero en algunos casos debería ser incluso más que eso, es decir, estado. Esa información puede recuperarse con la API de Google Maps y luego correlacionarse con información de TZ más detallada.

hay una alternativa gratuita a GeoNames - EarthTools. Existen algunas limitaciones para el servicio en sí (número de solicitudes, etc.), pero aún así es bueno, probado y funciona bien para mí.

En segundo lugar, existe una alternativa gratuita a GeoNames - EarthTools. Existen algunas limitaciones para el servicio en sí (número de solicitudes, etc.), pero aún así es bueno, probado y funciona bien para mí.

En tercer lugar, si le interesa importar los datos en DB, la mayoría de las implementaciones de DB actuales proporcionan índices geoespaciales que puede usar. Si necesita esa información incluida en Su aplicación, puede usar H2Database (embebido Java DB) con H2Spatial además, aunque lo he intentado y no puedo recomendarlo del todo. Neo4j tiene una gran implementación del índice espacial

Además, puede usar Solr para GeoSpatial searches. Es agradable, es rápido y fácil de implementar. En realidad estoy en el medio del proceso de migración de mis búsquedas de base de datos a Solr ...

Por último, pero no menos importante, a continuación encontrará algunos de los que he probado hace un tiempo:

  • JSI - LGPL
  • GeoTools - LGPL, una exageración, le dará mucho más de lo que necesita ... pero es genial!

Posiblemente poco más allá, pero los que he probado hasta ahora ...

+0

Gracias por la respuesta. Encontré EarthTools cuando estaba investigando, pero lo que me disuadió fue que "el uso de estos servicios es * actualmente * de forma gratuita". Esto fue un obstáculo para mí, ya que necesitaba saber que la solución permanecerá libre indefinidamente. –

+0

Me gustaría ir con Solr o GeoTools entonces - ambos son geniales. –

13
0

RTree sencilla clase Java creado por mí: https://github.com/hadmir/rtree/blob/master/RTree.java

Todos los objetos se almacenan dentro de dos matrices int [], por lo que es muy fácil de persistir (presentar). Además, el hecho de que agregar nuevas rectas no crea ningún objeto significa que puede insertar millones de rectángulos en RTree y JVM no se quemará en llamas. Esto es útil para proyectos geográficos, donde el recuento de objetos suele ser enorme.

Solo se almacenan los rectángulos 2D (por lo que para objetos complejos debe encontrar un rectángulo delimitador). Query devuelve todas las rects (IDs de rects) que se cruzan o superponen con "query rectangle".