[英]How to show and center a single country polygon in leaflet?
使用Leaflet加載頁面時,我試圖自動縮放到特定的國家/地區名稱。 當我發布頁面時,我可以得到一個像這樣的變量:
var $myCountry = "France";
現在我像這樣加載我的json:
$json = file_get_contents("/world.json");
$data = json_decode($json, true);
這是我的geoJson結構:
{
"type":"Feature",
"id":"AFG",
"properties":{"name":"France"},
"geometry":{
"type":"Polygon",
"coordinates":[
[
[61.210817,35.650072],
[62.230651,35.270664]
]
}
},
基本上,我想檢查我的變量名是否等於geoJson中的名稱,如果是,我想獲取它的坐標,沿着這些線。
var $myCoordinates = $myCountry.coordinates
我想這樣做是為了根據變量中找到的國家/地區名稱放大地圖,我也檢查了另一個SO問題,但我沒有得到。
更新
這幾乎可行,變量和專有名稱之間的比較不可行,但是變量字符串是正確的,而且我們確實擁有相同名稱的json字符串
var $country = "<?php echo $region; ?>";
$.ajax({
type: 'GET',
url: '/world.json',
data: { get_param: 'value' },
dataType: 'json',
success: function (data) {
$.each(data, function(index, element) {
if (element.properties.name == $country) {
alert("ciao");
}
});
}
});
我認為您最初顯示代碼和數據結構的方式以及您的帖子標題誤導了我們。
實際上,您並不是要掃描數組或簡單的JSON對象,而是要掃描具有FeatureCollection和許多功能的GeoJSON對象。
因此,您必須遍歷FeatureCollection的Feature,並掃描每個Feature的properties.name
。
但是即使如此,您仍然無法實現縮放到相應的Leaflet層的目標:GeoJSON對象未鏈接到Leaflet層,而相反。
因此,您應該改為從您的GeoJSON數據中構建Leaflet GeoJSON組 ,然后掃描該組(例如,使用eachLayer()
)以查找表示具有properties.name === "France"
的要素的圖層。
符合:
$.getJSON('/world.json', function (geoJSONdata) {
var geoJSONgroup = L.geoJSON(geoJSONdata).addTo(map);
geoJSONgroup.eachLayer(function (layer) {
if (layer.feature.properties.name === "France") {
// Zoom to that layer.
map.fitBounds(layer.getBounds());
}
});
});
演示: https : //plnkr.co/edit/SVJfLf8gR0VysrFVkwsS?p = preview
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.