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


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.