5 votos

¿Las características de una capa vectorial deben tener un trazo escalable?

Estoy tratando de hacer algún tipo de editor de dibujo de líneas sobre el mapa OpenStreet usando OpenLayers. Soy capaz de dibujar puntos, conectarlos en líneas, y todo se ve bien, pero si deszoom, el ancho del trazo es el mismo que en el zoom anterior (en lugar de ser más pequeño). Y si desplazo el zoom hasta el 0, el ancho de la línea (trazo) sigue siendo el mismo.

Ahora, he hecho que esto funcione como quiero usando el contexto en el Estilo, pero no me gusta cómo funciona...

PREGUNTAS:

¿Existe algún tipo de ajuste para hacer que todas las líneas sean escalables cuando se cambia el zoom (adaptar el ancho del trazo en función del nivel de zoom actual)?

¿Puedo establecer la anchura del trazo en metros o en milímetros?

2voto

Allanrbo Puntos 128

Mi solución por el momento:

  1. Definir un objeto de contexto con un método para calcular el ancho de la línea (esto se puede hacer en la definición del estilo, yo lo escribí así para facilitar la lectura):

    var context = 
    {
        getWidth: function (feature) 
        {       
            //I am setting attribute widthInMeters to each feature, and I am using that
            //for a calculation of line width, where 1m = 100px
            var r = map.getResolution() * 10000000;
            var w = feature.attributes.widthInMeters * (100 / parseFloat(Math.round(r * 100) /100).toFixed(2));
            return w;
        }
    };
  2. Definir un estilo con contexto y añadirlo a la capa vectorial:

    var style = new OpenLayers.Style(
    {
        strokeWidth: "${getWidth}",  //Context method call to get the width  (context.getWidth)
        strokeLinecap: "square"  
    }, 
    { 
        context: context 
    })

Ahora, esto funciona. Si el ancho de una línea es de 1 metro, está calculando la longitud correcta en cada cambio de zoom, y se ve bien. Pero, esta configuración es realmente complicada en un código más grande (mi código es un código más grande) por lo que estoy tratando de encontrar una manera de hacer esto en la definición de estilo, y no para calcular manualmente...

Si alguien sugiere una solución mejor, será aceptada como respuesta.

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