[英]Leaflet: async alternative to pointToLayer?
現在,我有類似的東西:
this.Layer = Leaflet.geoJSON(geoJson, {
pointToLayer: function (feature, latlng) {
return Leaflet.marker(latlng, {
icon: arrowIcon,
rotationAngle: (<MyFeatureType>feature.properties).DirectionTo,
title: (<MyFeatureType>feature.properties).Speed.toString()
});
}
}
這行得通。 對於 GeoJSON 中的每個Point
特征,我的 function 都會被調用,我可以創建一個自定義標記。
但是,我想更改它,例如pointToLayer
function 是異步的; 就像是:
this.Layer = Leaflet.geoJSON(geoJson, {
pointToLayer: async function (feature, latlng) {
var data = await retrieveSomeMetadataForFeature(feature);
return Leaflet.marker(latlng, {
icon: data.Icon,
rotationAngle: (<MyFeatureType>feature.properties).DirectionTo,
title: (<MyFeatureType>feature.properties).Speed.toString()
});
}
}
不幸的是, Leaflet 似乎不支持將 Promise 作為返回類型處理。
看來,我也不能簡單地返回null
並手動添加標記,例如:
this.Layer = Leaflet.geoJSON(geoJson, {
pointToLayer: async function (feature, latlng) {
var data = await retrieveSomeMetadataForFeature(feature);
var marker = Leaflet.marker(latlng, {
icon: data.Icon,
rotationAngle: (<MyFeatureType>feature.properties).DirectionTo,
title: (<MyFeatureType>feature.properties).Speed.toString()
});
}
// manually add marker to layer here
return null; // simply tell Leaflet that this has been handled
}
當標記出現時,Leaflet 永遠不會第二次調用pointToLayer
。
問題:
pointToLayer
並將結果異步返回給Leaflet? (大概,所有能完成的就是將標記添加到正確的圖層組?)pointToLayer
替代方法? 每個點特征返回一個空的LayerGroup
,然后用你需要的任何Marker
填充所述LayerGroup
,例如
L.geoJSON(geoJson, {
pointToLayer: function (feature, latlng) {
var emptyGroup = L.layerGroup();
retrieveSomeMetadataForFeature(feature).then(function(metadata){
L.marker(icon: metadata.icon).addTo(emptyGroup);
});
return emptyGroup;
}
});
這樣, pointToLayer
回調將始終返回L.Layer
的實例,正如L.GeoJSON
所期望的那樣。 L.GeoJSON
實例將包含多個L.LayerGroup
實例,每個實例包含一個L.Marker
實例,但開銷不應大到足以成為問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.