1 votos

¿Cómo ajustar una vista de OpenLayers a una extensión que abarca la extensión del mapa (wrap) o IDL?

¿Cómo ajustar la vista a una extensión que abarque la extensión del mapa (wrap-point) o IDL?

Por favor, disculpe mi semántica si es incorrecta, soy nuevo en el SIG.

He creado un código que hace un zoom a la medida basado en estos ejemplos de OpenLayers:

http://openlayers.org/en/latest/examples/center.html

http://openlayers.org/en/latest/examples/draw-features.html

El código (ver abajo), funciona bien para extensiones que se mantienen dentro de las extensiones del mapa del mundo, por ejemplo, África.

No funciona como me gustaría para mi región del Pacífico, que abarca el IDL y el punto en el que el mapa se "envuelve" en OpenLayers.

El comportamiento real es que la línea entre los 2 puntos va "por el camino largo", mostrándome casi todo el mapa, en lugar del camino corto que sólo da el Pacífico. Ver capturas de pantalla después del ejemplo de código.

var Pacific = {
            bottomLeft: [112.67578, -49.42705],
            topRight: [-125.85937, 45.78093]
        };

var Africa = {
            bottomLeft: [21.62109, -33.92741],
            topRight: [60.11719, 37.80327]
        };

var region = Pacific; //Africa;

myLib.zoomToExtent(region.bottomLeft, region.topRight, function (){;});

zoomToExtent: function (bottomLeftLonLat, topRightLonLat, onZoomCompleteCallback) {
        var map = _getMap(_domTarget);
        var view = map.getView();

        var size = /** @type {ol.Size} */ (map.getSize());

        var ptA = ol.proj.fromLonLat(bottomLeftLonLat, _defaultProjection);
        var ptB = ol.proj.fromLonLat(topRightLonLat, _defaultProjection);

        geometry = new ol.geom.Polygon(null);

        var start = ptA;
        var end = ptB;

        geometry.setCoordinates([
          [start, [start[0], end[1]], end, [end[0], start[1]], start]
        ]);

        view.fit(geometry, size, { padding: [1, 1, 1, 1], constrainResolution: false });

        _numTilesLoaded = 0;
        _setBaseLayerLoadedCallback(map, onZoomCompleteCallback);
}

Efecto real del código anterior (no es exacto, por ejemplo):

Actual effect

Efecto deseado (no exacto, por ejemplo):

Desired effect

1voto

Christopher Edwards Puntos 331

No sé si es la forma correcta, pero OL puede simular latitudes superiores a 180 e inferiores a -180. Por ejemplo, puedes modificar la longitud derecha de tu región del Pacífico a 360-125.85937.

Al menos esto funciona con extensiones. Aquí hay ejemplos:

Adaptación a Occidente

Adaptación al Este

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