ios高德 ios sdk地图每次定位画一次覆盖物怎么实现?

本类阅读排行
本类推荐阅读
本类好评文章ios-高德地图的导入
最近在做地图的应用,客户让用高德的地图库,现在总算是完工了,这么一路走来,真是尝尽了酸苦辣啊,网上高德的资源,可以说少之又少,可用资源比大熊猫还少,真让国宝汗颜啊,不得不说一句,珍爱生命,远离。。你懂得!
废话不说,开始我们的高德库的引入
(1).启动xcode,创建工程,在启劢页选择“Create
a new Xcode project”,将跳转到新建工 程页,选择 iOS&Application&Single
View App类型
(2).在工程左侧目录中,右键单击工程名
MapSDK_Demo,选择 Add Files
to “MapSDK_Demo”...,在弹出的对话框中选择
MapABC 地图 API iOS 版提供的头文 件 include 所在的路径, 选择“Copy items into destination group’s folder(if
needed)”,单击“Add”, 可以将 include 文件夹同时拷贝在工程目录下。
(3) 点击工程名 MapSDK_Demo,依次选择 Targets&MapSDK_Demo&Build
Settings 设置相关参数,在右侧信息窗口下方依次选择 Search Paths&Header Search
Paths,输入 MapABC
地图APIiOS版头文件所在的路径,此处的include文件夹放在此工程目录下,
路径为“./include/**”,注意:没有双引号
配置静态库
开发 iOS 设备上的地图功能需要引用地图开发库文件 libMAMapKit.a。
MapABC 地图 API iOS 版提供的地图开发库文件 lib 包括两个文件,一个是适用于 iPhone 模拟器 Debug-iphonesimulator 的 lib 文件;另一个是适用于 iPhone 真机 Release-iphoneos 的 lib 文件,您可以根据使用的类型进行相关引用和配置,添加引用及配
置方式如下
(1) 在工程左侧目录中,右键单击工程名
MapSDK_Demo,选择 Add Files
to “MapSDK_Demo”...,在弹出的对话框中选择地图开发库文件
lib 所在的路径,步骤同 上(2)节头文件的引入。引入后,lib 文件夹将同时拷贝在工程目录下。(2)
点击工程名 MapSDK_Demo,依次选择 Targets&MapSDK_Demo&Build
Settings 设置相关参数。在右侧信息窗口中选择 Linking&Other Linker
Flags,依次 输入-all_load
与-lMAMapKit,
(3) 点击工程名
MapSDK_Demo,依次选择
Targets&MapSDK_Demo&Build
Settings,设置相关参数。在右侧信息窗口中选择 Search Path&Library
Search Path, 设置地图库文件的链接路径(Library Search Path),此处的 lib 文件夹位于此工程目录
下,请输入“./lib/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)”,
也可以点击“Library Search
Path”,对 Debug 不
Release 顷分别输入对应的 lib 库路径,模拟器 lib 文件路径为“./lib/Debug-iphonesimulator”;真机
lib 文件路径为
“./lib/Release-iphoneos”。
引入相关配置文件
map_config.xml
文件可以用来配置地图取图地址,地图显示级别,以及实时交通劢态刷
新时间等,引入方式同上(2)。
MapABC.bundle
文件存储了定位、默认大头针标注视图等资源图片,您可利用其资源
进行开发,引入方式同&上(2)
矢量地图涉及到图元文件,即
assets 提供的文件。需要将 assets 文件夹拷贝到 工程目录下;然后,在工程左侧目录中,右键单击工程名
MapSDK_Demo,选择 Add Files
to “MapSDK_Demo”...,在弹出的对话框中选择
assets 所在路径,选择create folder reference for any
added folder
引入其它相关框架
除 工 程 中 默 认 引 入 的
UIKit.framework
、 Foundation.framework 、 CoreGraphics.framework、CoreData.framework
以外,还需引入 libz.dylib、libxml2.dylib、
CoreText.framework 、 QuartzCore.framework 、 SystemConfiguration.framework
、 CoreLocation.framework。
更改文件后缀名
由于静态库采用 ObjectiveC++实现,因此需要将工程中的应用程序代理文件及需要调用
地图的文件后缀名由.m
改为.mm,否则将导致编译错误。
单机run一下,即成功。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。6335人阅读
未经允许,禁止转载,违者必究!
浣熊我最近在研究高德地图android api,看到第三章定位信息后半部分关于“如何通过MyLocationOverlay 实现自动定位”的时候我凌乱了,写得过于简单,根本不知道如何操作。最后通过阅读官方的示例代码和在网上搜集大量资料实现了地图自动定位的功能。
开发指南第三章定位信息前半部分的代码实现的功能是:当手机采集的地理位置(经纬度)发生改变时在界面上显示出改变后的经纬度。如果开发过android原生定位程序的开发者应该对这部分代码不陌生,中规中矩,先注册位置监听服务,然后当位置发生改变后出发onLocationChanged()方法。现在请在官网上下载示例代码,导入工程后开启包.apis.location中的MyLocation.java文件,该文件实现的主要功能是:初始化地图并且实现首次定位,地图会自动移动到定位点,我们一会便要基于这个文件来完成地图自动实时定位的功能。
看到这儿,有人可能想把MyLocation文件中的内容与第三章给出的android原生定位模块简单整合。如果你的解决思路是:在onLocationChanged()方法中企图在地图上绘制出当前的位置,那么就会遇到很大的麻烦。因为如果用高德地图提供的api在地图上绘制定位点的话一定要调用类MyLocationOverlay中的enableMyLocation()方法,根据官方参考资料,这个方法封装了android原生的类LocationManager中的requestLocationUpdates()方法,所以你在写onLocationChanged()方法前一定是已经调用了原生的类LocationManager中的requestLocationUpdates()方法,这样一来造成了LocationManager在没有removeUpdate前又进行了一次requestLocationUpdates,由此造成程序意外退出。
所以还是回到开发指南第三章,好好看看后半部分:如果想让地图跟随当前位置移动,需要继承MyLocationOverlay 并实现其onLocationChanged()方法,调用MapView.getController().animateTo()方法移动地图位置。官方用户指南上的这句原话正是问题的正解,不过官网实在太坑爹,简简单单几行文字和代码,对于浣熊这种刚刚接触地图开发的小白来说实在是看得一头雾水,还在一阵瞎折腾,终于解决了问题,所以共享出来,希望和我一样的小白能够少走些弯路。
我先把修改后的MyLocation.java文件整个贴出来,在增加或改动的代码前后均表明了注释(不包括包的改动):“/*change start*/”和&/*change end*/&
* 使用MyLocationOverlay实现地图自动定位
* 实现初次定位使定位结果居中显示
public class MyLocation extends MapActivity {
private MapView mMapV
private MapController mMapC
private GeoP
/*change start*/
private MyLocationOverlay_HX mLocationO
/*change end*/
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapview);
mMapView = (MapView) findViewById(R.id.mapView);
mMapView.setBuiltInZoomControls(true);
mMapController = mMapView.getController();
point = new GeoPoint((int) (39.90923 * 1E6),
(int) (116.397428 * 1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point);
//设置地图中心点
mMapController.setZoom(15);
/*change start*/
mLocationOverlay = new MyLocationOverlay_HX(this, mMapView);
/*change end*/
mMapView.getOverlays().add(mLocationOverlay);
//实现初次定位使定位结果居中显示
mLocationOverlay.runOnFirstFix(new Runnable() {
public void run() {
handler.sendMessage(Message.obtain(handler, Constants.FIRST_LOCATION));
/*change start*/
class MyLocationOverlay_HX extends MyLocationOverlay {
public MyLocationOverlay_HX(Context arg0, MapView arg1) {
super(arg0, arg1);
// TODO Auto-generated constructor stub
public void onLocationChanged(Location location) {
//Toast.makeText(getApplicationContext(), &Location Changed&,Toast.LENGTH_LONG).show();
point = new GeoPoint((int) (location.getLatitude() * 1E6),
(int) (location.getLongitude() * 1E6));
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
//mMapController.setCenter(point);
//设置地图中心点
mMapController.animateTo(point);
super.onLocationChanged(location);
/*change end*/
protected void onPause() {
this.mLocationOverlay.disableMyLocation();
super.onPause();
protected void onResume() {
this.mLocationOverlay.enableMyLocation();
super.onResume();
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
if (msg.what == Constants.FIRST_LOCATION) {
mMapController.animateTo(mLocationOverlay.getMyLocation());
最关键就在于我在程序中继承了类MyLocationOverlay,将继承类命名为MyLocationOverlay_HX,并在其中重写了onLocationChanged()方法,从代码中可以看出,当位置改变时会触发类MyLocationOverlay的onLocationChanged()方法,然后可以获取位置的经纬度坐标信息,由该信息构建point数据结构,并将其传给类MapController的animateTo()方法,即可以动画的形式移动到新的定位点去,实现实时自动地图定位的功能。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:184642次
积分:2439
积分:2439
排名:第5410名
原创:92篇
评论:133条
(3)(2)(20)(21)(2)(4)(1)(1)(1)(1)(3)(1)(1)(2)(4)(5)(1)(5)(2)(1)(2)(4)(1)(3)(1)(2)(4)后使用快捷导航没有帐号?
万圣节过后,随着年末商潮和圣诞节临近,不光有新作推出,更会有各种给力的更新以及优...
转到两家科技公司之间的比拼正如气宗和剑宗的核心:一个专注于内在,一个专注于技巧,...
没事别拆来玩。
根据市场调研机构 IDC 最新提供的数据了解,2014 年第二季度,Android 的全球市场份额...
联想以29亿美元的价格收购了摩托罗拉,自己获得了专利、市场、品牌以及人才等资产,并...
虽然Cydia已经支持iOS8.0,不过依旧有很多插件没有支持iOS 8,所以小编在这里汇总了一...
百口莫辩时,选择沉默或许是更好的选择。
美国政府官员的言论主张也真是让人听醉了!
Crescent Moon Games 是一家拥有着众多优秀作品的游戏厂商,而在推出《猴子拳击》这...
《针织小熊(Knituma)》是一款似于《水果忍者》切水果玩法类的休闲风游戏,游戏中玩...
《贪吃蛇》这样的经典而简单的益智游戏注定了永远在玩家们的口中传颂,以此作为题材的...
《A Mechanical Story(机械师的故事)》是由 SKYFISH 开发的一款物理益智游戏,游戏...
《Device 6》之后就开始韬光养晦的神奇工作室 Simogo 2014 年新作《The Sailor's Drea...
《飞奔独角兽》、《疯狂外科医生》系列、《死亡巨石》这些优秀的作品都给我们留下了深...
这两年最火也最精彩的美剧想必是由奇幻巨作《冰与火之歌》所改编的《权利的游戏》,...
你想要为 iPhone 6 / Plus 选择什么样的保护壳?
ClamCase是一款非常与众不同的配件,除了起到保护机身的作用之外,它还能让你的iPad A...
防摔保护壳哪家强?上众筹网找 Neverdrop 帮忙!
随着iOS平台的发展,越来越多的游戏纷纷选择iOS平台作为首发平台,也有像《最长的旅程...
近日,罗技正式发布了新一代 iPad 外设,包括新产品“Keys-To-Go”便携键盘,以及新版...
随着 iPhone 6/6 Plus 的问世,各手机壳厂商也是纷纷忙活了起来,除了要做到紧致贴合...
就在金色款 iPad 发布后不久,我们就拿到了一组适配新版 iPad 土豪金配色蓝牙键盘的照...
Olloclip 向来以推出夹带式的镜头闻名世界,出品的镜头配件做工优异、性能良好,在爱...
谷歌 高德 百度哪个地图好啊?定位准确点!
注册时间 最后登录
在线时间443 小时 UID
主题帖子人气
红苹果, 积分 442, 距离下一级还需 58 积分
谷歌 高德 百度哪个地图好啊?定位准确点!刚才看高德地图介绍上说4月份实现3D~~~~是真是假到时才知道!
注册时间 最后登录
在线时间483 小时 UID
主题帖子人气
Re 楼主(宋文博manzhouli)的帖子
引用楼主宋文博manzhouli于 21:21发表的: 谷歌 高德 百度哪个地图好啊?定位准确点!刚才看高德地图介绍上说4月份实现3D~~~~是真是假到时才知道!百度
注册时间 最后登录
在线时间630 小时 UID
主题帖子人气
我觉得就自带的就行了啊...
注册时间 最后登录
在线时间944 小时 UID
主题帖子人气
心已被掏空&&
我一直用谷歌 开车时候就凯立德
注册时间 最后登录
在线时间5904 小时 UID
主题帖子人气
注册时间 最后登录
在线时间443 小时 UID
主题帖子人气
看来大家是都有各自的喜好哦……
注册时间 最后登录
在线时间126 小时 UID
主题帖子人气
Re 楼主(宋文博manzhouli)的帖子
引用楼主宋文博manzhouli于 21:21发表的: 谷歌 高德 百度哪个地图好啊?定位准确点!刚才看高德地图介绍上说4月份实现3D~~~~是真是假到时才知道!百度最差,谷歌和高德各有好坏吧
注册时间 最后登录
在线时间1742 小时 UID
主题帖子人气
买了高德,感觉还可以
注册时间 最后登录
在线时间523 小时 UID
主题帖子人气
我用的9.2的凯立德,就下载本地的地图包,好用的很,.还省内存,去哪的时候在下载也来得及
注册时间 最后登录
在线时间937 小时 UID
帖子 精华1
主题帖子人气
威锋旗下产品
Hi~我是威威!
沪ICP备号-1 丨 深公安网监备案号 5
增值电信业务经营许可证:
Powered by Discuz!

我要回帖

更多关于 ios凯立德和高德 的文章

 

随机推荐