Processing math: 100%

4 votos

Openlayers/Proj4js no la transformación de coordenadas de la primera vez

Algo parece estar mal con mi transformaciones. Antes de añadir proj4js, la transformación de coordenadas salió bien:

new OpenLayers.LonLat(-1.0, 52.0).transform(new OpenLayers.Projection('EPSG:4326'), new OpenLayers.Projection('EPSG:900913'))

resultados en la adecuada google-coordenadas:

lon: -111319.49077778
lat: 6800125.4534507

Este configurado correctamente en el centro de mi mapa en algún lugar de Europa.

Después de la adición de proj4js a mi proyecto, de repente, el centro del mapa desplazado a África (cerca de 0,0). Después de establecer un breakpoint, pude ver lo que pasó. La resultante de las coordenadas de la declaración en el inicio de esta pregunta yieled este resultado:

lon: -1
lat: 52

Así que no hay transformación alguna ha tenido lugar! Sin embargo, si me gustaría ejecutar la misma instrucción de nuevo, todavía en el mismo punto de ruptura, que podría comenzar a dar el resultado correcto de nuevo:

lon: -111319.49079327356
lat: 6800125.454397307

¿Qué está pasando aquí? Qué necesito para iniciar algo antes de que yo pueda utilizar proj4js correctamente?

Estos son mis secuencia de comandos incluye:

<script type="text/javascript" src="/OpenLayers-2.10/OpenLayers.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/proj4js.js"></script>

4voto

saxman Puntos 136

Después de más investigación, he conseguido solucionar el problema. Qué está causando el problema es que Proj4js dinámica de la carga de cualquiera de las piezas que necesita en lugar de inmediatamente la carga de todas las secuencias de comandos.

Internet Explorer tiene más problemas con esto, pero también para Firefox y Chrome mostrar los síntomas. Es decir las arregló para no ser capaz de utilizar cualquier transformaciones, incluso después de una posterior llamada ajax para obtener datos ya había terminado. Tanto Firefox y el Chrome no tiene las transformaciones disponibles a tiempo para el centro del mapa se establezca correctamente, pero tenía muy poco después, lo que resulta en mi ajax-carga de datos para ser transformado correctamente para su visualización en el mapa.

Desde Visual Studio pude ver que después de cada llamada a crear una nueva proyección, los scripts se cargan dinámicamente. En primer lugar, sería de carga de la proyección definición:

/Scripts/proj4js/defs/EPSG27700.js

A partir de la definición sería, a continuación, cargar el tipo de proyección que se utiliza (en este caso transversal de mercator):

/Scripts/proj4js/projCode/tmerc.js

El único problema era que apparantly, el navegador no fue capaz de procesar estos archivos en tiempo antes de necesitar el uso de ellos, lo que no hay transformación de la realidad teniendo lugar. La solución a esto fue necesario agregar cualquier definiciones a mi script-incluye de forma manual:

<script type="text/javascript" src="/OpenLayers-2.10/OpenLayers.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/proj4js.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/projCode/merc.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/projCode/tmerc.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/defs/EPSG27700.js"></script>
<script type="text/javascript" src="/Scripts/proj4js/defs/EPSG900913.js"></script>

Y ahora todas las transformaciones que necesitaba existieron tan pronto como la página había cargado, por lo que se llevaría a cabo todas las transformaciones correctamente.

Con el fin de saber qué archivos adicionales para incluir, vea que (EPSG) definiciones que usted necesita. Incluyen a esas definiciones. Buscar dentro de los archivos y ver que las proyecciones que utilizan Por ejemplo, EPSG 27700 se define como sigue:

Proj4js.defs["EPSG:27700"] = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs";

Así que podemos ver que se utiliza tmerc (transverse mercator), por lo que incluyen la proyección. Hacer esto para cualquier definición que usted necesita.

Tenga en cuenta que WGS84 (EPSG:4326) se incluye por defecto. Incluso no tener una definición de archivo javascript.

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