1. 程式人生 > >Swift之高德地圖的呼叫

Swift之高德地圖的呼叫

運用swift開發已有半年之久,最近閒來沒事。學習了一點地圖的知識,現在來與大家分享。直接上程式碼吧!

 《一》高德地圖搜尋功能

控制器

//

//  ViewController.swift

//  AmapSeach

//

//  Created by yanfa-fengchuang on 16/8/15.

//  Copyright © 2016 yanfa-fengchuang. All rights reserved.

//

import UIKit

class ViewController: UIViewController,AMapSearchDelegate,AMapLocationManagerDelegate

,UITableViewDelegate,UITableViewDataSource{

var search:AMapSearchAPI!

let locationManager = AMapLocationManager()

var currentCity:String!

var currentCityBtn:UIButton!

var searchTF:UITextField!

var location:CLLocation!

var cancleBtn:UIButton!

var CirtyArray:NSArray!

var addressTableview:UITableView

!

var number:String!

var poi :AMapPOI?

var dataArray:NSMutableArray!

var keyWord:String!

var citiTableview:UITableView!

override func viewDidLoad() {

super.viewDidLoad()

self.view.backgroundColor = UIColor.colorWithHex("#F6F6F6")!

self.dataArray = NSMutableArray()

//MARK:單次定位獲取當前城市

        setHeardview()

        setOnceLocation()

        CirtyArray = ["江陰市","新沂市","邳州市","溧陽市","金壇市","常熟市","張家港市","崑山市","吳江市","太倉市","啟東市","如皋市","通州市","海門市","東臺市","大豐市","儀徵市","高郵市","江都市","丹陽市","揚中市","句容市","興化市","靖江市","泰興市","姜堰市"]

self.number = "0"

        setTableview()

        setCityTableview()

        search = AMapSearchAPI()

        search.delegate = self

    }

//MARK:自定義一個假的導航條

func setHeardview(){

//MARK:最底下的view

let heardview = UIView()

        heardview.frame = CGRectMake(0, 0, self.view.frame.size.width, 64)

        heardview.layer.borderWidth = 1

        heardview.layer.borderColor = UIColor.colorWithHex("#E0E0E0")!.CGColor

self.view.addSubview(heardview)

//MARK:選擇城市的按鈕

self.currentCityBtn = UIButton()

self.currentCityBtn.setTitle("北京市", forState: .Normal)

self.currentCityBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

self.currentCityBtn.titleLabel?.font = UIFont.systemFontOfSize(15)

self.currentCityBtn.frame = CGRectMake(5, 25, 60, 30)

self.currentCityBtn.addTarget(self, action: #selector(ViewController.currentCityBtnAction), forControlEvents: .TouchUpInside)

        heardview.addSubview(currentCityBtn)

//MARK:豎線

let label = UILabel()

        label.frame = CGRectMake(75, 25, 1, 30)

        label.backgroundColor = UIColor.colorWithHex("#E0E0E0")!

        heardview.addSubview(label)

//MARK: 搜尋框

self.searchTF = UITextField()

self.searchTF.frame = CGRectMake(85, 25, 180, 30)

self.searchTF.placeholder = "您要去哪"

self.searchTF.font = UIFont.systemFontOfSize(15)

        heardview.addSubview(self.searchTF)

        NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.beginSearch), name: UITextFieldTextDidChangeNotification, object: nil)

//MARK:取消按鈕

self.cancleBtn = UIButton()

self.cancleBtn.setTitle("取消", forState: .Normal)

self.cancleBtn.setTitleColor(UIColor.blackColor(), forState: .Normal)

self.cancleBtn.titleLabel?.font = UIFont.systemFontOfSize(15)

self.cancleBtn.frame = CGRectMake(270, 25, 40, 30)

        heardview.addSubview(cancleBtn)

    }

//MARK:城市的tableview

func setCityTableview(){

self.citiTableview = UITableView()

self.citiTableview.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.frame.size.height-64)

self.citiTableview.delegate = self

self.citiTableview.dataSource = self

self.citiTableview.tableFooterView = UIView(frame:CGRectZero)

self.view.addSubview(self.citiTableview)

self.citiTableview.hidden = true

