Google지도에서 두 개의 다각형이 겹치는 지 확인 하시겠습니까?


12

Google지도 및 다각형으로 작업하고 있지만 다각형이 서로 겹치지 않는지 확인해야합니다.

점 (lat, lng)이 다각형 안에있을 때 TRUE를 반환하는 함수가 있지만 다각형의 모든 점이 다른 다각형 안에 있는지 여부를 결정하는 것만으로는 충분하지 않습니다.

어떠한 제안?


1
github.com/tparkin/Google-Maps-Point-in-Polygon 을 찾기 위해 약 10 초가 걸렸습니다 . 당신은 아무것도 시도 했습니까?
John Powell

4
"점 (lat, lng)이 다각형 안에있을 때 TRUE를 반환하는 함수가 있습니다." 나는 그것이 좋은 시험이라고 생각하지만 전체 다각형이 다른 다각형 안에 있으면 대답하지 않습니다.
user30184

1
Javascript Topology Suite 라이브러리 를 프로젝트에 추가하고 이러한 종류의 비교를 위해 공간 연산자를 활용합니다. 프로젝트에 jsts 라이브러리를 포함시키고 두 개의 다각형 지오메트리에서 디졸브 / 연합을 수행하는 방법을 보여주는 비슷한 질문에 대한 답변을 제공했습니다 . 도움이 될 수 있습니다. 기회가 있다면 다각형, 선 또는 점의 두 가지 교차점을 테스트하는 예제를 찾거나 만들 수 있는지 볼 수 있습니다. 그들은 교차하거나 중요하지 않습니다. :)
elrobis

답변:


8

JSFiddle 예제

JSTS (JavaScript Topology Suite ) 라이브러리를 사용 하여 문제에 대한 솔루션을 보여주는 JSFiddle을 만들었습니다 .

설명

이 방법에는 두 가지 단계가 있습니다. 첫 번째 단계는 Google 도형을 WellKnownText (WKT) 도형 표현식 으로 변환 하는 데 널리 지원되는 형식입니다. 두 번째 단계는 JSTS를 사용하여 geometry.intersects()두 개의 WKT 기하학 의 JSTS 비교 를 수행합니다 .

이것을 정말로 이해하려면 WKT에 대한 기본적인 이해가 필요합니다. Google지도의 다각형 지오메트리는 널리 지원되는 형식이 아니므로 즉시 WKT 지오메트리로 변환하여 JSTS에서 작업 할 수 있습니다.

이를 쉽게하기 위해 Wicket 라이브러리를 사용 했습니다 . 물론 언제든지 자신의 Google-Polygon-to-WKT 방법을 홈 롤링 하거나 한 번에 한 번 쓴 방법 을 사용 하거나 다른 해결책을 사용할 수 있습니다. 개인적으로 요즘에는 Wicket을 사용합니다. 보시다시피, 간단합니다.

// Pass in two Google Polygon objects.
// It returns two WellKnownText (WKT) geometry expressions.
// 
function UseWicketToGoFromGooglePolysToWKT( poly1, poly2 )
{
    var wicket = new Wkt.Wkt();

    wicket.fromObject(poly1);
    var wkt1 = wicket.write();

    wicket.fromObject(poly2);
    var wkt2 = wicket.write();

    return [wkt1, wkt2];
}

다음은 고기와 감자입니다. JSTS를 사용하여 두 개의 WKT 형상을 취하고 교차하는지 테스트합니다. 다시 한 번 라이브러리에 의존하면 그다지 많지 않습니다.

// Pass in two WKT geometry expressions.
// It performs a JSTS intersects() comparison.
// 
function UseJstsToTestForIntersection( wkt1, wkt2 )
{
    // Instantiate JSTS WKTReader and get two JSTS geometry objects
    var wktReader = new jsts.io.WKTReader();
    var geom1 = wktReader.read(wkt1);
    var geom2 = wktReader.read(wkt2);

    if (geom2.intersects(geom1)) {
      alert('intersection confirmed!');
    } else {
      alert('..no intersection.');
    }
}

바이올린에서 라이브러리를 연결하는 방법

위에 링크 된 바이올린과 내가 시연 한 솔루션에는 두 개의 타사 라이브러리 인 JSS와 Wicket을 프로젝트에 추가해야합니다. 각각의 Github에서 코드를 가져와 프로젝트에 통합하는 것은 다른 연습입니다. 그러나 바이올린의 경우 Christopher Manning이 게시 한 기존 JSTS 예제Wicket의 자체 데모 페이지 에서 라이브러리를 참조하여 라이브러리에 연결했습니다 . 기본적으로 페이지를 열고 "소스보기"를 선택하고 두 라이브러리에 대한 관련 참조를 뽑았습니다. 이들은 내가 사용한 정확한 라이브러리 끝점이었습니다.

http://arthur-e.github.io/Wicket/wicket.js
http://arthur-e.github.io/Wicket/wicket-gmap3.js
http://bl.ocks.org/christophermanning/raw/4450188/javascript.util.min.js
http://bl.ocks.org/christophermanning/raw/4450188/jsts.min.js

또한 FWIW 에서이 스레드 에는 유용한 오버랩이 있습니다.
elrobis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.