10 votos

¿Cómo etiquetar los polígonos GeoJSON?

Estoy usando Leaflet combinado con las características de GeoJSON. ¿Hay alguna manera de etiquetar las características GeoJSON (en este caso - polígonos)? Debería obtener las etiquetas de

feature.properties.name 

Este es mi código donde creo que podría insertar la etiqueta:

function style(feature) {
            return {
                weight: 2,
                opacity: 1,
                color: 'white',
                dashArray: '3',
                fillOpacity: 0.7,
                fillColor: getColor(feature.properties.coloring)
            };
        }

1 votos

¿Te importaría publicar la solución que utilizaste para etiquetar el polígono, si todavía la tienes a mano?

6voto

Adam Puntos 11

Así es como lo resolví con Leaflet Polígonos y Etiquetas, de manera que se obtiene una etiqueta flotante sobre el polígono con su propiedad nombre.

Supongamos:

  • se obtiene la respuesta json analizada en la variable json
  • sólo hay polígonos simples sin agujeros en json
  • polygon_style contiene las opciones de estilo devueltas por su función de estilo
  • labels_layer es un folleto Layergroup (o directamente su mapa)

Entonces:

for ( var i=0; i < json.features.length; i++ ) {
    feat = json.features[i];
    coords = [];
    for ( var j = 0 ; j < feat.geometry.coordinates[0].length - 1; j++ ) {
        coord = feat.geometry.coordinates[0][j];
        point = [];
        point.push( coord[1], coord[0]);
        coords.push( point );
    }
    labels_layer.addLayer(L.polygon( coords, polygon_style ).bindLabel(feat.properties.name))  ;
}

Curiosamente, las coordenadas GeoJson (en realidad EPSG:4326) y Leaflet se intercambian en orden.

1 votos

Para aquellos que utilizan Leaflet 1.0+, L.Label ha sido trasladado al núcleo de Leaflet como L.Tooltip y el plugin ha quedado obsoleto. Deberías usar bindTooltip() en lugar de bindLabel(). github.com/Leaflet/Leaflet.label

5voto

Frederik Slijkerman Puntos 4604

Es necesario conocer el formato que el folleto espera utilizar. Ejemplo: OpenLayers espera este formato GeoJSON para crear un punto y dar algunos atributos personalizados:

{"type":"FeatureCollection",
    "features":[
        {"type":"Feature",
            "properties":{
                "name":"TRON-02",
                "serial":"TRON002",
                "bearing":0,
                "color":"green",
                "size":15,
                "image":"img/unit_map3.png",
            },
            "geometry":{
                "type":"Point",
                "coordinates":[-50.06542968749966,-23.749149728383717]
            }
        }
    ]
}

Como puedes ver, he creado una Geometría (Punto) y he unido mis atributos a ella. Cuando envío esto a OpenLayers, el resultado se ajustará al ejemplo de @Aragon, utilizando "color" y "nombre" (como etiqueta) para personalizar el punto en el mapa.

Copie y pegue este ejemplo de GeoJSON en http://json.parser.online.fr/ o utilice el sitio para intentar validar el suyo propio.

0 votos

¿No era la pregunta sobre los polígonos? ¿Cómo una respuesta sobre la geometría de puntos resolvió la pregunta?

0 votos

¿Y qué es un polígono? Se llamará igual. Lo único que cambiará es la parte de "geometría". No solo resolvió la pregunta sino que recibió 5 ups hasta ahora.

0 votos

Permítanme entonces reformularlo: Tengo la misma pregunta y colocar una etiqueta en un polígono es muy diferente a colocarla en un punto, por lo que polígono significa para mí un objeto cerrado bidimensional con varias aristas, en este contexto. Por eso tengo interés en conocer algunos detalles, de ahí mi primer comentario. Un "lo resolvió" no es tan útil entonces, pero gracias de todos modos :-)

1voto

texai Puntos 178

Creo que esta pregunta se refiere a openlayers.si es así, se puede utilizar para el etiquetado;

var style = new OpenLayers.Style({
    weight: 2,
    opacity: 1,
    color: 'white',
    dashArray: '3',
    fillOpacity: 0.7,
    fillColor: "${getColor}",  
    label: "${getLabel}"
  } , {
    context: {
      getColor: function(feature) {
        return feature.properties.color;
      },
      getLabel: function(feature) {
        return feature.properties.name;
      }
    }
  );

Espero que te ayude...

1 votos

No es OpenLayers. Estoy usando Leaflet combinado con las características de GeoJSON. Así que esto no funciona. Pero gracias por intentarlo.

0 votos

Por qué no fillColor: "${color}" en lugar de crear una función?

1 votos

@Magno C no hay ninguna diferencia entre su point.both de ellos son los mismos. he escrito esto por si desea agregar la función más complicada como el color al azar o cualquier otra cosa. todavía gracias por su punto.

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