10 votos

Cálculo óptimo de Geohash de precisión de cuadro delimitador

Estoy usando Elasticsearch del GeoHash de la cuadrícula de la Agregación a la trama de los clústeres en un mapa (usando Folleto). Entiendo que para las grandes áreas de menor precision valor debe utilizarse para limitar el número de depósitos que ha creado/devuelve.

¿Cómo debo determinar el valor de precisión para solicitar?

Hay un estándar o recomendado fórmula para calcular el óptimo de precisión basado en un cuadro de delimitación y/o nivel de zoom? Es mejor mapa de niveles de zoom para los valores de precisión (sé que probablemente más fácil.)

12voto

Mat Puntos 196

La página que enlaza a los consejos en la respuesta; encontrar el área de su cuadro delimitador y dividir por el cubo de la zona. Se deja fuera cómo calcular el tamaño de cada geohash cubo, a pesar de que, aunque se da un ejemplo con precisión 5.

De acuerdo a la página que enlaza a, se va a dejar la consulta en 10000 cubos.

Calcular el área de su cuadro delimitador en grados cuadrados (no intente hacer esto en km, mantenerlo en lat/long)

La siguiente captura de pantalla muestra los límites de la precisión 2 (el color es categorizada por la precisión 1).

enter image description here

Estos no son realmente los azulejos, aunque geohash representa un punto con errores en lat/lon - y esos errores a veces varían entre la longitud y la latitud (el error es mayor con latitudes, cuando la precisión es aún)

Utiliza un poco de Python (utilizando el Geohash biblioteca) para estimar el tamaño de cada baldosa para diferentes precisiones.

from Geohash import geohash

strg = geohash.encode(56.9,-3.2,precision=15)

for prec in range(1,10):
    y,x,yerror,xerror = geohash.decode_exactly(strg[:prec])
    xsize = 2*xerror
    ysize = 2*yerror
    area = xsize*ysize
    print("Precision {}".format(prec))
    print("\tSize approx {} long by {} lat".format(xsize,ysize))
    print("\tArea is {}".format(area))

esto da el siguiente resultado

Precision 1
    Size approx 45.0 long by 45.0 lat
    Area is 2025.0
Precision 2
    Size approx 11.25 long by 5.625 lat
    Area is 63.28125
Precision 3
    Size approx 1.40625 long by 1.40625 lat
    Area is 1.9775390625
Precision 4
    Size approx 0.3515625 long by 0.17578125 lat
    Area is 0.061798095703125
Precision 5
    Size approx 0.0439453125 long by 0.0439453125 lat
    Area is 0.0019311904907226562
Precision 6
    Size approx 0.010986328125 long by 0.0054931640625 lat
    Area is 6.034970283508301e-05
Precision 7
    Size approx 0.001373291015625 long by 0.001373291015625 lat
    Area is 1.885928213596344e-06
Precision 8
    Size approx 0.00034332275390625 long by 0.000171661376953125 lat
    Area is 5.893525667488575e-08

Así que un enfoque podría ser,

  • calcular el "área" (en grados cuadrados) de su (lat/lon basado cuadro delimitador
  • ir abajo de la tabla, a partir de precisión 1, y dividir el bbox área (en grados cuadrados) por la zona para que la precisión
  • elija el valor de precisión con el mínimo admisible de la división de valor

Para aclarar 'aceptable':-

  • un muy bajo valor de división como 0.001 probablemente significa que la precisión es muy baja. Usted no va a ser la recuperación de muchos de los cubos, pero se le considera una gran cantidad de puntos alejados usted no necesita.

  • Para un valor de más de 10000, la precisión es muy alta. Usted será descartando posibles golpes, y sufren un rendimiento más lento.

Tendrás que experimentar para encontrar un valor que da el mejor rendimiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X