broşür geojson koordinat sorunu


14

Leflet / geojson ile biraz oynamaya başladım. Ama koordinatlarım düzgün bir şekilde oluşturulmuyor ve neler olduğu hakkında hiçbir fikrim yok.

Benim koordinatlar: 52.23943, 4.97599. setViewFonksiyonu ile doğru çalışırlar .

var map = L.map('leaflet_map').setView([52.23943, 4.97599], 15);

Ancak bir geojason özelliği kullanarak Somali'nin doğusundaki bir yerde, hmmm, 'yansıtılıyor'.

var geojsonFeature = {
            "type": "Feature",
            "properties": {
            "name": "Coors Field",
            "amenity": "Baseball Stadium",
            "popupContent": "This is where the Rockies play!"
            },
            "geometry": {
                "type": "Point",
                "coordinates": [52.23943, 4.97599]
            }
        };
        var myLayer = L.geoJson().addTo(map);
        myLayer.addData(geojsonFeature).bindPopup("I am a gjson point.");

Burada neler olduğunu bilen var mı?

DÜZENLE

Saf meraktan dolayı koordinatları değiştirdim [4.976143930893815,52.23925499011473]ve nokta doğru yerde belirdi. Bilinen bir hata !?

Yanıtlar:


25

Buna bir böcek demezdim, sadece kafa karıştırıcı ve çelişkili standartlar meselesi.

Coğrafi konumlardan bahsederken, genellikle Lat-long kullanırız. Bu ISO 6709 standardında kodlanmıştır .

Kartezyen koordinat geometrisi ile uğraşırken genellikle XY kullanırız. Birçok CBS sistemi, bir Coğrafi Konum ile 2B koordinat noktasının özel bir durumu olarak çalışır; burada X, boylamı ve Y, Latitude'u temsil eder. Bu koordinat sırası, normal Lat-long kavramının tam tersidir.

Sorununuz geliyor:

Map.setView, bir l.LatLong öğesini girdi olarak alır ; burada ilk kordinat bir Latitude, ikincisi ise Boylamdır .

İstediğiniz zaman Dolayısıyla 52.23N, 4.97E, içeri geçmesi[52.23943, 4.97599]

GeoJSON standart herhangi bir nokta için, birinci parametre, X koordinatı olduğunu söyler (örneğin boylam) ikinci parametre Y koordinatı (yani boylam);

Bu nedenle 52.23N, 4.97EGeoJSON'da istediğiniz zaman , [4.97599, 52.23943]

Daha fazla okuma için bu soru-cevap bölümünü inceleyin


Gerçekten karışıklık var. Ben sadece geojson spec okumak ve gerçekten kesinlikle haklısın. İşte alıntı Öğelerin sırası x, y, z sırasını izlemelidir (doğu koordinasyonu, kuzeye doğru, öngörülen bir koordinat referans sistemindeki koordinatlar için yükseklik veya bir coğrafi koordinat referans sistemindeki koordinatlar için boylam, enlem, yükseklik)
LarsVegas

1
@LarsVegas Bu sorunun kaynağı İngilizce'dir. Coğrafi konumdan bahsederken genellikle Lat-long diyoruz ve koordinat geometrisinden bahsederken XY kullanıyoruz.
Devdatta Tengshe

Hangi programların ve kütüphanelerin X, Y ve hangi Y, X çiftlerini kullandığının bir özeti: macwright.org/lonlat , nezaket Tom MacWrite
matt wilkie

Bu yararlı cevap için teşekkürler ... ama neden geojson bunu yapmayı seçti?
Tommy

1

Bu konuya yeni çarptım. Bu sorunu yaşayan ve hatırı sayılır sayıda lat, uzun veri çifti olan herkes için aşağıdaki j'leri kullanabilirsiniz:

var a = "[LatLng(37.43943, 25.30563)],[LatLng(37.4367, 25.30495)],[LatLng(37.43071, 25.29945)],[LatLng(37.42362, 25.30426)],[LatLng(37.42089, 25.31113)],[LatLng(37.41489, 25.31113)],[LatLng(37.41053, 25.30769)],[LatLng(37.40235, 25.30563)],[LatLng(37.40562, 25.31525)],[LatLng(37.41816, 25.31937)],[LatLng(37.42307, 25.3228)],[LatLng(37.40889, 25.33104)],[LatLng(37.4078, 25.33722)],[LatLng(37.41598, 25.33791)],[LatLng(37.40344, 25.35027)],[LatLng(37.40726, 25.3688)],[LatLng(37.42253, 25.39009)],[LatLng(37.4138, 25.39902)],[LatLng(37.42907, 25.4052)],[LatLng(37.42961, 25.41962)],[LatLng(37.44215, 25.42442)],[LatLng(37.44543, 25.45807)],[LatLng(37.46287, 25.4615)],[LatLng(37.47595, 25.46013)],[LatLng(37.47104, 25.42786)],[LatLng(37.48249, 25.42923)],[LatLng(37.48358, 25.41)],[LatLng(37.49502, 25.40588)],[LatLng(37.49447, 25.38597)],[LatLng(37.49066, 25.3791)],[LatLng(37.46941, 25.38254)],[LatLng(37.46178, 25.37773)],[LatLng(37.4754, 25.35988)],[LatLng(37.4972, 25.35782)],[LatLng(37.50047, 25.34203)],[LatLng(37.49774, 25.32761)],[LatLng(37.49229, 25.3228)],[LatLng(37.4912, 25.3125)],[LatLng(37.4814, 25.30907)],[LatLng(37.47268, 25.31113)],[LatLng(37.46341, 25.32692)],[LatLng(37.44597, 25.32692)],[LatLng(37.42798, 25.3228)],[LatLng(37.43943, 25.30563)]".split("],[");
var b = a.map(function(x) { 
    var couple= (/\d+.\d+, \d+.\d+/g).exec(x).toString();
    var splitted = couple.split(", ");
    return "["+splitted[1]+","+splitted[0]+"]";
                            } );
b.join(); 

Düzenleme: Bu SO cevabına göre , görünüşe göre bu yöntem de var:

L.GeoJSON.coordsToLatLng().

Kullanmak zorunda değilim ama umut verici görünüyor.


1
Yararlı bir işlev. Çoğu girdi muhtemelen çıplak koordinat çifti listeleri olacaktır [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]. Ayrıca geojson-flip nodejs modülünü gördüm ama kullanmadım .
matt wilkie

Nazik sözlerin için ty. Sıkı bir program üzerinde çalışırken çoğunlukla son anın bir çözümüydü. Aslında broşür kitaplığı tarafından daha sonra öğrendiğim gibi tam olarak bunu yapmak için sağlanan bir yöntem var (şimdi hatırlayamıyorum ama isterseniz kontrol edebilirsiniz).
alexandros84

Leaflet yönteminin adı yardımcı olacaktır! Onu bulamadım ve yukarıda bahsettiğim geojson-flip modülü verilerimle çalışmıyor.
matt wilkie

Bulunan şey çim büyük bir iyi desteklenmiş modüldür: turfjs.org/docs/#flip
mat wilkie

1
hey, uzun gecikme için özür dilerim, ama işte konuştuğum şey: stackoverflow.com/questions/35983078/…
alexandros84
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.