Ios KakaoMap 에서 Dimscreen 관련 질문

ios 네이티브에서 dimPolygon을 설정할때

// dimScreen에 추가할 PolygonStyleSet을 생성한다.
func createPolygonStyleSet() {
	let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
	let diScreen: DimScreen = mapView.dimScreen
	
   let shapeStyle = PolygonStyle(styles: [
   		PerLevelPolygonStyle(color: UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 0.5), strokeWidth: 2, strokeColor: UIColor.blue, level: 0),
   		PerLevelPolygonStyle(color: UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 0.5), strokeWidth: 2, strokeColor: UIColor.red, level: 15)
   		])
   let shapeStyleSet = PolygonStyleSet(styleSetID: "shapeLevelStyle1", styles: [shapeStyle])
   dimScreen.addPolygonStyleSet(shapeStyleSet)
}
    
// Dimscreen에 특정 영역을 하이라이트 표시하기 위한 PolygonShape을 생성한다.
// PolygonShape의 사용방법은 지도상에 그릴때와 동일하다.
func createDimScreenShape() {
	let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
	let dimScreen: DimScreen = mapView.dimScreen
	    
	// view에 PolygonShape를 추가하는것과 동일한 방법으로 추가한다.
	// 여기서 사용하고자하는 styleSetID는 dimScreen에 미리 추가된 styleSet이다.
	let viewSize = mapView.viewRect.size
	let options = PolygonShapeOptions(shapeID: "shape1", styleID: "shapeLevelStyle1", zOrder: 1)
	options.basePosition = mapView.getPosition(CGPoint(x: viewSize.width/2, y: viewSize.height/2))
	let outter = Polygon(exteriorRing: Primitives.getCirclePoints(radius: 100.0, cw: true), hole: Primitives.getCirclePoints(radius: 80.0, cw: false), styleIndex: 0)
	let mid = Polygon(exteriorRing: Primitives.getCirclePoints(radius: 60.0, cw: true), hole: Primitives.getCirclePoints(radius: 40.0 cw: false), styleIndex: 0)
	let inner = Polygon(exteriorRing: Primitives.getCirclePoints(radius: 20.0, cw: true), hole: nil, styleIndex: 0)
        
	options.polygons.append(outter)
	options.polygons.append(mid)
	options.polygons.append(inner)
   
   // dimScreen에 highlightPolygonShape 추가
	let shape = dimScreen.addHighlightPolygonShape(options)
	shape?.show()
}

예시를 보면 이런식으로 사용을 하고 있는것을 봤는데요,
예를들어 지도에서 폴리곤으로 구현을 한다면 서울 영역과, 광주영역을 dimScreen처리를 한다고 치면 (데이터는 있습니다.)

아래의 예시 데이터라고 가정을 한다면
static var firstPointException: [MapPoint] = [
MapPoint(longitude: 126.996, latitude: 37.533),
MapPoint(longitude: 126.996, latitude: 37.540),
MapPoint(longitude: 127.0, latitude: 37.540),
MapPoint(longitude: 127.0, latitude: 37.533),
MapPoint(longitude: 126.996, latitude: 37.533)
]

static var secondPointExcepiton: [MapPoint] = [
    MapPoint(longitude: 127.107304, latitude: 37.505701),
    MapPoint(longitude: 127.111960, latitude: 37.509735),
    MapPoint(longitude: 127.116295, latitude: 37.507795),
    MapPoint(longitude: 127.112947, latitude: 37.503097),
    MapPoint(longitude: 127.107304, latitude: 37.505701),
]

firstPointException 이 폴리곤을 기준으로 나머지가 음영처리가 되는데요
스크린샷 2024-08-26 오후 2.00.19

hole을 사용해서 이 내부에 추가적인 폴리곤을 그리는 것까지는 이해가 됩니다.

그런데 ```
createDimScreenShape에서 여러개의 영역을 처리가 가능한지가 궁금합니다.
영역의 좌표가 여러개를 가질 경우 그 영역마다 그 내부를 제외한 나머지 영역을 dim처리가 가능할까요?


hole을 이용한다면, 이것은 전체 대한민국 영역에서 hole을 처리해서 특정 부분 내만 dim 처리를 뺄 수 있는 방법이 있다는 건데

이 방식이 아닌,  firstPointException과 secondPointExcepiton 두 개 혹은 그 이상의 폴리곤이 같이 올라갈 수 있을까요?

첫번째가 예시로 서울이라면 두번째는 여수 이런식으로 여러개의 멀티 폴리곤이 있다면 두 개의 영역을 제외한 나머지 영역이 음영처리되는것이 가능한지 궁금합니다.

예시는 첨부한 사진처럼 파란색 영역 외 나머지를 dim 처리할 수 있는 방법을 어떤식으로 구성을 할 수 있을까요?

func createDimScreenShape() {
let mapView: KakaoMap = mapController?.getView(“mapview”) as! KakaoMap
let dimScreen: DimScreen = mapView.dimScreen

    //대전 음영 폴리곤
    let options = MapPolygonShapeOptions(shapeID: "shape1", styleID: "shapeLevelStyle", zOrder: 1)
    
    let dim = MapPolygon(exteriorRing: dimPolygon, hole: nil, styleIndex: 0)
    options.polygons.append(dim)
  

    
    //이런게 생길지 모르겠지만?
    //추가적인 예외 영역이 생긴다고 가정한다면 아래 주석 해제

// let firstExcptionOptions = MapPolygonShapeOptions(shapeID: “firstExceptionShape”, styleID: “innerShapeStyle”, zOrder: 1)
//
// //예외 처리하는 부분
// let firstPointException = ConvertMapPoint.convertToMapPoints(from: ArrayTest.testMultiPolygon)
//
// let firstAdditionalDim = MapPolygon(exteriorRing: firstPointException, hole: nil, styleIndex: 0)
//
// firstExcptionOptions.polygons.append(firstAdditionalDim)
//
// let firstAdditionalShape = dimScreen.addHighlightMapPolygonShape(firstExcptionOptions)
// firstAdditionalShape?.show()
//
let firstExcptionOptions = MapPolygonShapeOptions(shapeID: “firstExceptionShape”, styleID: “innerShapeStyle”, zOrder: 1)

    //예외 처리하는 부분

// let firstPointException = ConvertMapPoint.convertToMapPoints(from: ArrayTest.testMultiPolygon)

    let firstAdditionalDim = MapPolygon(exteriorRing: AdddimPolygon, hole: nil, styleIndex: 0)

    firstExcptionOptions.polygons.append(firstAdditionalDim)

    let firstAdditionalShape = dimScreen.addHighlightMapPolygonShape(firstExcptionOptions)
    firstAdditionalShape?.show()

    
    
    
    //음영지역을 지도에 그린 이후 폴리곤을 추가하려면 음영지역 만드는 dimScreen이 가장 아래에 선언되어야함
    let shape = dimScreen.addHighlightMapPolygonShape(options)
    shape?.show()
    
}

이렇게 하니 그려지는 것 확인했습니다.