javascript - osm - openlayers polyline example
Transformando coordenadas de GPS para OpenLayers (3)
Estoy construyendo un proyecto en JavaScript que usa OpenLayers con una capa de OpenStreetMap.
Tengo las coordenadas "48.3185005, 14.2853003" (coordinadas por Linz, Austria) que obtengo de navigator.geolocation.getCurrentPosition () o de la API de geocodificación de Google Maps. Ahora quiero mostrar este punto en el mapa.
¿Qué transformaciones son necesarias para que el mapa muestre la ubicación correcta y cómo realizo estas transformaciones con OpenLayers? Por el momento, siempre estoy llegando a algún punto al este de África.
¿Sería simplemente que estás mezclando los valores, el Punto (14.2853003, 48.3185005) está en Yemen, y el Punto (48.3185005, 14.2853003) está en Austria ... Así que verifica la documentación de si los valores de latitud y longitud se dan en diferente orden que tú pensar en
Esto se debe a que los datos de OpenStreetMap son un sistema de coordenadas proyectado, conocido como Web Mercator, es decir, está en metros, mientras que los datos de su GPS están en lat / lon. Esta es la razón por la que todos los puntos parecen estar en el mar frente a la costa oeste de África, como en un sistema de coordenadas que cubre todo el globo en metros, cualquier coordenadas en el rango 180,180 y -90,90 parecerá estar en esa pequeña área la costa de Ghana. Noté en su publicación original que dijo East of Africa, pero en un comentario, dijo Atlantic Ocean, de lo que asumo que usted se refería a West, lo cual es consistente con mi explicación. ¿Es esto correcto?
Puede tratar esto en su constructor de mapas especificando una proyección de mapa y una proyección de visualización diferentes: consulte http://docs.openlayers.org/library/spherical_mercator.html
Quieres algo como:
var map = new OpenLayers.Map("map", {
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326")
});
EPSG: 3857 (originalmente 900913) es la designación oficial de Mercator esférico y la conversión entre este y 4326 (lat / lon) está integrada en OpenLayers.
Esto debería establecer su mapa en la ubicación correcta.
map.setCenter (new OpenLayers.LonLat (14.2853003, 48.3185005) .transform (''EPSG: 4326'', map.getProjectionObject ()), 5);
Solo necesita conocer la referencia de coordenadas de entrada y usar la función getProjectObject para obtener la referencia de destino.