전단지 geojson 좌표 문제


14

방금 leflet / geojson과 조금 놀기 시작했습니다. 그러나 내 좌표가 올바르게 렌더링되지 않으며 진행중인 실마리가 없습니다.

내 좌표는 : 52.23943, 4.97599입니다. 그들은 setView기능에 올바르게 작동합니다 .

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

그러나 geojasonFeature를 사용하면 소말리아 동쪽 어딘가에 '투영'됩니다.

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 시스템은 지리적 위치를 2D 좌표 점의 특수한 경우로 사용합니다. 여기서 X는 경도를 나타내고 Y는 위도를 나타냅니다. 이 좌표 순서는 일반적인 Lat-long 개념과 정확히 반대입니다.

당신의 문제에 오기 :

map.setView는 l.LatLong 을 입력으로 사용합니다. 첫 번째 좌표는 위도이고 두 번째 좌표는 경도입니다.

당신이 원하는 경우에 따라서 52.23N, 4.97E, 당신의 통과[52.23943, 4.97599]

GeoJSON 표준은 임의의 지점, 제 파라미터의 X 좌표 인 것을 말한다 (즉, 경도) 및 두 번째 파라미터는 Y 좌표 (즉 위도);

따라서 52.23N, 4.97EGeoJSON에서 원할 때 통과해야합니다. [4.97599, 52.23943]

자세한 내용은이 Q & A를 참조하십시오.


실제로 혼란의 문제. 나는 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

나는이 문제에 부딪쳤다. 이 문제가 발생하고 상당한 수의 위도 및 경도의 데이터 쌍을 가진 사람은 다음 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 answer에 따르면 분명히이 방법이 있습니다.

L.GeoJSON.coordsToLatLng().

나는 그것을 사용하지 않았지만 유망한 것처럼 보인다.


1
유용한 기능. 대부분의 입력은 아마도 베어 좌표 쌍 목록 일 것입니다 [[60.672744462452,-135.02487602415],[60.673011537554,-135.02487602415]]. 또한 geojson-flip nodejs 모듈을 보았지만 사용하지 않았습니다 .
매트 윌키

당신의 친절한 말을 위해 타이. 내가 빡빡한 일정으로 작업하면서 그것은 마지막 순간의 해결책이었습니다. 실제로 나중에 리플릿에서했던 것과 똑같이하기 위해 전단지 라이브러리에서 제공하는 방법이 있습니다 (지금 기억할 수는 없지만 원하는 경우 확인할 수 있습니다).
alexandros84

Leaflet 방법의 이름이 도움이 될 것입니다! 찾을 수 없으며 위에서 언급 한 geojson-flip 모듈이 내 데이터에서 작동하지 않습니다.
matt wilkie 22.58에

turf 에서 큰 지원 모듈 인 것을 찾았습니다 . turfjs.org/docs/#flip
매트 윌키

1
오랜만에 죄송하지만 여기 제가 말씀 드린 내용이 있습니다. stackoverflow.com/questions/35983078/...
alexandros84
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.