热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

IOS高德地图开发

博客链接:www.goofyy.comblog或者百度搜索goofyy玩了苹果原生地图,觉得IOS8的原生还是差了那么一点点,对比了一下腾讯的SDK和高德的SDK,还是觉得高德更碉些,第三方地图


博客链接:www.goofyy.com/blog

或者百度搜索 goofyy


玩了苹果原生地图,觉得IOS8的原生还是差了那么一点点,对比了一下腾讯的SDK和高德的SDK,还是觉得高德更碉些,第三方地图就先拿高德地图开刀了。

使用高德SDK,首先到高德官网注册一个开发者账号,获取开发者KEY。这些高德LBS开放平台都是有详细教程。小编编就不在这里赘余啦。首先是导入库和开发前简单设置。

高德官网下载高德开发的SDK导入。具体导入的库如下

1.引入地图库&搜索库

左侧目录中选中工程名,在 TARGETS->Build Phases-> Link Binary With Libaries 中点击“+”按钮,在弹出的窗口中点击“Add Other”按钮,选择解压后的 MAMapKit.framework 文件添加到工程中。

搜索库的添加方法同上。

2.引入地图库&搜索库

AMap.bundle资源文件中存储了定位、默认大头针标注视图等图片,可利用这些资源图片进行开发。

左侧目录中选中工程名,在右键菜单中选择Add Files to “工程名”…,从 MAMapKit.framework->Resources 文件夹中选择 AMap.bundle文件,并勾选“Copy items if needed”复选框,单击“Add”按钮,将资源文件添加到工程中。

3.引入系统库

左侧目录中选中工程名,在TARGETS->Build Settings-> Link Binary With Libaries中点击“+”按钮,在弹出的窗口中查找并选择所需的库(见下表),单击“Add”按钮,将库文件添加到工程中。

序号    框架       
1.UIKit.framework        2D、3D、Search
2.Foundation.framework2D、3D、Search
3.CoreGraphics.framework2D、3D、Search
4.QuartzCore.framework2D、3D
5.OpenGLES.framework3D
6.CoreLocation.framework2D、3D
7.CoreTelephony.framework2D、3D、Search
8.SystemConfiguration.framework2D、3D、Search
9.libz.dylib        2D、3D、Search
10.libstdc++6.09.dylib2D、3D、Search
11.Security.framework2D、3D
说明:

2D表示使用2D栅格地图需要的系统文件,3D表示使用3D矢量地图需要的系统文件、Search表示使用搜索库需要的系统文件。



SystemConfiguration.framework、CoreTelephonySecurity.framework、Security.framework 是为了统计app信息使用。

上面的内容来自高德LBS开发平台,(哈哈,都是重复内容,懒得自己写了,不重复造轮子)

建立桥接文件。创建oc的头文件。随便命名,然后左侧目录中选中工程名,在 TARGETS->Build Phases-> Swift Compiler - Code Generation -> Objective-C Briding Header 中输入桥接文件的路径。Command + b建立连接。 success后我们进入下一步小程序

高德地图显示

在Viewcontroller.swift文件里创建地图显示。


import UIKit

let APIKey = "ebcfb60e7224e45b7058a91cfcac023e"

class ViewController: UIViewController ,MAMapViewDelegate {


override func viewDidLoad() {
super.viewDidLoad()

         MAMapServices.sharedServices().apiKey = APIKey

initMapView()

}

func initMapView(){

mapView = MAMapView(frame: UIScreen.mainScreen().bounds)

mapView!.delegate = self

self.view.addSubview(mapView!)


}
这里遵循MAMapViewDelegate的代理协议,配置MAP的APIKEY为我们刚刚在高德官网申请的key,将地图的view加入到当前view,run。success。就可以看到高德地图,高德地图上帮我们自带了比例尺和指南针。是不是好简单。



逆地理编码

所谓逆地理编码就是把经纬度转化为地理位置。

Screen Shot 2015-08-21 at 11.47.10 AM

既然要获取地理的经纬度,那肯定用到定位CLLocation。还记得上一篇IOS原生地图的时候说过,IOS8把地图权限分成了两部分,根据使用情况,在Info.plist里面添加字段。


NSLocationWhenInUseUsageDescription  //用的时候获取位置

NSLocationAlwaysUsageDescription //始终获取用户位置
逆地理编码的基本流程:


(1) 初始化主搜索对象AMapSearchAPI,并继承搜索协议 AMapSearchDelegate 。

(2) 构造 Request 对象,配置搜索参数。

(3) 通过主搜索对象以 Request 对象为参数,发起搜索。

(4) 实现搜索协议中对应的回调函数,通过解析 Response 对象获取搜索结果。
完整代码如下


import UIKit

let APIKey = "8a1383b14466a8dbf362f44357c496c0"

class ViewController: UIViewController ,MAMapViewDelegate, AMapSearchDelegate{

var mapView:MAMapView?
var search:AMapSearchAPI?
var currentLocation:CLLocation?

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

MAMapServices.sharedServices().apiKey = APIKey

initMapView()

initSearch()
}

func initMapView(){

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

mapView!.delegate = self

self.view.addSubview(mapView!)

let compassX = mapView?.compassOrigin.x

let scaleX = mapView?.scaleOrigin.x

//设置指南针和比例尺的位置
mapView?.compassOrigin = CGPointMake(compassX!, 21)

mapView?.scaleOrigin = CGPointMake(scaleX!, 21)

// 开启定位
mapView!.showsUserLocation = true

// 设置跟随定位模式,将定位点设置成地图中心点
mapView!.userTrackingMode = MAUserTrackingModeFollow

}

// 初始化 AMapSearchAPI
func initSearch(){
search = AMapSearchAPI(searchKey: APIKey, delegate: self);
}

// 逆地理编码
func reverseGeocoding(){

let coordinate = currentLocation?.coordinate

// 构造 AMapReGeocodeSearchRequest 对象,配置查询参数(中心点坐标)
let regeo: AMapReGeocodeSearchRequest = AMapReGeocodeSearchRequest()

regeo.location = AMapGeoPoint.locationWithLatitude(CGFloat(coordinate!.latitude), longitude: CGFloat(coordinate!.longitude))

println("regeo :\(regeo)")

// 进行逆地理编码查询
self.search!.AMapReGoecodeSearch(regeo)

}

// 定位回调
func mapView(mapView: MAMapView!, didUpdateUserLocation userLocation: MAUserLocation!, updatingLocation: Bool) {
if updatingLocation {
currentLocation = userLocation.location
}
}

// 点击Annoation回调
func mapView(mapView: MAMapView!, didSelectAnnotationView view: MAAnnotationView!) {
// 若点击的是定位标注,则执行逆地理编码
if view.annotation.isKindOfClass(MAUserLocation){
reverseGeocoding()
}
}

// 逆地理编码回调
func onReGeocodeSearchDone(request: AMapReGeocodeSearchRequest!, response: AMapReGeocodeSearchResponse!) {
println("request :\(request)")
println("response :\(response)")

if (response.regeocode != nil) {

var title = response.regeocode.addressComponent.city

var length: Int{
return countElements(title)
}

if (length == 0){
title = response.regeocode.addressComponent.province
}
//给定位标注的title和subtitle赋值,在气泡中显示定位点的地址信息
mapView?.userLocation.title = title
mapView?.userLocation.subtitle = response.regeocode.formattedAddress
}

}
}

