8 votos

OpenLayers: Utilizar escalas en lugar de resoluciones

Aventurarse en el OpenLayers código fuente, parece que todo lo relacionado con los niveles de zoom se hace utilizando resoluciones. Es justo, ya que esto se relaciona directamente con el espacio de la pantalla.

Sin embargo, me gustaría utilizar escalas en su lugar, y definir más explícitamente las escalas permitidas.
- ¿Es esto posible?

Hasta ahora he creado un conjunto de escalas que transformo en resoluciones:

var scales = [500, 1000, 2000, 4000, 10000, 25000, 50000];
var resolutions = [];
for(var i = 0; i < scales.length; i++) {
    resolutions.push(OpenLayers.Util.getResolutionFromScale(scales[i], units));
}

map = new OpenLayers.Map('', {                        
    ...
    minScale: scales[scales.length - 1],
    maxScale: scales[0],        
    resolution: resolutions,
    numZoomLevels: scales.length,
    ...
});

Mi problema es que la primera y la última escala se respetan, pero entre ellas la resolución actual convertida en escala no está entre las que he especificado.
- ¿Qué me he perdido?

9voto

Tom Puntos 5872

Para utilizar las escalas en su mapa:

  • Establezca sólo la opción "escalas". No establezca maxResolution, minResolution, maxScale, minScale, numZoomLevels, o cualquier otra propiedad relacionada con la escala. Establezca una matriz de denominadores de escala (o escalas).
  • Configure una unidad: tenga en cuenta que para los metros debe ser "m", para los grados, "grados", etc.
  • Puede establecer un maxExtent. No establezca una extensión mínima.

Una vez hecho esto, las escalas deben ser utilizadas en su mapa. (Tenga en cuenta que estarán ordenadas desde la más alejada -el mayor denominador de escala- hasta la más acercada -el menor denominador de escala-).

En su caso, esto debería ser exactamente así:

map = new OpenLayers.Map('map', {                        
  scales: scales,
  units: 'm' // or whatever       
});

A continuación, añada su capa.

Tenga en cuenta que las opciones de resolución basadas en las capas "controlarán" el mapa; normalmente sólo debería especificar estas cosas en el mapa o en las capas, no en ambos.

Tenga en cuenta que la capa base controla las escalas generales del mapa; las superposiciones estarán totalmente controladas por las capas base.

Tenga en cuenta que OpenLayers utiliza un supuesto DPI de 72. Para controlar esta configuración de DPI, puede establecer OpenLayers.DOTS_PER_INCH antes de crear su mapa. Un valor típico (utilizado por la especificación SLD) será diferente, por lo que si esta suposición le importa, debe cambiar este parámetro de configuración para que coincida con su servidor.

3voto

Erik Öjebo Puntos 6937
 var options = { scales: [50000000, 30000000, 10000000, 5000000],
                resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125],
                minScale: 50000000,
                maxResolution: "auto",
                maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90),
                maxResolution: 0.17578125,
                maxScale: 10000000,
                minResolution: "auto",
                minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
                minResolution: 0.0439453125,
                numZoomLevels: 5,
                units: "degrees"
              };
map = new OpenLayers.Map( $('map') , options);

Las unidades deben ser ajustadas: unidades: "grados"

Cadena - Las unidades en las que se mostrará la capa.

Esto afecta al cálculo de la Escala-Resolución.

Fuente oficial: http://trac.openlayers.org/wiki/SettingZoomLevels

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