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 이 폴리곤을 기준으로 나머지가 음영처리가 되는데요
hole을 사용해서 이 내부에 추가적인 폴리곤을 그리는 것까지는 이해가 됩니다.
그런데 ```
createDimScreenShape에서 여러개의 영역을 처리가 가능한지가 궁금합니다.
영역의 좌표가 여러개를 가질 경우 그 영역마다 그 내부를 제외한 나머지 영역을 dim처리가 가능할까요?
hole을 이용한다면, 이것은 전체 대한민국 영역에서 hole을 처리해서 특정 부분 내만 dim 처리를 뺄 수 있는 방법이 있다는 건데
이 방식이 아닌, firstPointException과 secondPointExcepiton 두 개 혹은 그 이상의 폴리곤이 같이 올라갈 수 있을까요?
첫번째가 예시로 서울이라면 두번째는 여수 이런식으로 여러개의 멀티 폴리곤이 있다면 두 개의 영역을 제외한 나머지 영역이 음영처리되는것이 가능한지 궁금합니다.
예시는 첨부한 사진처럼 파란색 영역 외 나머지를 dim 처리할 수 있는 방법을 어떤식으로 구성을 할 수 있을까요?