2013-11-22 13 views
3

Google지도 (API v3 Javascript)에서 2 개의 다각형 (녹색)을 clipper.js와 병합하려고합니다. 이전clipper.js와 googlemaps 폴리곤의 결합

: http://jsfiddle.net/kevdiho/tc53Y/

내 목표는 단지 ​​1 다각형 (적색)하는 것입니다. 문제는 최종 다각형이 경로를 정확히 따르지 않으며 때로는 최악의 경우입니다.

후 : http://jsfiddle.net/kevdiho/uF6ec/

내가 clipper.js를 사용하는이 녹색 다각형이 기능 ClipperLib.ClipType.ctUnion 내가이 문제를 해결할 수있는 방법

var clipType = ClipperLib.ClipType.ctUnion; 
function mergePolygon() 
    { 
     for(j=0;j<array_polygon.length;j++){ 
      array_polygon_clipper = createarray_clipper_polygon(array_polygon[j]); 
      subj_polygons.push(array_polygon_clipper); 
     } 
     cpr.AddPolygons(subj_polygons, ClipperLib.PolyType.ptSubject); 
     var succeeded = cpr.Execute(clipType, solution_polygons); 
     return solution_polygons; 
    } 

을 병합하는? Clipper.js는 좋은 답변입니까, 아니면 googlemaps 폴리곤을 사용할 다른 라이브러리가 있습니까?

+0

다음 질문에 도움이 될 것입니다. http://stackoverflow.com/questions/15052430/how-can-i-combine-polygons-and-remove-the-overlap/15259663#15259663 – geocodezip

답변

4

예를 들어, AddPolygons가 통합 작업 후에 호출하고 크기를 축소하기 전에 좌표를 업 스케일하면이 예제가 작동 할 수 있습니다. 1000000000000만큼 증가시킵니다. 부동 소수점을 사용할 때 Clipper가 정수를 내부적으로 사용하기 때문에 크기를 유지하려면 크기 조절이 필요합니다. 이것은 Clipper가 좌표가 크게 확대되면 큰 정수 라이브러리를 사용하기 때문에 작업이 느리다는 단점이 있습니다.

속도 저하 (정밀) 문제를 해결하려면 사용할 수 있습니다 새로운 클리퍼 "수레"(실험 여전히하지만) : http://jsclipper.sourceforge.net/6.1.3.1_fpoint/clipper.js http://jsclipper.sourceforge.net/6.1.3.1_fpoint/clipper_unminified.js

클리퍼 6 당신이 고려해야 할 변경 몇 가지있다 계정은 6 클리퍼 5에서 마이그레이션 할 때 : http://jsfiddle.net/uF6ec/2/

: https://sourceforge.net/p/jsclipper/wiki/migration5to6/

내가 당신을 위해 변경 한

+0

감사합니다. 완벽하게 작동했습니다. – madiknight

+0

좋아요!플로트 Clipper는 실험용이므로, 라이브러리에 가능한 버그를 수정하는 데 도움이되는 피드백을 보내 주시면 감사하겠습니다. –

+1

어쩌면 저를 도울 수 있습니까? 나는 기본적으로 @madiknight가 요청한 것과 같은 것을 원하지만, 겹침 부분에 구멍이 있기를 원하지 않기 때문에 전체 개요, 깎기 도구로 작업하는 방법에 대한 아이디어가 필요합니까? – NAJ

3

여기 NAJ가 answer에 주석에서 요청한 비공유 조합을 만드는 방법이 있습니다. 아래 이미지는 두 개의 다각형 UNION을 구멍이 누락되도록 보여

enter image description here

뿐인 : http://jsfiddle.net/uF6ec/121/

홀에 대한 이유가 될 다각형의 서로 다른 방향이다. (. 또한 그 지역에 긍정적 인 모든 다각형을 반대로하여, 동일한 솔루션을 달성하기 위해 정반대을 만들 수) : 우리는이 지역이 음수 인 경우 감지하고 방향을 반대로해야

if (ClipperLib.JS.AreaOfPolygon(array_polygon_clipper) < 0) 
{ 
    array_polygon_clipper.reverse(); 
} 

그리고

var succeeded = cpr.Execute(ClipperLib.ClipType.ctUnion, 
solution_polygons, ClipperLib.PolyFillType.pftNonZero, 
ClipperLib.PolyFillType.pftNonZero); 

당신은 fill rulesReversePath에 대한 자세한 내용을보실 수 있습니다 : 다음 Execute()에서 pftNonZero 작성 규칙을 사용합니다.

+0

Timo 님, 잠시 동안이 문제를 해결해 주셔서 감사합니다. – NAJ

+0

다른 사람이이를 발견하면 다각형에 "구멍"이 있으면 모든 통화를 한 번에 새 google.maps.Polygon으로 전달하는 것이 중요합니다. 그렇지 않으면 구멍이 두 번 그려집니다. –