leaflet geojson masalah koordinat

14

Saya baru mulai bermain dengan leflet / geojson sedikit. Tetapi koordinat saya tidak diterjemahkan dengan benar dan saya tidak tahu apa yang sedang terjadi.

Koordinat saya adalah: 52.23943, 4.97599. Mereka bekerja dengan benar dengan setViewfungsinya.

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

Tapi menggunakan fitur geojason mereka, hmmm, 'diproyeksikan', di suatu tempat di timur Somalia.

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

Adakah yang tahu apa yang terjadi di sini?

EDIT

Karena penasaran, saya mengubah koordinat [4.976143930893815,52.23925499011473]dan titik muncul di lokasi yang benar. Bug yang dikenal !?

LarsVegas
sumber

Jawaban:

25

Saya tidak akan menyebutnya bug, hanya masalah standar yang membingungkan dan kontradiktif.

Saat berbicara tentang lokasi geografis, kami biasanya menggunakan Lat-long. Ini telah dikodifikasikan dalam standar ISO 6709 .

Ketika berhadapan dengan geometri koordinat Cartesian, kita biasanya menggunakan XY. Banyak sistem GIS, bekerja dengan Lokasi Geografis sebagai kasus khusus dari titik koordinat 2 D, di mana X mewakili bujur dan Y mewakili Latitude. Urutan koordinat ini, persis berlawanan dengan gagasan Lat-long reguler.

Datang ke masalah Anda:

Map.setView mengambil l.LatLong sebagai input, di mana koordinat pertama adalah Latitude, dan yang kedua adalah Longitude.

Karena itu ketika Anda inginkan 52.23N, 4.97E, Anda masuk[52.23943, 4.97599]

Standar GeoJSON mengatakan bahwa untuk setiap titik, parameter pertama adalah Koordinat X (yaitu Bujur) dan parameter kedua adalah koordinat Y (yaitu Lintang);

Karenanya ketika Anda ingin 52.23N, 4.97Edi GeoJSON, Anda harus lulus [4.97599, 52.23943]

Untuk bacaan lebih lanjut, baca T&J ini

Devdatta Tengshe
sumber
Memang masalah kebingungan. Saya baru saja membaca spesifikasi geojson dan memang Anda memang benar. Berikut ini kutipan Urutan elemen harus mengikuti urutan x, y, z (arah timur, utara, ketinggian untuk koordinat dalam sistem referensi koordinat yang diproyeksikan, atau bujur, lintang, ketinggian untuk koordinat dalam sistem referensi koordinat geografis)
LarsVegas
1
@LarsVegas Asal masalah ini adalah Bahasa Inggris. Kami biasanya mengatakan Lat-long ketika kita berbicara tentang lokasi geografis dan menggunakan XY ketika berbicara tentang koordinat geometri.
Devdatta Tengshe
Ringkasan program dan pustaka mana yang menggunakan X, Y dan Y, X mana yang dipesan : macwright.org/lonlat , milik Tom MacWrite
matt wilkie
terima kasih atas jawaban yang bermanfaat ini ... tapi MENGAPA geojson memilih untuk melakukan ini ??
Tommy
1

Saya baru saja bertemu masalah ini. Bagi siapa pun yang mengalami masalah ini dan memiliki banyak pasangan data lat, long, Anda dapat menggunakan js berikut:

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(); 

Sunting: menurut jawaban SO ini , ternyata ada juga metode ini:

L.GeoJSON.coordsToLatLng().

Saya belum menggunakannya tetapi tampaknya menjanjikan.

alexandros84
sumber
1
Fungsi yang bermanfaat. Sebagian besar input mungkin adalah daftar pasangan koordinat kosong - [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]. Saya juga melihat tetapi tidak menggunakan modul geojson-flip nodejs.
matt wilkie
Ty untuk kata-kata baik Anda. Itu sebagian besar solusi dari saat terakhir karena saya sedang mengerjakan jadwal yang ketat. Sebenarnya ada metode yang disediakan oleh perpustakaan leaflet untuk melakukan hal itu seperti yang saya pelajari nanti (tidak ingat sekarang tapi saya bisa memeriksa jika Anda mau).
alexandros84
Nama metode Leaflet akan sangat membantu! Saya belum dapat menemukannya, dan modul geojson-flip yang saya sebutkan di atas tidak berfungsi dengan data saya.
matt wilkie
Menemukan sesuatu di rumput , yang merupakan modul besar yang didukung dengan baik: turfjs.org/docs/#flip
matt wilkie
1
hei, maaf atas keterlambatan yang lama, tapi inilah yang saya bicarakan: stackoverflow.com/questions/35983078/…
alexandros84