到了这里一个高德SDK简单应用就完成了,下一篇。获取附近的兴趣点。


博客链接:www.goofyy.com/blog

或者百度搜索 goofyy




推荐阅读
  • IOS开发之百度地图API环境搭建 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • iOS 百度地图开发集成使用 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • CentOS7.8下编译muduo库找不到Boost库报错的解决方法
    本文介绍了在CentOS7.8下编译muduo库时出现找不到Boost库报错的问题,并提供了解决方法。文章详细介绍了从Github上下载muduo和muduo-tutorial源代码的步骤,并指导如何编译muduo库。最后,作者提供了陈硕老师的Github链接和muduo库的简介。 ... [详细]
  • ShiftLeft:将静态防护与运行时防护结合的持续性安全防护解决方案
    ShiftLeft公司是一家致力于将应用的静态防护和运行时防护与应用开发自动化工作流相结合以提升软件开发生命周期中的安全性的公司。传统的安全防护方式存在误报率高、人工成本高、耗时长等问题,而ShiftLeft提供的持续性安全防护解决方案能够解决这些问题。通过将下一代静态代码分析与应用开发自动化工作流中涉及的安全工具相结合,ShiftLeft帮助企业实现DevSecOps的安全部分,提供高效、准确的安全能力。 ... [详细]
  • iOS开启Google位置服务器和显示定位权限的方法
    本文介绍了在iOS开发中如何开启Google位置服务器和显示定位权限的方法,包括导入CoreLocation和MapKit库、在界面导入头文件和在info.plist文件中添加授权等步骤。同时还介绍了iOS11中NSLocationAlwaysAndWhenInUseUsageDescription的功能变化。阅读本文可以帮助开发者了解如何在iOS应用中使用Google位置服务器和处理定位权限相关的问题。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
  • SLAM优秀开源工程最全汇总
    https:zhuanlan.zhihu.comp145750808 1、CartographerCartographer是一个系统,可跨多个平台和传感器配置以2D和3D形式提供实 ... [详细]
  • 高德IOS真机调试LMAMapKit出错问题的解决方法(directory not found for option)
    1最近项目到了收尾阶段,所以开始了在真机部署调试,之前的模拟器环境下测试项目,一切都没问题,今天真机调试过程中, ... [详细]
  • MRMapViewController.mCoreLocation&MapKitCreatedbyMr.Roboton201786. ... [详细]
  • iPhoneSDK提供了三个类来管理位置信息:CLLocationCLLocationManager和CLLHeading(不常用)。除了使用GPS来获取当前的位置信息外,iPho ... [详细]
  • 微软小娜企业版发布新版本,提供构建自定义技能的套件
    微软将向企业级市场发布微软小娜企业版的新版本,该版本提供了构建自定义技能的套件,使企业员工可以更方便地使用数字助理。目前该套件仍处于内测期间,只有部分企业可以获得,其他有兴趣的企业需要继续等待。新版本的套件可以帮助员工构建各种自定义技能,如检查休假余额、创建服务凭证等。微软通过让多个开发人员编辑和管理机器人通道注册配置来改善开发者的体验,团队可以自行访问和更改技能注册,满足企业实际需求。微软小娜企业版已经在各个行业得到采用,能够帮助员工专注于优先事项,将非优先处理的任务交给微软小娜处理。 ... [详细]
author-avatar
俊廷淑芳淑幸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有