전세계에 폴리 라인 랩을 만들려면 어떻게해야합니까?


14

내가 사용하고 전단지 세계 일주 도전의 표현을 만들지도. 도쿄에서 동쪽으로 향하고지도에서 남미 서부에 나타나는 폴리 라인을 추가하고 싶습니다. 대신 반대 방향으로지도를 가로 지르는 선을 얻습니다 (노란색 선 참조).

여기에 이미지 설명을 입력하십시오

아마도 이것이 날짜 표시 및 / 또는 좌표계와 관련이 있다고 생각하지만 세부 사항에 대해서는 약간 스케치입니다. 누구든지 이것을 작동시키기 위해 내가해야 할 일에 대한 이론을 설명 할 수 있습니까? Nasa의 bluemarble 투영을 사용하고 있습니다.

var bluemarble = new L.TileLayer.WMS("http://demo.opengeo.org/geoserver/wms", {
layers: 'bluemarble',
attribution: "Data © NASA Blue Marble, image service by OpenGeo",
minZoom: 2,
maxZoom: 5
});

2
+ -180도 자오선에서 폴리 라인을 끊어야합니다. 이를 위해서는 폴리 라인이 자오선을 가로 지르는 위도를 찾아야합니다. 당신의 GIS는 아마도 깨는 방법이있을 것입니다. 그렇지 않은 경우 관련 스레드에 표시된 코드에서 간단한 솔루션을 얻을 수 있습니다 . 플랫폼에서 이와 같은 코드를 실행할 수 있습니까?
whuber

나는 whuber에 동의합니다. + -180을 교차하는 다각형으로 비슷한 작업을 수행해야했습니다. + -180을 교차 할 때마다 여러 개의 폴리 라인 / 폴리곤으로 분할해야합니다.
Steve

답변:


13

+ -180도 자오선에서 폴리 라인을 끊어야합니다. 이를 위해서는 폴리 라인이 자오선을 가로 지르는 위도를 찾아야합니다. 당신의 GIS는 아마도 깨는 방법이있을 것입니다. 그렇지 않은 경우 관련 스레드에 표시된 코드에서 간단한 솔루션을 얻을 수 있습니다 . 자세한 내용은 다음과 같습니다.

  • 폴리 라인은 -180 <= lon <= 180 인 각 (lat, lon) 형식 으로 제공 되는 일련의 꼭짓점 으로 표시됩니다 . 각 연속 쌍이 + -180 자오선을 통과하는지 확인해야합니다. 빠른 테스트가 있습니다. 경도 차이의 절대 값이 180 이상이면 교차점이 있습니다.

  • + -180 자오선을 교차하는 각 세그먼트 (lat0, lon0)-> (lat1, lon1) 내에서 폴리 라인을 교차하는 두 조각으로 나눠야합니다.

핵심은 적절한 정확도로 중단 점의 위도를 찾는 것입니다. 이것은 구형 지구 모델에서 가장 쉽게 수행됩니다. 오류 (보다 정확한 타원체 모델과 비교)는 알아 채기에는 너무 작습니다.

해당 세그먼트가 (lat0, lon0)의 0 점에서 (lat1, lon1)의 1 점으로 이동합니다. 직교 좌표로 표시된대로 두 점 사이에 직선 세그먼트를 3D로 실행하고 y 좌표가 0 인 위치를 찾아 중단 점을 찾을 수 있습니다. 직교 좌표가 있습니다

(x0, y0, z0) = (cos(lon0)*sin(lat0), sin(lon0)*sin(lat0), cos(lat0))

점 1에 (x1, y1, z1)을주는 유사한 표현입니다.

t * y0 + (1-t) * y1 = 0

t의 경우; 그건,

t = y1 / (y1 - y0).

따라서 교차점의 좌표는

(x, y, z) = (t * x0 + (1-t) * x1, 0, t * z0 + (1-t) * z1)

이 지점 (+ -180 자오선 아래 어딘가의 지표면 아래)은 위도와 같습니다.

lat2 = ATan(z/x).

중단 점은 두 가지 방법으로 표현해야합니다. 깨진 폴리 라인의 첫 번째 부분을 종료하기 위해 (lat0, lon0) 이후에 연결할 때 lon0이 음수이면 (lat2, -180)을 사용하고 그렇지 않으면 (lat2, 180)을 사용하십시오. 깨진 폴리 라인의 두 번째 부분을 시작하기 전에 (lat1, lon1)을 부착 할 때 비슷한 규칙을 따릅니다.

예외적 인 경우, 0 점과 1 점 중 하나 또는 둘 다가 + -180 자오선에있을 수 있습니다. 이 절차를 수행하면 작성한 폴리선 조각 중 하나에 길이가 0 인 세그먼트가 배치됩니다. 이것이 GIS에 문제를 일으킬 수있는 경우이 상태를 테스트하십시오.

폴리 라인은이 자오선을 두 번 이상 교차 할 수 있습니다. 따라서 첫 번째 끊기를 찾아 폴리 라인을 두 부분으로 나눈 후에 두 번째 부분을 같은 방식으로 처리해야합니다.


1
whuber가 말한 것은 괜찮지 만 다음 문장에 오타가 있다고 생각합니다. 그렇지 않으면 (lat2, 180)을 사용하십시오. lon0 이 음수 이면 달리 사용하고 (lat2, -180) 그렇지 않으면 사용하십시오 (lat2, 180)
Georgi

@Georgi 그것을 잡아 주셔서 감사합니다; 나는 당신이 옳다고 생각하고 변경을 할 것입니다.
whuber

내가 Leaflet.js에서이를 구현했다, 여기 내 코드입니다 : gist.github.com/mikeatlas/0b69b354a8d713989147
마이크 아틀라스

@Mike 감사합니다. 나는 지그재그 삽화를 좋아한다. 이것은 내가이 답변을 썼을 때 구상했던 것과 같은 상황이다. 정말 심한 테스트를 원한다면 + -180도 자오선 자체를 따라 이동하고 두 극을 교차하는 폴리 라인이 어떻게되는지 확인하십시오!
whuber

@ whuber 나는 단지 그것을 시도해야 할 수도 있습니다 : / 결과를 게시합니다
Mike Atlas

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.