//        self.citiTableview.registerClass(UITableViewCell.self, forCellReuseIdentifier: "CELLID")

    }

//MARK:地點的tableview

func setTableview(){

self.addressTableview = UITableView()

self.addressTableview.frame = CGRectMake(0, 64, self.view.bounds.size.width, self.view.frame.size.height-64)

self.addressTableview.delegate = self

self.addressTableview.dataSource = self

self.addressTableview.tableFooterView = UIView(frame:CGRectZero)

self.view.addSubview(self.addressTableview)

self.addressTableview.hidden = true

    }

//MARK:當前城市按鈕的點選事件

func currentCityBtnAction(){

self.number = "1"

self.addressTableview.hidden = true

self.citiTableview.hidden = false

self.citiTableview.reloadData()

    }

//*****************************************************   獲取當前城市    ***********************************************

//MARK:單次定位獲取當前城市

func setOnceLocation(){

//精度

self.locationManager.desiredAccuracy = 100

//   定位超時時間,最低2s,此處設定為11s

self.locationManager.locationTimeout = 11

//   逆地理請求超時時間,最低2s,此處設定為12s

self.locationManager.reGeocodeTimeout = 12

self.locationManager.delegate = self

self.locationManager.requestLocationWithReGeocode(true) { (location, regeocode, error) in

if (error == nil){

self.currentCityBtn.setTitle(regeocode.city, forState: .Normal)

self.location = location

self.keyWord = regeocode.city

                print(location.coordinate.longitude ?? 0.00)

                print(location.coordinate.latitude ?? 0.00)

//MARK:根據關鍵詞搜尋周邊地理位置資訊

self.setSearch()

            }

        }

    }

//MARK:根據關鍵詞搜尋周邊地理位置資訊

func setSearch(){

let request = AMapPOIAroundSearchRequest()

        request.location = AMapGeoPoint.locationWithLatitude(CGFloat(self.location.coordinate.latitude), longitude: CGFloat(self.location.coordinate.longitude))

        request.keywords = self.keyWord

        request.sortrule = 0

        request.requireExtension = true

        search.AMapPOIAroundSearch(request)

    }

//MARK: 返回周邊位置資訊(地點,經度,維度,附近一些商家的名字)

func onPOISearchDone(request: AMapPOISearchBaseRequest!, response: AMapPOISearchResponse!) {

if response.pois.count == 0 {

return

        }

for p:AMapPOIin response.pois {

self.dataArray.addObject(p)

        }

self.addressTableview.hidden = false

self.addressTableview.reloadData()

self.addressTableview.registerClass(PointCell.self, forCellReuseIdentifier: "CELL")

    }

//************************************   tableview   的代理方法   ************************************

//MARK:tableview 的代理方法

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

if self.number != "0" {

returnself.CirtyArray.count

        }else{

returnself.dataArray.count

        }

    }

//MARK:tableview所顯示的內容

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

if self.number != "0" {

let identifier="identtifier";

var cell=tableView.dequeueReusableCellWithIdentifier(identifier);

if(cell == nil){

                cell=UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: identifier);

            }

            cell?.textLabel?.text = self.CirtyArray[indexPath.row] as? String

self.dataArray = NSMutableArray()

return cell!

        }else{

let cell:PointCell = (tableView.dequeueReusableCellWithIdentifier("CELL") as? PointCell)!

            cell.poi = self.dataArray[indexPath.row] as? AMapPOI

return cell

        }

    }

//MARK:CELL的點選事件

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

if self.number != "0" {

self.number = "0"

self.currentCityBtn.setTitle(self.CirtyArray[indexPath.row] as? String, forState: .Normal)

self.citiTableview.hidden = true

self.searchTF.text = currentCityBtn.titleLabel?.text

           beginSearch()

//            self.addressTableview.reloadData()

        }else{

self.searchTF.text = ((self.dataArray[indexPath.row] as? AMapPOI)!).name

            print(((self.dataArray[indexPath.row] as? AMapPOI)!).location)

        }

    }

//MARK: Cell 返回的高度

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

if self.number != "0" {

return44

        }else{

return55

        }

    }

//****************************************************   根據輸入的關鍵字搜尋   *****************************

