6

He visto muchas bibliotecas llamadas "geocodificación inversa" en varios idiomas; todos dependen de llamar a un proveedor externo a través de REST o algún método similar. Sin embargo, no puede llamar a un proveedor de REST si debe manejar miles de solicitudes por segundo.¿Existe alguna biblioteca Java que le permita realizar búsquedas rápidas y en memoria de códigos postales (bonificación, estado y ciudad) de latitud/longitud?

Por otro lado, el problema debería ser simple de resolver: las bases de datos basadas en CSV están disponibles de forma gratuita con esta información. El problema es el tiempo y el costo de escribir una implementación de búsqueda en la memoria eficiente y bien probada, en comparación con la descarga o compra de una existente.

No puedo encontrar ninguno después de mucho mirar, pero no puedo creer que no pueda existir. ¿Hay alguna biblioteca preescrita que haga esto?

Esta pregunta:

Fastest way to find the location(zip, city, state) given latitude/longitude

vino el más cercano, pero esencialmente indica cómo escribir la solución, no es que haya nada disponible fuera de la plataforma. Pero debe haber alguna biblioteca que todos utilicen para esto. Una docena de personas al día debe tener este problema.

+0

@birryree, los comentarios son para comentarios. Si desea marcar la pregunta, use la función de pregunta favorita (haga clic en la estrella). –

Respuesta

3

Las bases de datos espaciales (por ejemplo, Postgresql con PostGis) utilizan algoritmos que buscan rápidamente datos para la información de latitud/longitud dada. Como quiera usar una biblioteca Java y tenerla en la memoria, puede mirar el H2 Spatial database. Nunca lo he usado, así que no puedo comentar sobre su desempeño.

Editar: Hm, mirando más de cerca el enlace que he proporcionado muestra que esta es una función planificada ... Personalmente, simplemente usaría Postgresql/PostGis (con o sin Java como interfaz del servidor) y listo. . Si su servidor tiene suficiente memoria, todavía se ajustará al requisito "en memoria". Naturalmente, no se ajusta al requisito de la biblioteca de Java. Sin embargo, existe JSI, que podría utilizarse en la memoria y con Java.

+0

Configurar y mantener Postgres solo para resolver este problema sería imposible en mi situación. :( ¡JSI parece bastante prometedor! Lo que todos tienen son listas disponibles de ZIP/city/state/etc. Con sus coordenadas lat/long, en lugar de rectángulos, por lo que punto a punto en lugar de buscar punto a rectángulo no es realmente apropiado. Puede ser adaptable ... pero aún ... ¿tener que adaptar tal cosa, hacer miles de pequeños rectángulos? ¿Realmente no hay una solución preempaquetada disponible en el mercado? Estoy asombrado de que ninguno de los dos (ni aparentemente cualquier persona) puede encontrar uno. –

+1

Bueno, la biblioteca JSI funciona perfectamente bien con puntos, simplemente use un rectángulo de tamaño cero (es decir, establezca minY = maxY y minX = maxX). De hecho, fue pensado originalmente para agregar soporte "nativo" para los puntos, pero el rendimiento fue lo suficientemente bueno usando rectángulos que nunca fue necesario. – Aled

+0

gracias por señalarme a JSI. También puedes buscar quadtree o rtree y java. + He hecho algún trabajo, pero ahora sé que podría haberlo hecho mejor y aún no había tenido tiempo para implementar estos trucos: https://karussell.wordpress.com/2012/05/29/tricks-to-speed-up-neighbor-searches-of-quadtrees-geo-spatial -Java/ – Karussell

Cuestiones relacionadas