Pregunta:
Tengo un mapa, el centro de ese mapa (punto central) es = -37,175 (gps)
Sé el zoom del mapa = 13
Sé el tamaño = 320x320px
Sé que hay 111111 m en un grado de latitud y un grado variable de longitud
Quiero poder calcular el valor para sumar y restar de la coordenada central que me dará una coordenada gps superior izquierda / inferior derecha.
Para un zoom de 13, solía lograr esto mediante Nota: centrelat = -37
por ejemplo: -37 – (-37/1650) = -36,9776 grados. En otras palabras, para encontrar la esquina sureste, restamos .0228 grados de la coordenada central. Hice lo mismo para la longitud pero usé el valor 6250
por ejemplo: 175 – (175/6250) (.02804 grados). = 174.792, es decir, la esquina noroeste
la relación entre .0228 grados (lat) y .0280 grados (largo) es correcta
Entonces, quiero que este cálculo sea dinámico y funcione para todos los zooms
entonces estoy usando (cos Latitude x 111111) / 2 ^ Zoom (13) = 10.72095
para la longitud estoy usando 111111/2 ^ 13 = 13.56
¡Esta es la misma proporción también, así que estoy en el camino correcto!
pero ¿cómo uso estos valores en un cálculo para sumar o restar grados de las coordenadas centrales de latitud y longitud para obtener las coordenadas de las esquinas del cuadro delimitador?
cualquier ayuda es apreciada, y lo digo en serio.
Respuesta:
Suponiendo que está utilizando la proyección de Web Mercator (Google Maps, MapBox, etc.), la clave está en estas dos ecuaciones:
donde λ es la longitud en radianes y φ es la latitud geodésica en radianes . Los valores xey son las llamadas ' coordenadas de píxeles ' tal como las definió originalmente Google.
Lo que realmente necesita es la inversa de estas dos ecuaciones, de modo que pueda convertir la latitud y la longitud en valores xey. Las ecuaciones inversas son:
donde
Dadas las coordenadas centrales de su imagen definidas por λ y φ, conviértalas en las coordenadas de píxeles xey para el nivel de zoom elegido utilizando las dos primeras ecuaciones anteriores.
Si h es la altura de su imagen y w es su ancho, entonces puede calcular las coordenadas de (l) eft, (r) ight, (t) op y (b) ottom píxeles de su imagen:
l = x – (w / 2)
r = x + (w / 2)
t = y – (h / 2) (ya que cero está en la parte superior de los píxeles de Web Mercator)
b = y + (h / 2)
Luego, de vuelta convertir en latitud y longitud usando las ecuaciones originales, sustituyendo l o r para x, y t o b para y.
EDITAR: Al probar esto con la API estática de MapBox que no es Retina, descubrí que tenía que usar un factor de 4 en lugar de 2 en las últimas cuatro ecuaciones. No estoy seguro de por qué es así, pero probablemente tenga algo que ver con el escalado interno en los servidores MapBox.