//MARK: 開始搜尋

func beginSearch() {

self.dataArray.removeAllObjects()

let keywordsRequest = AMapPOIKeywordsSearchRequest()

        keywordsRequest.keywords = searchTF.text!

        keywordsRequest.city = currentCityBtn.titleLabel?.text

        keywordsRequest.requireExtension = true

        print(searchTF.text!)

        search.AMapPOIKeywordsSearch(keywordsRequest)

    }

}

自定義cell

//

//  PointCell.swift

//  AmapSeach

//

//  Created by yanfa-fengchuang on 16/8/16.

//  Copyright © 2016 yanfa-fengchuang. All rights reserved.

//

import UIKit

class PointCell: UITableViewCell {

var pointLabel: UILabel!

var addressLabel: UILabel!

var poi :AMapPOI?{

didSet{

pointLabel.text = poi?.name

addressLabel.text = poi?.address

        }

    }

overrideinit(style: UITableViewCellStyle, reuseIdentifier: String?) {

super.init(style: style, reuseIdentifier: reuseIdentifier)

install()

    }

func  install(){

self.pointLabel = UILabel()

self.pointLabel.frame = CGRectMake(10, 2.5, screenWidth, 25)

self.pointLabel.font = UIFont.systemFontOfSize(16)

self.pointLabel.textColor = UIColor.blackColor()

self.addSubview(self.pointLabel)

self.addressLabel = UILabel()

self.addressLabel.frame = CGRectMake(10, 25, screenWidth, 25)

self.addressLabel.font = UIFont.systemFontOfSize(14)

self.addressLabel.textColor = UIColor.orangeColor()

self.addSubview(self.addressLabel)

    }

requiredinit?(coder aDecoder: NSCoder) {

fatalError("init(coder:) has not been implemented")

    }

}

《二》高德地圖地圖幾個簡單的功能

//

//  ViewController.swift

//  CustomPin

//

//  Created by yanfa-fengchuang on 16/8/15.

//  Copyright © 2016 yanfa-fengchuang. All rights reserved.

//

/// 注意再使用地圖的時候一定要開啟定位服務不然你根本就不能顯示你當前的位置所以一定要在plist檔案裡面新增NSLocationAlwaysUsageDescription    請允許獲取位置資訊)允許定位的功能

import UIKit

let screenHight = UIScreen.mainScreen().bounds.size.height

let screenWidth = UIScreen.mainScreen().bounds.size.width

