getShapeManager로 그린 폴리곤에서
폴리곤 내부의 특정영역에 A라는 poi를 그리고
또 다른 B라는 poi를 폴리곤 외부에 그렸을 때
B라는 poi가 폴리곤 외부에 있는지 비교가 가능한가요?
폴리곤 내부 외부를 poi의 radius로 구별을 해야 하는지요?
폴리곤의 영역을 가지고 poi가 내부에 있는지 외부에 있는지 비교해보고 싶어요
예를 들어 dim내부에 poi를 그리고
dim 외부에 poi를 그렸을 때 dim내부에 poi 객체가 존재한다
dim 외부에 poi를 그렸을 때 poi 객체가 존재하는지? 이것을 알고 싶어요
예를 들어 서울영역의 폴리곤이 있고 그 내부에 poi가 있으면 true 처리할 수 있거나
강원도에 poi가 있다면 false 처리할 수 있는 로직을 구현해보고 싶은데
radius로만 구현이 가능한지, 폴리곤과 poi의 위치를 통해 비교가 가능한지 궁금합니다.
//
// SimpleMapPolygonShape.swift
// KakaoMapOpenApi-Sample
//
// Created by narr on 2021/01/04.
// Copyright © 2021 kakao. All rights reserved.
//
import Foundation
import UIKit
import KakaoMapsSDK
class SimpleMapPolygonShapeSample: APISampleBaseViewController {
override func addViews() {
let defaultPosition: MapPoint = MapPoint(longitude: 126.978365, latitude: 37.566691)
let mapviewInfo: MapviewInfo = MapviewInfo(viewName: "mapview", viewInfoName: "map", defaultPosition: defaultPosition)
mapController?.addView(mapviewInfo)
}
override func viewInit(viewName: String) {
print("OK")
createPolygonStyleSet()
createMapPolygonShape()
createDimPolygonSet()
createDimScreenShape()
}
// MapPolygonShape에 적용할 styleSet을 생성한다.
// styleSet은 하나 이상의 style 집합으로 이루어지고, style은 레벨별로 구성할 수 있다.
// styleSet에 추가한 각각의 style은 인덱싱으로 적용할 수 있다.
func createPolygonStyleSet() {
let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
let manager = mapView.getShapeManager()
let levelStyle1 = PerLevelPolygonStyle(color: UIColor(red: 0.7, green: 0.7, blue: 0.7, alpha: 0.9), strokeWidth: 2, strokeColor: UIColor.red, level: 0)
let levelStyle2 = PerLevelPolygonStyle(color: UIColor(red: 0.7, green: 0.0, blue: 0.0, alpha: 0.5), strokeWidth: 2, strokeColor: UIColor.red, level: 15)
let polygonStyle = PolygonStyle(styles: [levelStyle1, levelStyle2])
let styleSet = PolygonStyleSet(styleSetID: "ShapeStyle", styles: [polygonStyle])
manager.addPolygonStyleSet(styleSet)
}
func createMapPolygonShape() {
let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
let manager = mapView.getShapeManager()
// shapeLayer 생성
let layer = manager.addShapeLayer(layerID: "shape", zOrder: 10001)
// MapPolygonShape를 생성하기 위한 MapPolygonShapeOptions 생성
let options = MapPolygonShapeOptions(shapeID: "mapPolygonShape", styleID: "ShapeStyle", zOrder: 1)
// MapPolygonShape를 구성하는 MapPolygon은 위경도 좌표계로 이루어진다.
let polygon = MapPolygon(exteriorRing: [
MapPoint(longitude: 127.10656, latitude: 37.40303),
MapPoint(longitude: 127.10655, latitude: 37.40301),
MapPoint(longitude: 127.10660, latitude: 37.40247),
MapPoint(longitude: 127.10938, latitude: 37.40249),
MapPoint(longitude: 127.10946, latitude: 37.40253),
MapPoint(longitude: 127.10945, latitude: 37.40298)
], hole: nil, styleIndex: 0)
options.polygons.append(polygon)
let shape = layer?.addMapPolygonShape(options)
shape?.show()
let cameraUpdate = CameraUpdate.make(area: AreaRect(points: polygon.exteriorRing))
mapView.moveCamera(cameraUpdate)
}
func createDimPolygonSet() {
let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
mapView.dimScreen.isEnabled = true
let dimScreen: DimScreen = mapView.dimScreen
let shapeStyle = PolygonStyle(styles: [
//0~15까지 줌레벨별 폴리곤 스타일을 지정한다.
PerLevelPolygonStyle(color: UIColor(red: 0, green: 0, blue: 0, alpha: 0), strokeWidth: 3, strokeColor: UIColor.red, level: 0),
PerLevelPolygonStyle(color: UIColor(red: 0, green: 0, blue: 0, alpha: 0), strokeWidth: 3, strokeColor: UIColor.red, level: 15)
])
let shapeStyleSet = PolygonStyleSet(styleSetID: "shapeLevelStyle", styles: [shapeStyle]) // styleSetId 는 내가 만들 id를 지정하는 것이고, styles는 shapesytle 객체를 넣어준다는 것이다.
dimScreen.addPolygonStyleSet(shapeStyleSet)
}
func createDimScreenShape() {
let mapView: KakaoMap = mapController?.getView("mapview") as! KakaoMap
let dimScreen: DimScreen = mapView.dimScreen
let viewSize = mapView.viewRect.size
let options = MapPolygonShapeOptions(shapeID: "shape1", styleID: "shapeLevelStyle", zOrder: 1)
let dimPolygon = [
MapPoint(longitude: 127.10656, latitude: 37.40303),
MapPoint(longitude: 127.10655, latitude: 37.40301),
MapPoint(longitude: 127.10660, latitude: 37.40247),
MapPoint(longitude: 127.10938, latitude: 37.40249),
MapPoint(longitude: 127.10946, latitude: 37.40253),
MapPoint(longitude: 127.10945, latitude: 37.40298)
]
let dim = MapPolygon(exteriorRing: dimPolygon, hole: nil, styleIndex: 0)
options.polygons.append(dim)
let shape = dimScreen.addHighlightMapPolygonShape(options)
shape?.show()
}
}