2015-01-25 1 views
2

리오 렛지도에 geojson 레이어를로드 중입니다. geojson에 저장된 속성에 따라 svg 요소의 ID를 설정하려고합니다.리플릿의로드시 geojson 기능에 ID 추가

필자는 onEachFeature 함수를 사용한다고 가정하지만 구문 분석 할 때 해당 기능의 ID를 설정하는 방법을 볼 수 없습니다.

요소의 ID를 어떻게 할당합니까?

답변

2

onEachFeature 방법을 사용하는 것이 가능하지 만 L.GeoJSON입니다. 다음 이유로 인해이 : 당신이 L.GeoJSON에서 eachLayer 방법을 사용하는 경우

var geoJsonLayer = L.geoJson(null, { 
    onEachFeature: function (feature, layer) { 
     // At this point 'layer._path' exists in the layer object 
     // but it will return as 'undefined' so this is of no use 
     // So the following doesn't work: 
     layer._path.id = 'feature-' + feature.properties.id 
    } 
}); 

그러나, layer._path 그러나 그것은 단지 GeoJSON 층이지도에 추가 한 후이 작업을 수행 할 것입니다, 실제 SVG 경로 요소를 반환합니다. 지도에 레이어를 추가하기 전에 이렇게하면 layer._path은 여전히 ​​undefined으로 반환됩니다. 그래서이 시도 : http://plnkr.co/edit/7IPHrO?p=preview

+0

환상적인 :

var geoJsonLayer = L.geoJson(data).addTo(map); geoJsonLayer.eachLayer(function (layer) { layer._path.id = 'feature-' + layer.feature.properties.id; }); 

여기 Plunker에 동작하는 예제입니다! 매력처럼 작동합니다. 다른 사람들을위한 간단한 노트, 내 구현에 나는 경로를 가지고 통과하지 않고 통과되는 몇 가지 추가 기능을 얻고 있던대로 변수를 할당하기 전에 정의되었는지 확인했다. 감사! – user611478

+2

그래서 추가 기능은 다중 다각형이라는 것을 알았고 위의 해결 방법으로 건너 뜁니다. 대신 다중 다각형 피처의 각 레이어를 반복해야합니다. 따라서 클래스의 사용은 원래의 질문에서 제기 된 ID보다 더 적절합니다. 'if (typeof layer._path! = 'undefined') { layer._path.id = layer.feature.properties.id; } else { layer.eachLayer (function (layer2) { layer2._path.id = layer.feature.properties.id; }); }' – user611478