GIS

[GIS] 멀티폴리곤(MultiPolygon)에서 라벨이 여러개 뜨는 현상 및 해결방법

모찌바라기 2022. 8. 13. 16:52
728x90
반응형

 

 

 

 

이번에 시스템상에서 shp파일로 레이어를 하나 생성해서, 라벨을 표출하였는데

이상하게 라벨링이 여러개 뜨는 현상이 발생하였다..

 

 

라벨이 여러개 뜨는 현상 발생

 

이미지

 

 

분명 같은 하나의 레이어 속성정보를 바라보고 있기 때문에 하나에만 떠야하는데.. 각 폴리곤마다 라벨이 뜨는 상황..

그래서 해당 shp파일을 QGIS에 올리고 라벨링을 해보니 아래와 같이 나왔다.

 

 

QGIS

 

 

시스템과 달리 라벨이 하나만 떴다. 그래서 시스템상 에러는 아니지만 코드를 수정해야 겠다는 확신이 들었다.

 

 

원인파악

 

우선 레이어의 feature을 보았다. 예전에 멀티폴리곤은 아니지만 다중 라인스트링(multilinestring)에서도 비슷한 

문제가 발생한 적이 있어서 그것과 비슷하게 접근해보려고 했다. 

(다중 라인스트링에서 멀티 라벨링 해결방법은 나중에 시간이 되면 정리해보겠다..)

feature에서 지오메트리를 뜯어보니 아래와 같았다.

 

 

 

지오메트리의 endss_ 개수가 13개, 지오메트리의 폴리곤의 개수가 13개였다.

 

실제 표출되는 라벨의 개수 13개와 동일하였다. 그래서 여기가 문제라는 생각이 들었다.

실제 다중 라인스트링에서는 저기 있는 endss_와 simplifiedGeometryCache의 캐시값을 수정하여 해결하였었다.

(나중에 보니, 라벨을 하나만 생성되는데, 라인이 망가져 필요 없는 라인이 생기는 문제가 발생..)

 

하지만 멀티폴리곤은 그렇게 해도 해결이 안되어서 구글링을 해본 결과, 지오메트리를 수정해야 한다는 사실을 알았다.

 

우선 13개의 폴리곤 중 가장 큰 면적을 가진 폴리곤을 구하는 함수를 사용하였다.

 

 

문제해결

 

getMaxPoly 메서드

function getMaxPoly(polys) {
      var polyObj = [];
      //now need to find which one is the greater and so label only this
      for (var b = 0; b < polys.length; b++) {
        polyObj.push({ poly: polys[b], area: polys[b].getArea() });
      }
      polyObj.sort(function (a, b) { return a.area - b.area });

      return polyObj[polyObj.length - 1].poly;
 }

 

 

getMaxPoly 메서드를 통해 구한 면적이 가장 큰 폴리곤을 지오메트리에 set해줌

feature.setGeometry(getMaxPoly(feature.getGeometry().getPolygons()));

 

이렇게 하고 다시 해당 feature의 Geometry를 보면..

 

 

 

 

이런식으로 endss_에서 ends_로 바뀌면서 여러개의 배열이 아닌, 한개의 배열값만 갖게 된다.

 

이 상태로 라벨을 표출해보면 정상적으로 하나의 라벨만 표출된다.

 

결과화면

 

 

 

저번에 해결한 다중 라인스트링도 그렇고 이번에 한 멀티폴리곤도 그렇고 결국에는

저 feature.getGeometry()에 있는 ends_에 맞춰 라벨을 생성하는 것 같다. ( 내 생각 )

 

feature.getGeometry().getPolygons의 개수만큼 라벨을 생성하는 것 같다.

 

만약 이상하게 라벨이 여러개 생성된다고 한다면 feature.getGeometry().getPolygons를 먼저 보면 좋을 것 같다.

 

 

 

참조링크

 

How to show one label per multi-polygon in open layers 3?

I'm having an issue trying to figure out how to show one label per multipolygon in OL3. It currently shows the label for every polygon which is not ideal under any circumstance in this particular

stackoverflow.com

 

 

 

 

728x90
반응형