マップ上で、フリーハンドで描画したエリア内にあるデータを空間検索したいといった場合、ArcGIS API for JavaScript では Draw クラス を使用して実装することができます。ArcGIS Runtime SDK for iOS には専用のクラスがありませんが、マップ上のタッチイベントを使用してフリーハンド描画機能を実装することができます。
ArcGIS Runtime SDK for iOS では、マップの表示を行う AGSMapView クラスのデリゲートに、マップ上のタッチ操作(タップ、ホールド等)の検知を行う AGSMapViewTouchDelegate があります。この AGSMapViewTouchDelegate を使用してフリーハンド描画機能を作成していきます。
まず、ユーザーがマップ上をホールド(指で長押し)したときに、新規にポリゴンを作成します。ホールドの検知は didTapAndHoldAtPoint メソッドを使用します。
func mapView(mapView: AGSMapView!, didTapAndHoldAtPoint screen: CGPoint, mapPoint mappoint: AGSPoint!, graphics: [NSObject : AnyObject]!) { //マップ上をホールド時に、フリーハンド用のポリゴンを新規に作成する self.agsGraphicsLayer.removeAllGraphics() self.agsPolygon = AGSMutablePolygon(spatialReference: self.agsMapView.spatialReference) //ホールドした地点(ポイント)をポリゴンの頂点に追加する self.agsPolygon.addRingToPolygon() self.agsPolygon.addPointToRing(mappoint) } |
次にホールドした状態で指を動かしたら、その地点にポリゴンの頂点を追加していきます。併せて、描画しているポリゴンの形状が分かるように、グラフィックを作成してマップ上に追加します。指を動かす操作の検知は didMoveTapAndHoldAtPoint メソッドを使用します。
func mapView(mapView: AGSMapView!, didMoveTapAndHoldAtPoint screen: CGPoint, mapPoint mappoint: AGSPoint!, graphics: [NSObject : AnyObject]!) { //マップ上をホールド中に指を動かしたら、動かした地点をポリゴンの頂点として追加する self.agsPolygon.addPointToRing(mappoint) //ポリゴンからグラフィックを作成し、グラフィックス レイヤーに追加する //指を動かしたらグラフィックを再作成する self.agsGraphicsLayer.removeAllGraphics() let myPolygonSymbol = AGSSimpleFillSymbol() myPolygonSymbol.color = UIColor.redColor().colorWithAlphaComponent(0.5) let polygonGraphic = AGSGraphic(geometry: self.agsPolygon, symbol: myPolygonSymbol, attributes: nil) self.agsGraphicsLayer.addGraphic(polygonGraphic) } |
マップ上から指を離したら、ポリゴンの描画を終了するようにします。マップ上から指を離したら didEndTapAndHoldAtPoint メソッドが呼ばれます。ここで、作成したエリア(ポリゴン内)にあるデータを検索する処理等を実装していきます。
func mapView(mapView: AGSMapView!, didEndTapAndHoldAtPoint screen: CGPoint, mapPoint mappoint: AGSPoint!, graphics: [NSObject : AnyObject]!) { //作成したポリゴンをもとに処理を実行する ・・・・ } |
このような流れでフリーハンド描画機能を作成できます。完成版のサンプルを Esri Japan GitHub で公開していますのでお試しください。サンプルでは、描画したポリゴンをもとに AED の設置場所(流山市様のオープンデータを使用)を空間検索しています。
■関連リンク
米国 Esri 社 Web サイト:ArcGIS Runtime SDK for iOS
ESRIジャパン Web サイト:ArcGIS Runtime SDK for iOS