ejemplos - Cómo convertir las coordenadas de la capa vectorial en el mapa de latitud y longitud en Openlayers
ejemplos openlayers (2)
Por lo que recuerdo, box handler es implementy diferente a otros handlers en OL. Tuvimos que implementar un controlador propio que devuelve una geometría con coordenadas lon / lat en lugar de coordenadas con píxeles:
Legato.Handler.Box = OpenLayers.Class(OpenLayers.Handler.Box, {
endBox : function(end) {
var result;
if (Math.abs(this.dragHandler.start.x - end.x) > 5
|| Math.abs(this.dragHandler.start.y - end.y) > 5) {
var start = this.dragHandler.start;
var top = Math.min(start.y, end.y);
var bottom = Math.max(start.y, end.y);
var left = Math.min(start.x, end.x);
var right = Math.max(start.x, end.x);
var lowerLeftLonLat = this.map.getLonLatFromPixel(new OpenLayers.Pixel(
left, bottom));
var upperRightLonLat = this.map.getLonLatFromPixel(new OpenLayers.Pixel(
right, top));
var bounds = new OpenLayers.Bounds(lowerLeftLonLat.lon,
lowerLeftLonLat.lat, upperRightLonLat.lon, upperRightLonLat.lat);
result = bounds.toGeometry();
} else {
var xy = this.dragHandler.start.clone();
var lonLat = this.map.getLonLatFromPixel(xy);
result = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);
}
this.removeBox();
this.callback("done", [ result ]);
},
CLASS_NAME :"Legato.Handler.Box"
});
Estoy bastante confundido. Tengo un punto:
x= -12669114.702301
y= 5561132.6760608
Que obtuve al dibujar un cuadrado en una capa vectorial con el controlador DrawFeature.
Los números parecen ... erm ... terriblemente grandes, pero parecen funcionar, porque si más adelante dibujo un cuadrado con todos los mismos puntos, estará en la misma posición, así que creo que tienen que estar en lo cierto.
El problema es cuando trato de convertir este punto a latitud y longitud.
Estoy usando:
map.getLonLatFromPixel(pointToPixel(points[0]));
Donde puntos [0] es un punto de geometría, y la función pointToPixel toma cualquier punto y lo convierte en un píxel (ya que el getLonLatFromPixel necesita un píxel). Lo hace simplemente tomando la x del punto y haciéndolo los píxeles x, y así sucesivamente.
La latitud y longitud que obtengo son del orden de:
lat: -54402718463.864
lng: -18771380.353223
Esto está claramente mal. Me quedo realmente confundido. Intento proyectar este objeto, usando:
.transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
Pero realmente no lo entiendo y estoy bastante seguro de que lo hice incorrectamente, de todos modos.
Mi código está aquí: http://pastie.org/909644
Estoy un poco perdido. Las coordenadas parecen consistentes, porque puedo reutilizarlas para obtener el mismo resultado ... pero parecen mucho más grandes que cualquiera de los ejemplos que veo en el sitio web de openLayers ...
Según su código, la proyección que está utilizando es EPSG: 900913, que es la que usa Google. Las unidades para esta proyección son metros, y los valores que obtiene para el punto son perfectamente correctos:
x= -12669114.702301 (longitude)
y= 5561132.6760608 (latitude)
Estos valores no son píxeles sino coordenadas en la proyección EPSG: 900913, y son correctos (siempre y cuando se suponga que estén en Idaho , si no hay algo que esté mal en otra parte)
Para comprobarlo, puede ir a http://proj4js.org/ y transformar sus coordenadas de EPSG: 900913 a WGS84 (lat / lon), que le dará:
x = -113.8085937334033 (longitude)
y = 44.615123313472 (latitude)
Estos son los valores que probablemente estén esperando. Si quieres obtenerlos a partir de las coordenadas del punto usa algo como:
point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326"));
Esto transformará las coordenadas de la proyección de Google a WGS84 (Latitud / Longitud).