Conversión de longitud y latitud a XY en un mapa con puntos de calibración

Si tengo un mapa jpeg con tamaño sizeX, sizeY

y algunos puntos de calibración en el mapa (X, Y, Lon, Lat)

¿Cuál sería el algoritmo para calcular el punto XY correspondiente en el mapa con un par dado de Longitud / Latitud?

Esto es lo que funcionó para mí, sin tanto bs.

int x = (int) ((MAP_WIDTH/360.0) * (180 + lon)); int y = (int) ((MAP_HEIGHT/180.0) * (90 - lat)); 

Las coordenadas lat, lon me las dieron los dispositivos Android. Por lo tanto, deberían estar en el mismo estándar utilizado por todos los productos de Google Earth / Map.

Si utiliza el mapa del tipo de proyección cilíndrica equidistante , esto es lo que debe hacer:

  1. Encuentre la latitud y la longitud de su tutorial de ubicación aquí:
    http://lifehacker.com/267361/how-to-find-latitude-and-longitude
  2. Ingrese esa información en las siguientes fórmulas:
    x = (ancho total de la imagen en px) * (180 + latitud) / 360
    y = (altura total de la imagen en px) * (90 – longitud) / 180

    nota: al usar la longitud de latitud negativa, asegúrese de sumr o restar el número negativo, es decir, + (- 92) o – (- 35) que en realidad sería -92 y +35.

  3. Ahora tiene su X e Y para trazar en su imagen

    Se puede encontrar más información sobre esta fórmula y el tipo de mapa aquí:
    http://www.progonos.com/furuti/MapProj/Dither/CartHow/HowER_W12/howER_W12.html#DeductionEquirectangular

Hay una gran cantidad de información en Internet sobre el cálculo de la distancia entre dos emparejamientos de latitud y longitud. Estamos usando esos cálculos en nuestro sitio web público y no son triviales para comprender / discutir (por lo que no intentaré cubrirlos aquí). Dicho esto, son fáciles de implementar.

Una vez que tienes una función que devuelve distancia, deberías poder calcular el ancho y la altura del mapa en términos de distancia entre las esquinas.

Luego puede calcular la distancia horizontal y vertical de su punto desde la esquina superior izquierda.

Ahora descubres qué proporción del ancho del mapa está representada por la distancia entre el lado izquierdo y tu punto, aplica esa relación al ancho del píxel y tienes el número de píxeles entre el lado izquierdo y tu punto. Repita para el eje y.

(Píxeles desde el lado izquierdo) = (ancho total en píxeles) * ((distancia del geocodálogo entre la izquierda y su punto) / (distancia del código geográfico entre el lado izquierdo y el lado derecho))

(Píxeles desde la parte superior) = (altura total en píxeles) * ((distancia de geoencoding entre la parte superior y su punto) / (distancia de geoencoding entre la parte superior e inferior)

EDITAR: A medida que investigue esto más a fondo, notará que algunas soluciones presentarán resultados más precisos que otras debido al hecho de que está aproximando la distancia entre dos puntos en una superficie esférica y trazándola en una superficie plana. La precisión disminuye a medida que aumenta la distancia. El mejor consejo para usted es probarlo primero y ver si satisface sus necesidades.

Esto es bastante directo y simple … déjame explicarte cómo es posible.

Latitude y Longitude son líneas imaginarias dibujadas en la tierra para que puedas ubicar con precisión cualquier ubicación en el mundo. en pocas palabras, son los coords X e Y de un avión. Latitude es una línea vertical que se extiende de norte a sur con sus 90 grados en el polo norte y -90 grados en el polo sur.

La longitud, por otro lado, es una línea horizontal que corre de este a sur con -180 grados en el oeste y 180 grados en el este.

puede convertir latLng en coords de pixeles suponiendo que el ancho del contenedor html es el ancho del mundo y lo mismo se aplica a la altura.

Fórmula – Longitud – píxel

 (givenLng*widthOfContainerElement)/360 

donde 360 ​​es la longitud total en grados

Formula -Latitude – pixel

 (givenLat*heightOfContainerElement)/180 

donde 180 es la latitud total en grado

 //Height is calculated from the bottom 

puedes encontrar una implementación funcional de esta fórmula aquí, en mi sitio web (solo usa JavaScript)

http://www.learntby.me/javascript/latLngconversion.php

avísame si aún necesitas alguna aclaración.

Hay muchos esquemas diferentes de proyección de mapas. Debería saber cuál (es) usa (n) su (s) mapa (s).

Para obtener más información sobre los algoritmos de proyección de mapas y el mapeo directo / inverso, consulte este enlace . Proporciona las fórmulas para varias proyecciones comunes.

Solo haz esto (para el mapa de proyección de Mercator):

 extension UIView { func addLocation(coordinate: CLLocationCoordinate2D) { // max MKMapPoint values let maxY = Double(267995781) let maxX = Double(268435456) let mapPoint = MKMapPointForCoordinate(coordinate) let normalizatePointX = CGFloat(mapPoint.x / maxX) let normalizatePointY = CGFloat(mapPoint.y / maxY) let pointView = UIView(frame: CGRectMake(0, 0, 5, 5)) pointView.center = CGPointMake(normalizatePointX * frame.width, normalizatePointY * frame.height) pointView.backgroundColor = UIColor.blueColor() addSubview(pointView) } } 

Mi proyecto simple para agregar coordenadas en UIView: https://github.com/Glechik/MapCoordinateDrawer