class ViewController: UIViewController,MAMapViewDelegate {

var mapView: MAMapView!

var location: CLLocationCoordinate2D!

overridefunc viewDidLoad() {

super.viewDidLoad()

//*****************************************************

//地圖簡單的一些屬性

initMapView()

//*****************************************************

//進入地圖顯示給定的位置

//showCustomPoint()

    }

//**************************************************************************

//MARK: 設定地圖

func initMapView() {

mapView = MAMapView(frame: self.view.bounds)

mapView.delegate = self

//MARK:是否顯示羅盤

mapView.showsCompass = false

//MARK:是否顯示比例尺

mapView.showsScale = false

//MARK:是否顯示使用者位置(小圓點)

mapView.showsUserLocation = true

//MARK:是否顯示使用者位置(小圓點跟隨使用者的位置而移動)

mapView.userTrackingMode = MAUserTrackingMode.Follow

//MARK:地圖精度(就是地圖的放大級別)

mapView.setZoomLevel(15, animated: true)

view.insertSubview(mapView, atIndex: 0)

let backlocationBtn = UIButton()

        backlocationBtn.frame = CGRectMake(20, screenHight-60, 40, 30)

        backlocationBtn.backgroundColor = UIColor.orangeColor()

mapView.addSubview(backlocationBtn)

        backlocationBtn.addTarget(self, action: #selector(ViewController.backBtnaction), forControlEvents: .TouchUpInside)

    }

//MARK: 一鍵返回使用者當前位置按鈕的點選事件

func backBtnaction(){

//MARK:是否顯示使用者位置(小圓點跟隨使用者的位置而移動)

UIView.animateWithDuration(0.5, animations: { () -> Voidin

self.mapView.userTrackingMode = MAUserTrackingMode.Follow

        }) { (finished) -> Voidin

        }

    }

//************************* 給定一個座標使進入地圖的時候就顯示這個點****************************

//MARK: 進入地圖顯示給定的地點的位置利用系統自帶的大頭針給新增進去並且顯示標註

func showCustomPoint(){

mapView = MAMapView(frame: self.view.bounds)

mapView.delegate = self

//MARK:地圖精度(就是地圖的放大級別)

mapView.setZoomLevel(15, animated: true)

view.insertSubview(mapView, atIndex: 0)

location = CLLocationCoordinate2D.init(latitude: 31.329674, longitude: 120.610733)

self.mapView.centerCoordinate = location

let pointAnnotation = MAPointAnnotation()//這個是標註不是大頭針

        pointAnnotation.coordinate = location

        pointAnnotation.title = "蘇州站"

        pointAnnotation.subtitle = "蘇州火車站1號出口"

mapView.addAnnotation(pointAnnotation)

mapView.selectAnnotation(pointAnnotation, animated: true)

    }

//    //如果沒有這一句的話就不會顯示標註

//    func mapView(mapView: MAMapView!, viewForAnnotation annotation: MAAnnotation!) -> MAAnnotationView! {

//            let pointReuseIndetifier = "pointReuseIndetifier"

//            var  annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(pointReuseIndetifier)

//            if annotationView == nil {

//                annotationView = MAPinAnnotationView.init(annotation: annotation, reuseIdentifier: pointReuseIndetifier)

//            }

//            annotationView.canShowCallout = true       //設定氣泡可以彈出,預設為NO

//            annotationView.draggable = true      //設定標註可以拖動,預設為NO

//            return annotationView;

//    }

}




相關推薦

Swift地圖呼叫

運用swift開發已有半年之久,最近閒來沒事。學習了一點地圖的知識,現在來與大家分享。直接上程式碼吧!  《一》高德地圖搜尋功能 控制器 // //  ViewController.swift //  AmapSeach // //  Created by ya

Android Studio地圖實現定位和3D地圖顯示

tor uil track width 博客 5.0 eight ext wid 在應用開發中,地圖開發是常常須要使用的“組件”,國內比較出名的是就是百度地圖和高德地

天氣查詢地圖天氣預報介面

一、html程式碼 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="initial-scale=1

【android學習筆記】activity間的通訊案例地圖實現天氣查詢

【概述】app實現天氣查詢是再正常不過的功能了,又因為往往不止一個activity去獲取資料,那就想到封裝一個類,需要時去呼叫獲取即可。 【注】因為看文件還有點懵,故將自己抓腦寫的程式碼記錄下,以便查詢 【思路】activity傳送請求--獲取地址--根據地址獲取天氣

(自我學習篇地圖)使用與獲取marker的點選事件

獲取之後下載SDK然後倒入libs用什麼導什麼我先簡單說一個2D的實現與獲取marker的點選事件  3d的多了一步   OK就可以使用了   注意許可權 <uses-permission android:name="android.permission

小程式仿朋友圈選擇位置地圖API

說明 因專案需要,該功能類似於微信朋友圈釋出時的選擇位置 思路 可使用第三方地圖服務商的API,根據當前位置查詢POI列表,再展示在小程式的介面上 ##效果: 程式碼實現 1、申請Key,並下載核心SDK 2、設定安全通訊域名

Android地圖定位

最近在寫天氣預報的app,寫完以後會將原始碼開源,今天先寫app中用到的定位問題,現在定位的SDK有很多高德地圖、百度地圖、騰訊地圖等,騰訊地圖沒有用過不予評價,高德地圖和百度地圖對比我覺得從開發平臺的給的demo來說,高德地圖給的demo中的程式碼可讀性更強,

常見的js效果(二)地圖的應用

今天我要說的是關於高德地圖的應用,我問過我周邊的小夥伴,沒有實際操作經驗的小夥伴都告訴我有介面啊,有API啊,很簡單啊,我沒說話;我問他們你們知道怎麼後後臺對接資料嗎,有人居然跟我說不要資料對接。我並沒有其他的意思,我只是想說,如果沒有實操,還是說話謙虛一點會比較好,不然還

iOS程式設計師地圖SDK

高德SDK 最近專案中需要定位客戶位置,要滿足地址搜尋,長按地圖新增,同時大頭針還要能移動的需求,這裡整理下,希望幫助有需要的人 1.新增地圖 // 地圖 _mapView = [[MAMapView alloc] initWithFrame:CGRect

地圖呼叫

# 文章首推 >- [刷網課請點選這裡](https://mp.weixin.qq.com/s/X1T2Qr9s_QxEc58cy7laiQ) >- [刷二級請點選這裡](https://mp.weixin.qq.com/s/ndFRK4lLb-w4WllEPkYDlA) >- [論文查重請點選這

SpringCloud如何在專案中呼叫地圖API

登入高德開放平臺http://lbs.amap.com/,成為開發者,這個過程需要繫結郵箱。 成功後進入控制檯。點選應用管理。並建立新應用。應用名稱都可以自己看著填。 成功後就可以新增key了,當然,也要有名稱等資訊。 ------------------到這裡完成了第

Android呼叫地圖或百度地圖原生app

今天做一個路徑規劃的功能,需要使用到高德地圖,或是百度地圖,然後想著怎樣的實現比較好。剛好也在看前程無憂,它裡面就是點選導航的話會先檢查本機是否安裝了這些地圖app,如果有的話,就直接開啟使用,沒有的話就通過瀏覽器去開啟百度的web地圖進行路徑規劃。 主要的流程是這樣,先判

地圖采坑實踐地圖不顯示(已解決)

alt 顯示 ron tro tar img lan 切換 解法 使用vue做的SPA切換路由地圖第二次顯示不出來 參考: AMap.Map 情景1: 地圖容器為空 情景1: 實例化棧溢出 解法:mouted鉤子中實例化地圖(解決地圖容器為空的問題),destr

地圖開發點標註marker

在地圖上新增標記點是常使用的方法,用它可以將任何你希望或感興趣的點標註在地圖上,同時也可以指定任意的圖示或內容等。Marker就是這樣一個用於在地圖上新增點標記的類。 1. 要有一個地圖物件例項,如下: var mapObj = new AMap.Map('container',

地圖JS開發入門

1.高德地圖JavaScript API引入: 方式1:頁面直接引入 <script type="text/javascript"src="http://webapi.amap.com/maps?v=1.3&key=您申請的key值"></script&g

地圖開發基本控制元件

高德地圖提供了工具條、比例尺、定位、鷹眼、基本圖層切換等常用的控制元件,使用控制元件需要先將外掛的功能引入。 引入方法1:外掛和高德地圖的JavaScript API同時載入   <script src="http://webapi.amap.com/map

java呼叫地圖API開發,線上地圖開發——未完待續

這是目錄 一、引入高德地圖API 二、高德地圖開發 1、定義一個div來存放地圖 2、生成地圖 3、新增一個跳躍的點 4、新增控制元件 5、有其他需要的請留言 一、引入高德地圖API   高德地圖官方示例:https://lbs.amap.c

地圖apilocation定位

關於定位,分為GPS定位和網路定位。本文將詳細描述的瀏覽器定位,屬於網路定位。這是一種通過使用高德JS-API來實現位置定位、城市定位的方法,包含了IP定位,檢索等多種網路定位方式。如果您的手機支援GPS功能,能夠自動獲取GPS資訊,定位將更加準確。 瀏覽器定位 瀏覽器定位外掛,

地圖PlaceSearch.clear()無法呼叫問題

高德地圖JS-API,使用PlaceSearch搜尋地址,在地圖上產生Marker,但是在呼叫PlaceSearch.clear()之後,Marker並沒有被清除。這個問題困擾了我好幾天了。高德官方參考手冊相當簡單: https://lbs.amap.com/api/javascript

iOS unity 互相呼叫載入地圖

需要增加   mapView。delegate = self   這是一種設計模式,有的人稱為代理,有的人稱為委託,比如有A,B兩個控制器,由A可以push到B,B可以pop回A,現在有一種情況,A中有一個label,需要從B中獲取資料,顯示到A的label裡,這時就可以用代理了,在B中寫一個