좌표 집합이 주어지면 최소 한계를 어떻게 계산할 수 있습니까?


13

lon / lat에 좌표 세트가 있습니다. 폴리 (평평하게 투영 된 경우)를 형성하는 적어도 3 개의 정렬 된 좌표가 항상 있습니다. 이 좌표의 최소 경계를 유효한 경도 및 위도 범위 세트로 계산하려면 어떻게해야합니까? ( '유효한'으로 나는 반 자오선을 명시 적으로 설명하는 범위를 의미한다). 내가 찾고있는 것을 설명하기가 어렵 기 때문에 그림이 있습니다.

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

그림의 경우는 사소합니다. 모든 포인트의 절대 최소값과 최대 값을 찾을 수 있습니다. 그러나 모든 경우에 작동하지는 않습니다. 일반적인 해결책이 있습니까?

편집 : '유효한'이라는 의미를 명확히하기 위해 데이터 세트에 경도 값이 -76, -135 및 164라는 세 가지 값이 있다고 가정합니다. -180과 164에서 180까지

좀 더 설명이 필요합니다. 점은 다각형을 형성하므로 특정 경우 필요한 범위는 -180에서 +180 (즉, 전체 360도)이 될 수 있습니다.

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

왼쪽의 이미지는 지구의 '반쪽'에서 발생하는 네 좌표의 경도를 보여줍니다. 북극을 내려다보고 있다고 상상해보십시오 (검은 점). 분홍색은 다각형을 포함하는 최소 세로 범위를 나타냅니다 (다각형은 네 점 사이에 자주색으로 표시됨). 왼쪽의 경우에는 [-180 ~ -120] 및 [135 ~ 180]의 두 가지 세로 범위가 있습니다 (시각적으로 추정).

오른쪽 이미지는 포인트가 지구 주위를 돌아 다니는 또 다른 경우를 보여줍니다. 이 범위는 [-180 ~ 180]입니다.


1
나는 전에이 문제를 고려한 적이 없으며 훌륭한 질문입니다. 평평한 지구가 우리의 일을 더 쉽게 만들 수있는 또 다른 예입니다! 이에 대한 해결책을 기대합니다.
초에 sgrieve

나는 당신이 "( '유효한'에 의해 반 자오선을 명시 적으로 설명하는 범위를 의미합니다.)"에 대해 더 명확해야한다고 생각합니다.-최소 단어가 문제의 경계 앞에 있어야한다고 생각합니다.
Ian Turton

이미지를 다시 추가하면 문제를 설명하는 데 도움이 될 수 있습니다.
Mapperz

1
iant : 명시 적으로 '유효한'Mapperz를 명확히했습니다 : 다시 추가 하시겠습니까? 표시되지 않습니까? 나는 그것을 잘 볼 수 있습니다.
Pris

1
좌표는 lon / lat이며 지리적 데이터를 검색하기 위해 데이터베이스를 쿼리하는 데 사용됩니다. 엄밀히 말하면 이것을 순수한 수학 문제로 바꿀 수 있습니다 (GIS에서 많은 것들에 대해 말할 수는 있지만)
Pris

답변:


5

질문을 올바르게 이해하기를 바랍니다.

경도와 위도에 대한 문제를 별도로 해결할 수 있으므로 경도 -76, -135 및 164로 예를 들어 보겠습니다.

먼저 나는 그들을 주문할 것이다 :

-135, -76, 164

그런 다음 가장 왼쪽에 가장 왼쪽에 좌표를 추가합니다 : -135 + 360 = 225

-135, -76, 164, 225

이제 좌표 사이의 간격을 계산할 수 있습니다.

-135 (59) -76 (240) 164 (61) 225
             .......

가장 큰 간격 (240)은 최소 경계 상자의 경계, 상자에 속하지 않는 부분이어야 합니다. 점선은 우리가 남을 수있는 원의 가장 큰 부분입니다. 이 예에서 경계 상자는 164로 시작하고 -135를 포함하고 -76으로 끝납니다.


이것은 내가 생각하는 대부분의 경우에 효과적입니다. 그러나 추가적인 경도 (+60) [폴리의 네 번째 포인트]를 가진 나의 예를 생각해보십시오. 이 경우 -180 ~ 180을 원합니다. 방법을 사용하면 61 ~ 180과 -76 ~ -180을 얻습니다.
Pris

@Pris-경도 180 / -180 (결국 같은 지점 임)이 가능한 가장 작은 상자가 아니더라도 모든 경우에 상자의 일부가 되길 원하십니까?
martinstoeckli

여기서 중요한 차이점은 점이 다각형을 형성한다는 것입니다. 내 편집을 참조하십시오.
Pris

@ 프리스-아, 이거 정말 까다로워 요. 그것은 두 점 사이의 가장자리의 모든 점이 정점으로 계산됩니다.
martinstoeckli

1

Google Maps API를 사용하면 자바 스크립트로 쉽게 할 수 있습니다. 해당 API로 클라이언트 측에서 수행하는 방법은 다음과 같습니다.

var bounds = new google.maps.LatLngBounds();

//Recursively loop through your coordinate list
    latLng = new google.maps.LatLng(<YourLat>, <YourLon>);
    bounds.extend(latLng);
//

extentBox = new google.maps.Rectangle({
    bounds: bounds,
    strokeColor: "#FF0000",
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: "#FF0000",
    fillOpacity: 0.35
});
extentBox.setMap(map);

이봐, 답변 주셔서 감사하지만 API를 호출하거나 기존 솔루션을 사용하는 대신 실제 방법을 찾고 있습니다.
Pris

당신은 bounds.extend 메소드를주었습니다. 나는이 정확한 해결책을 찾고 있었으므로 감사합니다!
Thomson Comer

이것이 다각형과 함께 작동합니까? Rectangle을 사용하는 것을 봅니다.
Danny G

1

나는 이것을 할 수있는 방법을 찾은 것 같아요. 예비 구현이 작동하지만 놓친 경우가 있는지 확실하지 않습니다. 이 솔루션에 문제가 있으면 지적하십시오.

다각형을 구성하는 점이 아닌 다각형의 론 / 위도 범위를 얻는 데 관심이 있다는 점을 고려할 때 문제를 시도하는 한 가지 방법은 실제로 일련의 정렬 된 좌표를 처음부터 끝까지 걷는 것입니다. 시작점이 주어지면 지구 중심을 기준 으로 시계 방향과 시계 반대 방향으로 얼마나 멀리 이동했는지 추적 하고 다각형을 완성 할 때까지 계속 진행합니다.

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

CW와 CCW가 출발점에서 얼마나 멀리 이동하는지 알 수 있습니다. 이는 일반적인 경우 (이미지의 왼쪽)에 올바른 경계를 도출하기에 충분한 정보를 제공합니다. 다각형이 완전히 돌아가거나 중심을 가로 질러 자르는 경우 반환되는 이동 각도는 360 도입니다.

이 방법은 다각형이 지구 표면을 가로 지르지 않고 지구 표면을 '고정'할 때에도 작동합니다. 따라서 토론토 (론 : -79)에서 런던 (론 : -5), 도쿄 (론 : 139), 그리고 같은 순서로 지구 표면을 따라 여행하는 사람을 보여주는 다각형이 있다면 범위 [-79 ~ 139]를 구하십시오.

다각형이 중심을 가로 질러 자르면 (+90과 -90에서 두 개의 인접한 점을 상상해보십시오) 어느 방향 으로든 갈 수는 있지만 이것을 완전 스윕 (360도)으로 간주합니다.

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