ปัญหาพิกัดพิกัดแผ่นพับ geojson


14

ฉันเพิ่งเริ่มเล่นกับ leflet / geojson เล็กน้อย แต่พิกัดของฉันไม่ได้แสดงอย่างถูกต้องและฉันก็ไม่รู้ว่าเกิดอะไรขึ้น

พิกัดของฉันคือ: 52.23943, 4.97599. มันทำงานอย่างถูกต้องด้วยsetViewฟังก์ชั่น

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

แต่ใช้ geojasonFeature พวกเขาคือ hmmm, 'projected' ซึ่งอยู่ทางตะวันออกของโซมาเลีย

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

ใครที่รู้ว่าเกิดอะไรขึ้นที่นี่

แก้ไข

จากความอยากรู้บริสุทธิ์ฉันเปลี่ยนพิกัดรอบ ๆ[4.976143930893815,52.23925499011473]และจุดปรากฏในตำแหน่งที่ถูกต้อง ข้อผิดพลาดที่รู้จัก!

คำตอบ:


25

ฉันจะไม่เรียกมันว่าเป็นข้อผิดพลาดเพียงเรื่องของมาตรฐานที่สับสนและขัดแย้ง

เมื่อพูดถึงที่ตั้งทางภูมิศาสตร์เรามักจะใช้ Lat-long นี้ได้รับการประมวลผลในมาตรฐาน ISO 6709

เมื่อต้องรับมือกับเรขาคณิตพิกัดคาร์ทีเซียนเรามักจะใช้ XY ระบบ GIS จำนวนมากทำงานกับตำแหน่งทางภูมิศาสตร์เป็นกรณีพิเศษของจุดพิกัด 2 D โดยที่ X แทนลองจิจูดและ Y แทนละติจูด คำสั่งพิกัดนี้ตรงข้ามกับความคิด Lat-long ทั่วไป

มาถึงปัญหาของคุณ:

map.setView ใช้l.LatLongเป็นอินพุทโดยที่ cordinate ตัวแรกคือ Latitude และอันที่สองคือลองจิจูด

ดังนั้นเมื่อคุณต้องการ52.23N, 4.97Eคุณจะผ่าน[52.23943, 4.97599]

มาตรฐาน GeoJSONกล่าวว่าสำหรับจุดใดพารามิเตอร์แรกเป็นพิกัด X (เช่นลองจิจูด) และพารามิเตอร์ที่สองเป็นพิกัด Y (เช่นละติจูด);

ดังนั้นเมื่อคุณต้องการ52.23N, 4.97Eใน GeoJSON คุณจะต้องผ่าน [4.97599, 52.23943]

สำหรับการอ่านเพิ่มเติมให้ทำตามคำถามและคำตอบนี้


เป็นเรื่องของความสับสน ฉันเพิ่งอ่านข้อมูลจำเพาะของ geojson และแน่นอนว่าคุณพูดถูก นี่คือคำพูดลำดับขององค์ประกอบจะต้องเป็นไปตามลำดับ x, y, z (ทิศตะวันออก, ทิศเหนือ, ความสูงสำหรับพิกัดในระบบอ้างอิงพิกัดที่คาดการณ์หรือลองจิจูด, ละติจูด, ความสูงสำหรับพิกัดในระบบอ้างอิงพิกัดทางภูมิศาสตร์)
LarsVegas

1
@LarsVegas ที่มาของปัญหานี้คือภาษาอังกฤษ เรามักจะบอกว่า Lat-long เมื่อเรากำลังพูดถึงที่ตั้งทางภูมิศาสตร์และใช้ XY เมื่อพูดถึงเรขาคณิตพิกัด
Devdatta Tengshe

สรุปว่าโปรแกรมและห้องสมุดใดที่ใช้ X, Y และลำดับที่ Y, X คู่: macwright.org/lonlat , มารยาท Tom MacWrite
matt wilkie

ขอบคุณสำหรับคำตอบที่เป็นประโยชน์นี้ แต่ทำไม geojson เลือกที่จะทำเช่นนี้ ??
Tommy

1

ฉันเพิ่งเจอปัญหานี้ สำหรับทุกคนที่ประสบปัญหานี้และมี lat จำนวนมากคู่ข้อมูลยาวคุณสามารถใช้ js ต่อไปนี้:

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

แก้ไข:ตามคำตอบ SO นี้เห็นได้ชัดว่ายังมีวิธีนี้:

L.GeoJSON.coordsToLatLng().

ฉันไม่ได้ใช้มัน แต่ดูเหมือนว่าจะมีแนวโน้ม


1
ฟังก์ชั่นที่มีประโยชน์ ปัจจัยการผลิตส่วนใหญ่อาจจะคลอดประสานงานรายการคู่แม้ว่า [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]- ฉันเคยเห็น แต่ไม่ได้ใช้โมดูล nodeojs พลิก geojson
แมตต์วิลคี

Ty สำหรับคำพูดของคุณ ส่วนใหญ่มันเป็นทางออกของช่วงเวลาสุดท้ายขณะที่ฉันกำลังทำงานหนัก จริงๆแล้วมีวิธีการที่ห้องสมุดใบปลิวทำอย่างที่ฉันได้เรียนรู้ในภายหลัง (จำตอนนี้ไม่ได้ แต่ฉันสามารถตรวจสอบได้ถ้าคุณต้องการ)
alexandros84

ชื่อของวิธีการแผ่นพับจะเป็นประโยชน์! ฉันไม่สามารถค้นหาได้และโมดูล geojson-flip ที่ฉันกล่าวถึงข้างต้นไม่สามารถทำงานกับข้อมูลของฉันได้
แมตต์วิลคี

พบบางสิ่งในสนามหญ้าซึ่งเป็นโมดูลขนาดใหญ่ที่ได้รับการสนับสนุนอย่างดี: turfjs.org/docs/#flip
matt wilkie

1
เฮ้ขอโทษที่ล่าช้ามานาน แต่นี่คือสิ่งที่ฉันกำลังพูดถึง: stackoverflow.com/questions/35983078/…
alexandros84
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.