์๋
ํ์ธ์ Foma ์
๋๋ค!
์ ๋ฒ ์๊ฐ์๋ ์ํ๋ ์์น๋ฅผ ํ์ํ๊ณ ์ด๋ฏธ์ง์ ๋ ์ด๋ธ์ ๋ฃ์ด๋ณด์๋๋ฐ์.
(ํน์ ์๋ณด์ ๋ถ๋ค์ ์ฌ๊ธฐ ๋ฅผ ํตํด์ ๋ณด๊ณ ์์ฃผ์ธ์!)
์ด๋ฒ ์๊ฐ์๋ ์ํ๋ ์์น๊ฐ ํน์ ๋ฒ์ ์์ ์ํด์๋์ง ์๋์ง ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
MKMapViewDelegate ์ถ๊ฐํ๊ธฐ
๊ฐ์ฅ ๋จผ์ ViewController์ MKMapViewDelegate๋ฅผ ์ฑํํด์ฃผ์ธ์. (๋น์ฐํ import MapKit๋ ํด์ผ๊ฒ ์ฃ ?)
class ViewController: UIViewController ,MKMapViewDelegate{...}
๋ง์ปค ์ค์ ํ๊ธฐ
์ํ๋ ์์น์ ํ์ํ ๋ง์ปค๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์.
์ ๋ฒ ์๊ฐ์๋ ํ๋์ ๊ตฌ์ญ๋ง ํ์ง๋ง ํ๋์ ๊ตฌ์ญ ๊ทผ์ฒ์ธ ์คํ๋ฒ ์ค๊น์ง ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
let mark1 = Marker(
title: "ํ๋์
๊ตฌ์ญ",
subtitle: "์ฌ๋์ด ๋๋ฌด ๋ง์์..ใ
",
coordinate: CLLocationCoordinate2D(latitude: 37.55769, longitude: 126.92450))
mapView.addAnnotation(mark1)
let mark2 = Marker(
title: "ํ๋์
๊ตฌ์ญ์คํ๋ฒ
์ค",
subtitle: "์ปคํผ ๋ง์๋ค",
coordinate: CLLocationCoordinate2D(latitude: 37.557123, longitude: 126.923588))
mapView.addAnnotation(mark2)
๋ฒ์ ๊ทธ๋ ค์ฃผ๊ธฐ
๋ง์ปค์ ์์น๋ฅผ ํ์ธํ ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ์๊ณ ๊ทธ ์๋์ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํด์ค๋๋ค.
๋จผ์ CLLocationCoordinate2DMake ๋ก ๋ฒ์๋ฅผ ๋ง๋ค ์์น์ ์ค์์ ์ขํ๊ฐ์ ์ ๋ ฅํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณค ๋ฒ์๊ฐ์ ์ ํด์ฃผ๋๋ฐ ์ด๊ฒ์ meter๊ธฐ์ค์ด๋ผ์ 100.0์ ์ ๋ ฅํด์ฃผ์๋ฉด ๊ทผ๋ฐฉ 100m ๋ฒ์๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด๋ ๊ฒ ๋ฒ์๋ ์ธํ ํด์ฃผ์๋ค๋ฉด ํ๋์ ๊ตฌ์ญ ์ค์์ผ๋ก๋ถํฐ ๋ฒ์๋ฅผ ๋ง๋ค์ด์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด CLCircularRegion ์ผ๋ก ์ค์์ ๊ฒฝ๋์ ์๋๊ฐ ๋ฒ์ ์์ด๋ดํฐํผ์ด๋ฅผ ์จ์ค๋๋ค.
๊ทธ ๋ค์์ผ๋ก ์๋ชจ์์ ๋ง๋ค์ด์ mapView์ Overlay๋ฅผ ์ถ๊ฐํด์ฃผ์ธ์!
func detectMarkerLocation() {
let ํ๋์
๊ตฌ์ญ์ค์ = CLLocationCoordinate2DMake(37.55769, 126.92450)
let ๋ฒ์ = 100.0 //100meter๋ฅผ ๋ปํจ
let ํ๋์
๊ตฌ์ญ๋ฒ์ = CLCircularRegion(center: CLLocationCoordinate2D(latitude: ํ๋์
๊ตฌ์ญ์ค์.latitude,
longitude: ํ๋์
๊ตฌ์ญ์ค์.longitude), radius: ๋ฒ์, identifier: "ํ๋์
๊ตฌ์ญ")
let ์๋ชจ์ = MKCircle(center: ํ๋์
๊ตฌ์ญ์ค์, radius: ๋ฒ์)
mapView.addOverlay(์๋ชจ์)
...
}
์ด์ ์ถ๊ฐํด์ค ์๋ชจ์ ์ค๋ฒ๋ ์ด๋ฅผ ๊ทธ๋ ค์ค์ผ๊ฒ ์ฃ ?
์๋์ ๊ฐ์ด MKCircleRenderer ์ ๋ง๋ค์ด์ฃผ์๊ณ
์์ ๊ฐ์ฅ์๋ฆฌ ์๊น,์์ ์ฑ์ธ์๊น,๊ฐ์ฅ์๋ฆฌ์ ๋๊ป๋ฅผ ์ค์ ํด์ค๋๋ค.
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
let circleRenderer = MKCircleRenderer(overlay: overlay)
circleRenderer.strokeColor = .red
circleRenderer.fillColor = UIColor.yellow.withAlphaComponent(0.3)
circleRenderer.lineWidth = 1.0
return circleRenderer
}
์ด๋ ๊ฒ ํ๊ณ ์คํ์์ผ๋ณด๋ฉด ์๋์ ๊ฐ์ด ํ๋์ ๊ตฌ์ญ ๊ทผ๋ฐฉ 100m์ ๋ฒ์๊ฐ ์๊ธฐ๊ฒ ๋ฉ๋๋ค.
์์ ์ํด์๋์ง ํ์ธํ๊ธฐ
์ด์ ๋ฒ์๋ ๊ทธ๋ ค์คฌ์ผ๋ ํ๋์ ๊ตฌ์ญ ์คํ๋ฒ ์ค๊ฐ ํฌํจ๋์ด์๋์ง ํ์ธํด์ผ๊ฒ ์ฃ ?
detectMarkerLoaction ํจ์์ ์๋์ ๊ฐ์ด ์ถ๊ฐํด์ค๋๋ค.
mapView์์ ์ถ๊ฐํด์ค marker๋ค์ for๋ฌธ์ผ๋ก ํ์ํด ํด๋น ์์น๊ฐ ํ๋์ ๊ตฌ์ญ๋ฒ์์ ํฌํจ๋๋์ง ํ์ธํฉ๋๋ค.
for marker in mapView.annotations{
if ํ๋์
๊ตฌ์ญ๋ฒ์.contains(marker.coordinate) {
print("\(String(describing: marker.title))์ ํ๋์
๊ตฌ์ญ ๋ฒ์์ ํฌํจ๋์์ต๋๋ค.")
}else{
print("\(String(describing: marker.title))์ ํ๋์
๊ตฌ์ญ ๋ฒ์์ ํฌํจ๋์ง์์ต๋๋ค.")
}
์ถ๋ ฅ๋ ๊ฒ์ ๋ณด๋ ์์ฌ์์ฌํ๊ฒ ์คํ๋ฒ ์ค๊ฐ ํฌํจ๋์ง ์์๋๋ณด๋ค์.
๋ฒ์๋ฅผ ์กฐ๊ธ ๋๋ ค์ค๋๋ค.
let ๋ฒ์ = 200.0
์ด๋ ๊ฒ ํ๋ฉด ํ์คํ ๋ฒ์๋ ์ปค์ก๊ณ ์คํ๋ฒ ์ค๊ฐ ์์ ํฌํจ๋์ด ์์ฃ ?
์ถ๋ ฅํด๋ณด๋ฉด ์๋์ ๊ฐ์ด ์คํ๋ฒ ์ค๊ฐ ํฌํจ๋์ด ์๋ค๊ณ ๋์ค๋๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
์ค๋์ ์ด๋ ๊ฒ ์ํ๋ ์์น์ ๋ฒ์๋ฅผ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ํน์ ์์น๊ฐ ์ํด์๋์ง ํ์ธํด๋ณด์์ต๋๋ค.
ํน์๋ผ๋ ๊ถ๊ธํ์ ์ ์ด ์๊ฑฐ๋ ์ง์ ํ์ค ๋ถ๋ถ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์!
๋๊ธ