4 votos

ArcGIS Javascript API - Devuelve las extensiones de los mapas 'normales' cuando se recorre el mundo.

Los mapas de la API de Javascript de ArcGIS permiten al usuario desplazarse por todo el mundo, lo cual es una gran característica, sin embargo estoy realizando algunos procesos que dependen de los alcances del mapa. He descubierto que a pesar de la proyección definida (wkid), los alcances se devuelven en coordenadas de metros con un origen de lat/lon 0,0 (frente a la costa de África). Para obtener mis extensiones en la proyección que necesito, utilizo un servicio de Geometría para proyectarlos, sin embargo cuando el usuario navega alrededor del mundo, las coordenadas no se reinician, simplemente siguen sumando, resultando en extensiones 'NaN' devueltas.

Vi este post, que sería una forma de tratar este tema, sin embargo, me gustaría mantener la capacidad de paneo en todo el mundo. ¿Alguien tiene alguna idea de cómo lograr esto?

3voto

Kieran Benton Puntos 2783

"He descubierto que a pesar de la proyección definida (wkid), las extensiones se devuelven en coordenadas de metros con un origen de lat/lon 0,0 (frente a la costa de África)".

Con la API de Javascript de ArcGIS, el primer servicio de mapas añadido establece un sistema de coordenadas para todo el mapa. Si has añadido uno de los servicios de mapas de ESRI para un mapa base, es probable que sea uno que se haya creado usando el wkid 102100, que se ajusta a lo que has descrito. Cuando pones tu servicio de mapas encima de él, tus servicios se reproyectan para que encajen encima de este servicio. Para arreglar esto, necesitas crear tu propio mapa base del servicio de mapas en mosaico proyectado en el wkid que quieres, o usar el servicio de geometría para reproyectar puntos, como has hecho.

"Utilizo un servicio de Geometría para proyectarlos, sin embargo cuando el usuario navega alrededor del mundo, las coordenadas no se reinician, sólo siguen sumando, resultando en extensiones 'NaN' devueltas".

Aquí hay una función que podrías usar para fijar la extensión de algo que puedes usar para tu servicio de geometría:

function fixExtent(extent) {
    // hard-coded full extent of the world, using wkid 102100. 
    var full = new esri.geometry.Extent(-20037508.3427892430765884088807,-19971868.8804086,20037508.3427892430765884088807,19971868.8804086, new esri.SpatialReference({ wkid:102100 }));
    // calculate the extent size so that it fits within the normal extent
    var xwidth = full.xmax - full.xmin;

    var newXMin = extent.xmin;
    while (newXMin < full.xmin) {
        newXMin += xwidth;
    }
    while (newXMin > full.xmax) {
        newXMin -= xwidth;
    }

    var newXMax = extent.xmin;
    while (newXMax < full.xmin) {
        newXMax += xwidth;
    }
    while (newXMax > full.xmax) {
        newXMax -= xwidth;
    }

    // return a new geometry that is within the range of the full extent
    return new esri.geometry.Extent(newXMin, extent.ymin, newXMax, extent.ymax, extent.spatialReference);
}

No sé cómo funcionará esto si comparas una extensión que cruza la línea de fecha. Espero que esto ayude.

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