GeoJSON 다각형에 라벨을 붙이는 방법?


10

GeoJSON 기능과 함께 Leaflet을 사용하고 있습니다. GeoJSON 기능 (이 경우 다각형)에 레이블을 지정하는 방법이 있습니까? 라벨을 가져와야합니다.

feature.properties.name 

이것은 레이블을 삽입 할 수 있다고 생각되는 코드입니다.

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

1
그래도 사용 가능한 경우 다각형에 레이블을 지정하는 데 사용한 솔루션을 게시 하시겠습니까?
a1an

답변:


6

전단지에서 사용할 형식을 알아야합니다. RFM. 예 : OpenLayers는이 GeoJSON 형식이 점을 작성하고 일부 사용자 정의 속성을 제공 할 것으로 예상합니다.

{"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]
            }
        }
    ]
}

보시다시피, Geometry (Point)를 작성하고 내 속성을 결합했습니다. 이것을 OpenLayers에 보내면 결과는 @Aragon의 예에 맞으며, "color"와 "name"(라벨로)을 사용하여지도에서 점을 사용자 정의합니다.

http://json.parser.online.fr/ 에이 GeoJSON 예제를 복사하여 붙여 넣거나 사이트를 사용하여 자신의 고유 한 것을 확인하십시오.


다각형에 대한 질문이 아니 었습니까? 포인트 지오메트리에 대한 답변으로 문제가 어떻게 해결 되었습니까?
a1an

그리고 다각형은 무엇입니까? 이름은 동일합니다. 변경 될 유일한 것은 "형상"부분입니다. 이 문제를 해결했을뿐만 아니라 지금까지 5 업을 받았습니다.
Magno C

다음과 같이 바꾸어 보겠습니다. 같은 질문이 있고 다각형에 레이블을 배치하는 것이 점에 배치하는 것과는 상당히 다르므로 다각형은이 맥락에서 여러 가장자리가있는 2 차원 닫힌 객체를 의미합니다. 그렇기 때문에 세부 정보를 얻는 데 관심이 있으므로 첫 번째 의견입니다. "그것이 해결되었습니다"라는 대답은 그다지 도움이되지 않지만 어쨌든 감사합니다 :-)
a1an

1
"속성"항목을 추가하기 만하면됩니다. @Aragon answer 참조 보시 return feature.properties.color;다시피 properties, feature속성이며 속성 color중 하나입니다. 이 방법에 따라이 객체에 원하는 것을 넣을 수 있습니다.
Magno C

2
RFM완전히 불려졌다. 사용할 지오메트리를 아는 것이 여기에서 정확히 문제가되기 때문에 점과 다각형의 차이는 중요합니다.
Stephen Lead

5

다음은 Leaflet Polygons and Labels로 해결하여 이름 속성을 사용하여 다각형에 플로팅 레이블을 얻는 방법입니다.

다음을 가정하십시오.

  • json 응답을 변수 json으로 구문 분석합니다.
  • json에 구멍이없는 간단한 다각형 만 있습니다.
  • polygon_style에는 스타일 함수에서 반환 한 스타일 옵션이 있습니다.
  • labels_layer는 전단지 Layergroup (또는 직접지도)입니다

그때:

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))  ;
}

놀랍게도 GeoJson (실제로 EPSG : 4326)과 Leaflet 좌표는 순서대로 바뀝니다.


1
Leaflet 1.0 이상을 사용하는 사람들을 위해 L.Label은 L.Tooltip으로 Leaflet 코어로 옮겨졌으며 플러그인은 더 이상 사용되지 않습니다. bindLabel () 대신 bindTooltip ()을 사용합니다. github.com/Leaflet/Leaflet.label
aethergy

1

나는이 질문이 openlayers에 관한 것이라고 생각합니다. 그렇다면 라벨링에 사용할 수 있습니다.

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;
      }
    }
  );

나는 그것이 당신에게 도움이되기를 바랍니다 ...


1
OpenLayers가 아닙니다. GeoJSON 기능과 함께 Leaflet을 사용하고 있습니다. 그래서 이것은 작동하지 않습니다. 그러나 노력해 주셔서 감사합니다.
againstflow

fillColor: "${color}"함수를 작성하는 대신 왜하지 않습니까?
Magno C

1
@Magno C 당신의 포인트 간에는 차이가 없습니다. 임의의 색상이나 다른 것으로 더 복잡한 기능을 추가하려는 경우에 이것을 작성했습니다. 여전히 당신의 요점에 감사드립니다.
Aragon

아라곤을 이해했습니다. 새로운 방법에 감사드립니다. 나중에 유용 할 수 있습니다. 엄지 손가락!
Magno C

: 여기 GeoJSON 지배 사양이 있으므로 형식에서 내가 한 쇼를 실행 @againstflow 방법이 없다 생각 링크
마그노 C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.