2017-03-16 71 views
-1

我有我的GeoJSON的格式是這樣的:如何自動縮放到小冊子中的多邊形?

statesData.features.push({ 
    "type":"Feature", 
    "id":"AFG", 
    "properties":{ 
     "name":"Afghanistan" 
    }, 
    "geometry":{ 
     "type":"Polygon", 
     "coordinates":[ 
     [ 
      [ 
       61.210817, 
       35.650072 
      ], 
      [ 
       62.230651, 
       35.270664 
      ], 
      [ 
       62.984662, 
       35.404041 
      ], 

我想讀這些座標,並將它們設置爲

 var coord = statesData.features[0].geometry.coordinates; 
     lalo = L.GeoJSON.coordsToLatLng(coord); 
     map.setView(lalo, 18); 

The documentation says

coordsToLatLng( coords) Function that will be used for converting GeoJSON coordinates to LatLng points (if not specified, coords will be assumed to be WGS84 — standard [longitude, latitude] values in degrees).

但我得到這個錯誤在控制檯

Uncaught Error: Invalid LatLng object: (undefined, 61.210817,35.650072,62.230651,35.270664,62.984662,35.404041...

UPDATE

第一個答案是正確的,因爲它解決了上述問題,但是,它縮放地圖到第一組座標,而我所真正想實現的是能夠加載頁面地圖自動縮放到一個多邊形(我只加載一個多邊形)。

This example is the closest i could find

+0

座標是座標的數組,數組裏面,裏面數組。那不是至少有一個陣列太多了嗎? 'setView()'可以處理多個座標嗎? – JJJ

+0

@JJJ我試圖自動縮放到多邊形 –

+0

還有一個['coordsToLatLngs()'](http://leafletjs.com/reference.html#geojson-coordstolatlngs)函數(注意是複數的「s」)它可以處理'coordinates'數組('[[[,],[],...],[[],[],...]]')。 'coordsToLatLng()'只會翻譯一個座標。您將不得不在「座標」中選擇lat/lng對中的一個。 'setView()'也將只使用一個座標(lat/lng)。 – Andreas

回答

0

多虧了答案,我got from here的解決方案是使用leaflet layerGroup

Following leaflet example因爲這是我在用的,根據他們的代碼和對方的回答我得到了,這是對我工作。 php的位是我用來獲取我的項目所需的國家名稱。下面得到的名稱,進行比較,如果有以GeoJSON這樣的一個名字,如果是這樣,中心和縮放地圖到多邊形:

geojson = L.geoJson(statesData, { 
    style: style, 
    onEachFeature: onEachFeature 
}).addTo(map); 

<?php 
    $myCountry = usp_get_meta(false, 'usp-custom-3'); 
    $fixedname = ucfirst($myCountry); 
?> 

geojson.eachLayer(function (layer) { 
    if (layer.feature.properties.name === "<?php echo $fixedname; ?>") { 
    // Zoom to that layer. 
    map.fitBounds(layer.getBounds()); 
    } 
}); 
0

您正在傳遞數組的數組的數組作爲參數(WTF XD)。 coordsToLatLng並不指望。它只是一個預計陣列,是它的座標:https://www.dartdocs.org/documentation/leaflet/0.0.1-beta.1/leaflet.layer/GeoJSON/coordsToLatLng.html

所以,你的代碼必須是實際上是:

var coord = statesData.features[0].geometry.coordinates[0][0]; 
lalo = L.GeoJSON.coordsToLatLng(coord); 
map.setView(lalo, 18); 

這將讓你的雙數組中的第一個點的座標。順便說一句,我敢肯定,雙數組不是你真正想要的。

+0

實際上,我只是將一個多邊形動態地添加到一個國家,當我加載頁面時,我正在嘗試放大該多邊形,我嘗試了fitBounds並在各個地方閱讀,我無法獲得我的頭像各地,直到我走到這一步,但不是」工作:( –

+1

@ rob.m是的,但是,從那裏來到這個數組?這是一個3維數組,有點意外在這裏的事情。如果你手工創建數組,然後你當你確實應該座標:[[x,y],[x,y],[x,y]]]時,你正在做'coordinates:[[x,y], [X,Y],[X,Y]]' –

+0

這是不以GeoJSON JSON –

相關問題