2014-03-27 7 views
9

Ich versuche, ein GeoJSON-Objekt (Übersicht von Russland, in diesem Fall), die den 180. Meridian erstreckt. Derzeit zeigt dies mit einem Teil des Landes auf der linken Seite der Karte und ein Teil auf der rechten Seite:Display GeoJSON mit Flugblatt, das den 180. Meridian überspannt

russia and the 180th meridian

bei Faltblatt Blick scheint es, gibt es eine Lösung für dieses, aber das nicht zu funktionieren scheinen : https://github.com/Leaflet/Leaflet/issues/82. Ich habe auch versucht, eine coordsToLatLng function hinzuzufügen, aber ich kann nicht scheinen, dass das auch funktioniert. Kachelebenen haben eine continuousWorld Option, die ich glaube nicht mit einem geoJSON-Objekt funktioniert.

Diese Daten sind hier: https://dl.dropboxusercontent.com/u/12085570/RUS.json. Die Daten wurden von einer Shapefile zu Geojson und schließlich zu Topojson generiert. Um den Topojson zu konvertieren, habe ich die --no-stitch-poles Option verwendet, die dies "schön" auf der Karte anzeigt, was bedeutet, dass es die Punkte auf der rechten Seite nicht mit der linken Seite der Karte verbindet.

Gibt es eine Möglichkeit, dies als kontinuierliches Objekt anzuzeigen, ohne den Meridian zu teilen?

Antwort

0

Ich stieß auf das gleiche Problem und meine Lösung beinhaltete die Nutzung von ein paar Dingen: 1) Leaflet ermöglicht es Ihnen, Elemente jenseits der 180/-180 Längen zu platzieren. 2) Geografische Körper, die den Antimeridian kreuzen, enthalten meistens alle negativen oder positiven Längenkoordinaten.

Meine Lösung bestand darin, eine rekursive Funktion zu verwenden, um das Koordinaten-Array innerhalb des geoJSON-Objekts zu durchlaufen und im Fall von Russland die negativen Koordinatenwerte in äquivalente positive Werte umzuwandeln. Zum Beispiel würde ein Wert von -175 in 185 umgewandelt werden.

Unten ist die Funktion, die ich verwendet habe, um das Koordinaten-Array zu verarbeiten. Ich habe es für Standorte in der östlichen Hemisphäre verwendet - Sie müssten die Konvertierung ändern, um mit Standorten in der westlichen Hemisphäre zu arbeiten.

antimeridian(elem: any) { 
    if (Array.isArray(elem)) { 
    for (var i = 0; i < elem.length; i++) { 
     if (Array.isArray(elem[i][0])) { 
     this.antimeridian(elem[i]); 
     } else { 
     if (elem[i][0] < 0) { 
      elem[i][0] = 180 + (180 + elem[i][0]); 
     } 
     } 
    } 
    } 
}; 
Verwandte Themen