vấn đề phối hợp tờ rơi Geojson


14

Tôi mới bắt đầu chơi với leflet / Geojson một chút. Nhưng tọa độ của tôi không được hiển thị đúng và tôi không biết chuyện gì đang xảy ra.

Tọa độ của tôi là : 52.23943, 4.97599. Họ làm việc đúng với setViewchức năng.

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

Nhưng bằng cách sử dụng một GeojasonFeature, hmmm, 'dự kiến', ở đâu đó phía đông 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.");

Bất cứ ai biết những gì đang xảy ra ở đây?

BIÊN TẬP

Vì tò mò thuần túy tôi đã thay đổi tọa độ xung quanh [4.976143930893815,52.23925499011473]và điểm xuất hiện ở vị trí chính xác của nó. Một lỗi đã biết!?

Câu trả lời:


25

Tôi sẽ không gọi nó là một lỗi, chỉ là vấn đề tiêu chuẩn khó hiểu và mâu thuẫn.

Khi nói về vị trí địa lý, chúng ta thường sử dụng Lat-long. Điều này đã được mã hóa trong tiêu chuẩn ISO 6709 .

Khi làm việc với hình học tọa độ Descartes, chúng ta thường sử dụng XY. Nhiều hệ thống GIS, hoạt động với Vị trí địa lý là trường hợp đặc biệt của điểm tọa độ 2 D, trong đó X đại diện cho kinh độ và Y đại diện cho Vĩ độ. Thứ tự tọa độ này, hoàn toàn trái ngược với khái niệm Lat-long thông thường.

Đến với vấn đề của bạn:

Map.setView lấy một l.LatLong làm đầu vào, trong đó phần đầu tiên là Vĩ độ và phần thứ hai là Kinh độ.

Do đó khi bạn muốn 52.23N, 4.97E, bạn vượt qua[52.23943, 4.97599]

Các tiêu chuẩn GeoJSON nói rằng đối với bất kỳ điểm nào, tham số đầu tiên là X Phối hợp (tức là kinh độ) và tham số thứ hai là Y Phối (tức là Latitude);

Do đó khi bạn muốn 52.23N, 4.97Etrong GeoJSON, bạn cần phải vượt qua [4.97599, 52.23943]

Để đọc thêm, hãy xem qua Hỏi & Đáp này


Quả thực là một vấn đề nhầm lẫn. Tôi chỉ đọc thông số Geojson và thực sự bạn hoàn toàn đúng. Dưới đây là trích dẫn Thứ tự các yếu tố phải tuân theo thứ tự x, y, z (hướng đông, hướng bắc, độ cao cho tọa độ trong hệ thống tham chiếu tọa độ dự kiến, hoặc kinh độ, vĩ độ, độ cao cho tọa độ trong hệ thống tham chiếu tọa độ địa lý)
LarsVegas

1
@LarsVegas Nguồn gốc của vấn đề này là ngôn ngữ tiếng Anh. Chúng ta thường nói Lat-long khi chúng ta đang nói về vị trí địa lý và sử dụng XY khi nói về hình học tọa độ.
Devdatta Tengshe

Tóm tắt về các chương trình và thư viện sử dụng X, Y và thứ tự Y, X nào đặt hàng: macwright.org/lonlat , lịch sự Tom MacWrite
matt wilkie

cảm ơn vì câu trả lời hữu ích này ... nhưng TẠI SAO Geojson lại chọn làm điều này ??
Tommy

1

Tôi vừa gặp vấn đề này. Đối với bất kỳ ai gặp phải vấn đề này và có số lượng cặp dữ liệu dài, lat đáng kể, bạn có thể sử dụng js sau:

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

Chỉnh sửa: theo câu trả lời SO này , rõ ràng cũng có phương pháp này:

L.GeoJSON.coordsToLatLng().

Tôi chưa sử dụng nó nhưng nó có vẻ đầy hứa hẹn.


1
Một chức năng hữu ích. Hầu hết các đầu vào có thể sẽ là danh sách cặp tọa độ trần - [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]. Tôi cũng đã thấy nhưng chưa sử dụng mô-đun nodejs Geojson-flip .
matt wilkie

Ty cho những lời tốt đẹp của bạn. Nó chủ yếu là một giải pháp của khoảnh khắc cuối cùng khi tôi đang làm việc với một lịch trình chặt chẽ. Thực sự có một phương pháp được cung cấp bởi thư viện tờ rơi để thực hiện chính xác như tôi đã học sau này (không thể nhớ bây giờ nhưng tôi có thể kiểm tra nếu bạn muốn).
alexandros84

Tên của phương pháp Tờ rơi sẽ hữu ích! Tôi đã không thể tìm thấy nó và mô-đun Geojson-flip mà tôi đã đề cập ở trên không hoạt động với dữ liệu của tôi.
matt wilkie

Tìm thấy một cái gì đó trong sân cỏ , đó là một mô-đun lớn được hỗ trợ tốt: turfjs.org/docs/#flip
matt wilkie

1
này, xin lỗi vì sự chậm trễ lâu, nhưng đây là những gì tôi đã nói về: stackoverflow.com/questions3538983078/ mẹo
alexandros84
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.