2017-03-16 7 views
-1

Ich habe meine GeoJSON Format wie folgt aus:Wie man automatisch auf ein Polygon im Flugblatt zoomt?

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 
      ], 

ich diese Koordinaten zu lesen versuche und sie als

 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).

Aber ich erhalte diesen Fehler in der Konsole

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

UPDATE

Die erste Antwort ist richtig, da es das Problem oben löst, ist es jedoch zoomt die Karte auf den ersten Satz von Koordinaten während dem, was ich wirklich zu erreichen versuchen, die Seite zu können, ist laden mit der Karte automatisch auf ein Polygon gezoomt (ich lade nur ein Polygon).

This example is the closest i could find

+0

der Koordinaten ist ein Array von Koordinaten, innerhalb einer Anordnung, nach innen eine Anordnung. Ist das nicht mindestens ein Array zu viel? Kann 'setView()' mehr als eine Koordinate behandeln? – JJJ

+0

@JJJ Ich versuche automatisch auf ein Polygon zu zoomen –

+0

Es gibt auch eine ['coordsToLatLngs()'] (http://leafletjs.com/reference.html#geojson-coordstolatlngs) -Funktion (beachten Sie den Plural "s") das kann mit einem 'coordinates' Array umgehen (' [[[], [], ...], [[], [], ...]]). Die 'coordsToLatLng()' übersetzt nur eine Koordinate. Sie müssen eines der lat/lng-Paare in 'coordinates' auswählen. 'setView()' verwendet auch nur eine Koordinate (lat/lng). – Andreas

Antwort

0

Dank der Antwort I got from here ist die Lösung leaflet layerGroup zu verwenden.

Following leaflet example als das ist, was ich benutze, basierend auf ihrem Code und die andere Antwort, die ich habe, ist das, was für mich arbeitete. Das php-Bit ist, was ich verwende, um den Landnamen zu erhalten, den ich gemäß meinem Projekt benötige. Im Folgenden wird ein Name, vergleicht sie, ob es einen Namen wie die im GeoJSON ist, und wenn ja, Zentren und zoomt die Karte zu diesem Polygon:

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

Sie sind ein Array von Arrays von Arrays als Parameter (WTF xD). coordsToLatLng erwartet das nicht. Er erwartet, dass nur ein Array, die Koordinaten sind: https://www.dartdocs.org/documentation/leaflet/0.0.1-beta.1/leaflet.layer/GeoJSON/coordsToLatLng.html

So Ihr Code hat eigentlich sein:

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

Dadurch werden die Koordinaten des ersten Punktes in Ihrem Doppel Array erhalten. Übrigens, ich bin mir ziemlich sicher, dass Double-Array nicht das ist, was du wirklich willst.

+0

Ich tue eigentlich nicht, ich füge einfach ein Polygon dynamisch zu einem Land hinzu und wenn ich die Seite lade, versuche ich in dieses Polygon einzoomen, habe ich fitBounds versucht und lese überall und ich kann meinen Kopf nicht bekommen herum, bis ich soweit kam, aber nicht funktioniert :( –

+1

@ rob.m Ja, aber woher kommt dieses Array? Das ist ein dreidimensionales Array, etwas Unerwartetes hier. Wenn Sie dieses Array manuell erstellen, dann Sie tun es falsch, du machst 'Koordinaten: [[[x, y], [x, y], [x, y]]]] wenn es sicher sein sollte Koordinaten: [[x, y], [x, y], [x, y]] ' –

+0

das ist geoJson nicht json –

Verwandte Themen