android高德api的使用
- 格式:docx
- 大小:68.96 KB
- 文档页数:11
Android 应用的离线地图和导航开发指南Android 作为全球最受欢迎的移动操作系统之一,为开发人员提供了丰富的功能和 API,以开发各种创新的应用程序。
其中,离线地图和导航应用程序受到了广大用户的追捧。
本文将为您介绍如何进行Android 应用的离线地图和导航开发。
一、离线地图的基本原理在离线地图应用中,地图数据不需要实时从网络加载,而是事先下载到本地设备中的存储空间。
这样,即使在没有互联网连接的情况下,用户仍然可以使用地图功能。
主要步骤如下:1.选择合适的地图供应商:目前市面上有多个知名地图供应商,如Google 地图、百度地图、高德地图等。
根据应用需求,选择一个合适的供应商是至关重要的。
2.下载地图数据:地图供应商通常会提供相应的 API,开发者可以使用该 API 下载指定地区的地图数据。
下载后的地图数据通常会以离线地图包的形式保存。
3.本地地图数据存储:将下载好的地图包存储在设备的本地存储空间中。
可以选择将地图包保存在内部存储或者外部存储中,具体取决于应用需求和设备的可用空间。
4.离线地图数据读取:应用程序在需要使用地图时,从本地存储空间读取地图数据,并在地图控件中进行展示。
二、离线导航的基本原理除了离线地图,离线导航也是用户常用的功能之一。
离线导航应用允许用户在没有互联网连接的情况下获取准确的导航指引。
下面是离线导航的基本原理:1.导航路线规划:在离线导航中,应用程序需要事先下载导航路线数据。
用户输入起点和终点后,应用程序会根据事先下载的地图数据进行路线规划,并生成导航路线。
2.定位和转向提示:离线导航应用为用户提供实时的定位功能,通过设备内置的定位传感器获取用户的当前位置,并根据导航路线提供转向提示。
3.离线语音合成:为了在没有互联网连接的情况下提供导航语音提示,应用程序需要事先下载和保存离线语音合成数据。
当用户进行导航时,应用程序会根据导航路线提供相应的语音合成提示。
三、开发离线地图和导航应用的技术要点在进行 Android 应用的离线地图和导航开发时,需要掌握以下技术要点:1.文件管理和存储:了解如何在 Android 应用中进行文件管理和存储操作是必不可少的。
移动应用开发中的高德地图API使用指南随着移动应用的普及和发展,地图应用已经成为人们日常生活的必备工具。
在移动应用开发过程中,使用高德地图API能够为应用增加定位、导航、搜索等功能,提升用户体验。
本文将为大家介绍高德地图API的使用指南,帮助开发者更加灵活和高效地使用这一强大的工具。
一、高德地图API概述高德地图API(Application Programming Interface)是高德地图提供的一组开发接口,为开发者提供了访问高德地图底图、定位服务、导航服务等功能的能力。
开发者可以通过调用这些接口,将地图相关的功能集成到自己的移动应用中。
二、地图显示功能在移动应用中显示地图是最基本的功能之一。
使用高德地图API,开发者可以轻松地在应用中展示地图。
首先,开发者需要在高德开放平台注册一个开发者账号,并申请一个API Key,用于在应用中验证开发者身份。
接下来,可以使用API提供的地图展示接口,将地图显示在应用的指定位置。
开发者可以设置地图的中心点、缩放级别、地图类型等属性,以满足不同场景下的需求。
三、地理编码和逆地理编码通过地理编码和逆地理编码,开发者可以将地理坐标与地址信息进行转换。
地理编码是将地址转换为地理坐标的过程,逆地理编码则是将地理坐标转换为地址的过程。
使用高德地图API提供的接口,开发者可以根据用户提供的详细地址,获取对应的经纬度信息,并在地图上标注出来;或者根据用户提供的经纬度信息,获取对应的地址信息,并显示在应用中。
四、定位功能定位是移动应用中常见的功能需求之一。
高德地图API提供了定位服务接口,可以帮助应用获取用户的地理位置信息。
开发者可以通过调用接口,获得用户的经纬度、精确度等信息,并在地图上定位用户的当前位置。
同时,高德地图API还提供了地理围栏功能,可以实现对指定区域进行监控和提醒,为应用增加更多的定位功能。
五、导航功能导航是许多应用中不可或缺的功能之一。
高德地图API提供了多种导航接口,可以帮助应用实现步行、驾车、公交等不同方式的导航功能。
上午(理论)1.地图平台的基本背景知识2.MapABC-API简介●什么是MapABC-API●API的作用●地图展现操作API●搜索及空间应用API3.MapABC-API基础功能4.MapABC-API高级应用5.API的应用架构6.API的对象结构MMap,MMapOptions,MMarker,MPolyline等等。
7.如何在项目中使用API(嵌入地图)⏹嵌入地图的先决条件——KEY⏹引用API-JS文件。
8.Demo展示下午(实例)1.页面嵌入地图MMap的使用地图参数的获得地图参数的设置MMapOptions的设置2.地图加点MMarker类、MMarkerOptions类3.地图加线MPolyline类、MLineOptions类、MLineStyle类4.地图加面面基类:MArea类、MAreaOptions类、MFillStyle类、MAreaStyle类矩形、圆、多边形:MRectangle类、MCircle类、MPolygon类5.地图加各类TIP6.鼠标绘图7.添加专题图8.有关上周工作会议上谈及的高德培训现经安排定于本周三在上海高德开课请各位安排相关人员出席。
具体安排如下:9.10. l 时间:9月2日(本周三)一整天9:30开始11. l 地点:上海高德大会议室(淮海西路55号申通信息广场26楼E-H座靠近华山路路口)12.【小提示】:淮海西路和华山路口在修路开车来的请从幸福路、或法华镇路、或番禹路转进来。
13. l 议程具体请参考附件)14. 1. 高德地图平台基本知识;15. 2. 高德API二次开发应用;16. 3. 实战演练DEMO制作;17. l 培训师:王友光18. l 公司前台电话:52989158(如要问路可电话联系J)19.20.由于本人明天开始要休假一周所以现场有什么问题可随时与王友光联系。
谢谢!21.22.祝大家培训愉快!J和盛娱乐,和盛平台,和盛注册 t44i985P9Qf3友情提示:方案范本是经验性极强的领域,本范文无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用。
智能交通app开发教程(实例)
介绍
随着智能交通系统的不断发展,智能交通app的需求也在逐渐增加。
本文将介绍一个基于Android开发的智能交通app的实例,帮助读者了解如何进行智能交通app的开发。
技术架构
- Android开发技术
- Java语言
- 高德地图API
功能介绍
- 实时路况查询:通过调用高德地图API,获取摄像头位置及拍摄的路况照片,显示在地图上。
- 交通事故提醒:通过调用高德地图API,获取当地交通事故信息,并向用户发出提醒。
- 路线规划:用户输入起点、终点后,利用高德地图API计算最优路径,并显示在地图上。
开发流程
1. 确定app功能及技术架构。
2. 搭建开发环境,配置Android开发环境及高德地图API环境。
3. 进行UI设计,包括地图UI、路线规划UI、交通事故提醒
UI等。
4. 进行编码,包括UI布局和逻辑处理。
5. 进行调试,修复Bug。
6. 进行优化,增强app的性能和稳定性。
7. 发布上线。
结论
本文介绍了一个基于Android开发的智能交通app的实例,希
望读者可以通过本文了解到智能交通app的开发流程和技术开发细节,为读者日后的app开发提供一定的帮助。
高德移动导航使用手册Android版《高德移动导航软件用户手册》及其配套系统软件的版权属本公司所有,受中华人民共和国法律保护,未获高德软件有限公司明确的书面许可,任何人或单位不得对本软件的全部或部分内容进行复制或将其存储在数据库中,不得进行电子、机械或其他方式的影印、拷贝或备份,不得通过载声体或其他任何方式进行复制。
本文件所包含的信息可能更改,事先恕不另行通知。
免责声明《高德移动导航软件用户手册》是由高德软件有限公司编制,旨在为用户提供一个使用手机导航系统的信息指引。
在编制过程中,本公司尽可能确保手册中所有内容(包括文字、图形、图标等)的准确性和完整性,但本公司对手册内容的准确性和完整性不作任何保证。
本手册的内容仅供参考,对于用户使用本手册带来的任何后果和损失,本公司概不负责。
用户一经购买使用《高德移动导航软件》,即表示同意本公司对于用户在使用本系统时所发生的任何直接或间接的损失一概免责。
本声明解释权归高德软件有限公司,如有争议,以中华人民共和国现行有效的法规法律为依据。
高德软件有限公司重要提示感谢您购买本产品!为了实现您对本产品的安全和有效使用,本公司向您进行特别提示如下:1、本产品电子地图及路口语音提示仅供参考,可能与实际路况有所不同,请在遵守实地交通规则的前提下使用本系统,按照实际路况驾驶。
3、GPS定位与天气、环境及接收器等各因素相关,本系统不保证定位完全准确,请结合其他信息判断。
4、实际导航中请勿以本系统为唯一参考依据,因使用本系统而产生的直接的、间接的、连带的、特殊的后果由用户自行承担,系统设计者和生产者不负任何责任。
5、禁止非法拷贝、反编译、破解或传播本系统。
安装说明一、安装地图数据说明:手机内应用程序可见“高德导航”的图标,表明已经预置高德导航apk,运行程序时提示缺失数据。
操作步骤:(1)通过网站下载地图数据“autonavidata50.zip”并解压缩;(2)将“autonavidata50”文件夹存储至的后继内存的根目录下;(3)运行导航程序即可。
{售后服务}高德服务接口说明新版
高德地图作为国内领先的地理信息服务提供商,不仅提供了精准的地图数据和导航服务,还为用户提供了完善的售后服务。
下面将对高德地图的售后服务接口进行详细的说明。
3.技术支持API:高德地图为开发者提供了专门的技术支持API,用户可以通过该接口获取高德地图开发者平台的技术支持信息。
用户可以了解到最新的技术文档、开发指南、常见问题及解决方案等,以帮助开发者解决技术上的问题。
4.问题反馈API:用户使用高德地图产品时,遇到问题可以通过问题反馈API进行反馈。
用户可以描述问题的具体内容和出现的情况,并提供相应的截图或录像等辅助材料。
高德地图的技术人员会仔细分析用户的问题,并尽快给出解决方案或回复。
5.帮助中心API:高德地图还提供了帮助中心API,用户可以通过该接口获取到高德地图的帮助中心的相关信息。
帮助中心包括了各类教程、常见问题及解答、使用说明等,用户可以根据需要查阅相关的帮助文档,解决自己的问题。
6.售后服务投诉API:如果用户对高德地图的售后服务不满意,可以通过售后服务投诉API进行投诉。
用户可以详细描述投诉的内容和原因,高德地图将会尽快处理用户的投诉,并采取相应的措施改进售后服务。
使用AutoNavi MAP API 开发地图应用•为什么要使用AutoNavi MAP API•AutoNavi MAP API 概述•AutoNavi Android MAP API 与Google Android Map API 比较•如何使用AutoNavi MAP API如何实现坐标偏转如何创建MapView如何创建ItemizedOverlay如何创建PoiSearch如何创建Geocoder如何创建MyLocation•FAQ•技术支持(QQ群:122795260, 邮箱:mapservice@)为什么要使用AutoNavi MAP API因为商业上的原因,联想不能在中国市场发布的手机上预装Google相关的手机服务,包括Google地图API。
为了解决这一问题,我们和高德公司(AutoNavi)合作,在手机上预置了AutoNavi提供的多种基于位置的服务。
高德公司作为中国领先的导航电子地图内容和位置服务解决方案提供商,旗下的互联网MAP API()同样在业界具有良好的口碑。
可为客户提供跨平台、跨媒体的位置服务解决方案。
我们同时鼓励中国的开发者们,使用AutoNavi MAP API开发基于位置和地图应用程序,并且发布在中国市场中的联想手机上。
AutoNavi MAP API 概述AutoNavi MAP API是高德软件公司提供的调用地图的接口方法。
用户的应用程序可以通过AutoNavi MAP API提供的接口方法操作地图数据,实现位置相关或地图相关应用。
例如,通过调用AutoNavi MAP API,将地图数据整合到自己的应用中,可以将商户的地理位置信息在地图上进行标注,以很直观的形式展现给使用者。
AutoNavi MAP API还将添加自驾,公交及步行的线路规划API。
同时,还将加入对矢量地图的支持,大幅提高地图下载的速度。
在不久的将来,还会加入3D街区图和其他的个性化地理数据支持。
⾼德地图API获取天⽓1.建⽴⾏政区规划清单表use edw;drop table if exists dim_prov_city_adcode;create table if not exists dim_prov_city_adcode (prov_nm varchar(64),city_nm varchar(64),county_nm varchar(64),prov_code varchar(64),county_code varchar(64),adcode varchar(64),alias_nm varchar(64)) ENGINE=InnoDB default CHARSET=utf8;--alter table dim_prov_city_adcode add primary key(adcode);alter table dim_prov_city_adcode COMMENT '⾏政区划清单表';alter table dim_prov_city_adcode modify column prov_nm varchar(64) COMMENT '省份、直辖市名称';alter table dim_prov_city_adcode modify column city_nm varchar(64) COMMENT '城市名称';alter table dim_prov_city_adcode modify column county_nm varchar(64) COMMENT '区域名称';alter table dim_prov_city_adcode modify column prov_code varchar(64) COMMENT '省GB码';alter table dim_prov_city_adcode modify column county_code varchar(64) COMMENT '市GB码';alter table dim_prov_city_adcode modify column adcode varchar(64) COMMENT '参考GB码(adcode)';alter table dim_prov_city_adcode modify column alias_nm varchar(64) COMMENT '别名';2.插⼊⾏政区规划清单表数据3.建⽴天⽓数据表create table if not exists fact_weather_adcode_day(province varchar(64) comment '省份名',city varchar(64) comment '城市名',adcode varchar(64) comment '区域编码',weather varchar(64) comment '天⽓现象(汉字描述)',temperature float comment '实时⽓温',winddirection varchar(64) comment '风向',windpower varchar(64) comment '风⼒',humidity varchar(64) comment '空⽓湿度',reporttime varchar(64) comment '发布时间',date_id varchar(64) comment '⽇期',hour_id varchar(64) comment '⼩时')ENGINE=InnoDB default CHARSET=utf8;alter table fact_weather_adcode_day add primary key(adcode,date_id,hour_id);3.开发Python脚本调⽤API获取数据#coding:utf8#------------------------------------------------------#Filename: getWeather.py#Revision: 1.0#Date: 2018/08/17#Author: Jim#Description:#Notes: 通过调⽤⾼德API获取天⽓数据#key: 6ca7b720f2ab2a48f749c1e19c3d1c47#⾼德API相关⽂档: https:///api/#获取天⽓: https:///v3/weather/weatherInfo?city=110101&key=<⽤户key># 如:https:///v3/weather/weatherInfo?city=110101&key=6ca7b720f2ab2a48f749c1e19c3d1c47#------------------------------------------------------import time, re, os, sys, time,urllib2,shutil,stringimport json,datetime,MySQLdbfrom dateutil.parser import parse#设置utf-8编码格式reload(sys)sys.setdefaultencoding( "utf-8" )#获取当前⽇期的前n天def getbeforeDay(n=0):now_time = datetime.datetime.now()beforeday = now_time - datetime.timedelta(n)return beforeday.strftime("%Y%m%d")scriptDir = os.getcwd()if len(sys.argv) > 1 :job_date_id = sys.argv[1]else :job_date_id = getbeforeDay(0)print"当前脚本路径:%s,当前参数⽇期:%s" % (scriptDir,job_date_id)#保存数据到⽂件⽂件def saveContext(filename,*name):format = '^'dev_prd_flag = 'prd'context = name[0]for i in name[1:]:context = context + format + str(i)context = str(context).replace('(','(').replace(')',')').replace(',',',').replace(':',':')if dev_prd_flag != 'prd':print context#去除⽂件路径名⾸位空格filename = filename.strip()#读取⽬录名称path = os.path.dirname(filename)#如果⽬录不存在则创建⽬录if not os.path.exists(path):os.makedirs(path)#读取⽂件名称,以追加的⽅式写⽂件name = os.path.basename(filename)fp = open(filename,'a')fp.write(context+'\n')fp.close()#获取⽹页⽂件def getHtml(url,code='utf-8'):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER' }request = urllib2.Request(url,headers=headers)response = urllib2.urlopen(request,data=None,timeout=60)html = unicode(response.read(),str(code))return htmlclass ConMysql():def__init__(self,host='192.168.122.140',user='shutong',passwd='shutong',db='edw'):print"连接mysql数据库"try:conn= MySQLdb.connect(host= host,port = 3306,user=user,passwd=passwd,db =db,charset='utf8',)self.conn = connprint"连接mysql成功"except :print"连接mysql失败"def execSQL(self,sql):print"执⾏语句:%s" % (sql)cur = self.conn.cursor()cur.execute('set character_set_client = utf8')cur.execute('set character_set_server = utf8')cur.execute('set character_set_connection = utf8')cur.execute('set character_set_results = utf8')cur.execute('set collation_connection = utf8_general_ci')cur.execute('set collation_server = utf8_general_ci')result = cur.fetchmany(cur.execute(sql))cur.close()mit()return result'''析构⽅法'''def__del__(self):if self.conn:self.conn.close()else:passadcode = "110000"key = "6ca7b720f2ab2a48f749c1e19c3d1c47"def crawl_weather(adcode):url = "https:///v3/weather/weatherInfo?city=%s&key=%s" % (adcode,key)html = getHtml(url)jsondata = json.loads(html)#省份province = jsondata['lives'][0]['province']#市city = jsondata['lives'][0]['province']#区域编码adcode = jsondata['lives'][0]['adcode']#天⽓现象weather = jsondata['lives'][0]['weather']#实时⽓温摄⽒度temperature = jsondata['lives'][0]['temperature']#风向winddirection = jsondata['lives'][0]['winddirection']#风⼒windpower = jsondata['lives'][0]['windpower']#空⽓湿度humidity = jsondata['lives'][0]['humidity']#数据发布时间reporttime = jsondata['lives'][0]['reporttime']#⽇期date_id = parse(reporttime).strftime('%Y%m%d')#⼩时hour_id = parse(reporttime).strftime('%H')print province,city,adcode,weather,temperature,winddirection,windpower,humidity,reporttime,date_id,hour_idsql = "insert ignore into fact_weather_adcode_day values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');" % (province,city,adcode,weather,temperature,winddirection,windpower,humidity,reporttime,date_id,hour_id)print sqlconn.execSQL(sql) conn = ConMysql() crawl_weather(adcode)。
⾼德地图API,获取和设置zoom级别和中⼼点双击可以调整⾼德地图的级别zoom 改变初始地图的级别,zoom值越⾼,相当于⿏标双击放⼤,内容越详细,范围越⼩center 改变初始地图的中⼼点,是⼀个数组,包含经纬度<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }</style></head><body><div id="container"></div><script>new AMap.Map("container",{zoom:12,//初始化地图级别center:[120,30]//初始化地图中⼼点});</script></body></html>getZoom() 获取级别getCenter() getCenter().toString() 获取中⼼点<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }</style></head><body><div id="container"></div><script>var map=new AMap.Map("container");console.log(map.getZoom());//获取级别console.log(map.getCenter());//获取中⼼点console.log(map.getCenter().toString());</script></body></html>on("moveend") 监听移动停⽌事件<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }</style></head><body><div id="container"></div><script>var map=new AMap.Map("container");map.on("moveend",function(){console.log(map.getZoom());//获取级别console.log(map.getCenter().toString());//获取中⼼点})</script></body></html>on("zoomend") 双击结束事件,改变级别事件<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }</style></head><body><div id="container"></div><script>var map=new AMap.Map("container");map.on("zoomend",function(){console.log(map.getZoom());//获取级别console.log(map.getCenter().toString());//获取中⼼点})</script></body></html>setZoom() 设置地图级别<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }</style></head><body><div id="container"></div><script>var map=new AMap.Map("container");//设置地图级别setTimeout(function(){map.setZoom(15);},3000);</script></body></html>通过事件设置zoom<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }#setZoomNode{width:300px;height:100px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style></head><body><div id="container"></div><div id="setZoomNode"><input type="text" id="zoomVal"><button id="zoomBtn">设置zoom</button></div><script>var map=new AMap.Map("container");//设置地图级别zoomBtn.onclick=function(){map.setZoom(zoomVal.value);}</script></body></html>setCenter([ ]) 设置地图中⼼点<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }#setZoomNode{width:300px;height:100px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style></head><body><div id="container"></div><script>var map=new AMap.Map("container");//设置地图中⼼点setTimeout(function(){map.setCenter([121.11,30]);},1000);</script></body></html>通过事件设置地图中⼼点<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }#setCenterNode{width:300px;height:100px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style></head><body><div id="container"></div><div id="setCenterNode">x <input type="text" id="xVal"><br>y <input type="text" id="yVal"><br><button id="btn">设置中⼼点</button></div><script>var map=new AMap.Map("container");//设置地图中⼼点btn.onclick=function(){map.setCenter([xVal.value,yVal.value]);}</script></body></html>setZoomAndCenter 同时设置zoom和center<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>map</title><script type="text/javascript" src="https:///maps?v=1.4.15&key=ce3b1a3a7e67fc75810ce1ba1f83c01a"></script><style>*{margin:0;padding:0;}#container {width:100%; height: 100%;top:0;left:0;position: absolute; }#setZoomNode{width:300px;height:100px;background-color: #fff;border:1px solid;box-shadow:0 0 5px #000;top:20px;right:20px;position: absolute;} </style></head><body><div id="container"></div><div id="setZoomNode">级别<input type="text" id="zoomVal"><br>中⼼点x <input type="text" id="xVal"><br>中⼼点y <input type="text" id="yVal"><br><button id="btn">设置中⼼点和zoom</button></div><script>var map=new AMap.Map("container");//设置地图中⼼点btn.onclick=function(){map.setZoomAndCenter(zoomVal.value,[xVal.value,yVal.value]);}</script></body></html>。
高德API的使用Ps: demo具体实现了1.定位;2.自定义位置小蓝点(弃系统提供的);3.点击地图弹marker;4.点marker弹infowindow,infowindow包括3块,点击1弹dialog输入兴趣点搜附近,点击2查看具体信息,点击3跳转到路线查询界面(默认从兴趣点到当前位置)开发过程如下:1.进入高德官网申请map api key ,这一步不能少,否则无法获取地图。
像百度也需要。
2.在Manifest中添加必要权限:<uses-permission android:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permissionandroid:name="android.permission.CHANGE_CONFIGURATION"/>---------------------------------------------分割线-------------------------------------------3.代码具体实现过程:A.导入jar包:从官网下载最新的jarB.在Main.xml中添加fragment用来显示地图。
<fragmentandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="fill_parent"class="com.amap.api.maps.SupportMapFragment"/>---------------------------------------------分割线-------------------------------------------C.MainActivity继承FragmentActivity,使用以下代码来初始化地图以及对地图添加监听,启动定位等操作:if (aMap == null) {aMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();//获取地图实例if (aMap!=null) {setCenterPoi();//最初显示的可视区域setUpMap();//显示系统定位小蓝点setMapListener();//对aMap添加监听器}}---------------------------------------------分割线------------------------------------------- 上述代码中的3个方法如下:private void setCenterPoi(){LatLng latLng=new LatLng(31.23, 121.47);//默认城市经纬度CameraPosition position=new CameraPosition(latLng,9, 0, 0);//相机位置,参数分别代表经纬度坐标,地图缩放级别4-20,可视区域倾斜角0-45°,可视区域指向的方向,以角度为单位,正北方向到地图方向逆时针旋转的角度0-360°CameraUpdate cameraUpdate=CameraUpdateFactory.newCameraPosition(position);//定义了一个可视区域的移动,具体参考apiaMap.moveCamera(cameraUpdate);//移动相机到可视区域}---------------------------------------------分割线------------------------------------------- private void setUpMap() {// 自定义系统定位小蓝点MyLocationStyle myLocationStyle = new MyLocationStyle();myLocationStyle.myLocationIcon(BitmapDescriptorFactory .fromResource(R.drawable.location_marker));myLocationStyle.strokeColor(Color.BLUE);myLocationStyle.strokeWidth(1);aMap.setMyLocationStyle(myLocationStyle);mAMapLocManager= LocationManagerProxy.getInstance(this);aMap.setLocationSource(this);//提供位置数据,必须实现LocationSource接口,里面有两个方法:启动和销毁,具体详情见下文。
aMap.setMyLocationEnabled(true);// 设置为true表示系统定位按钮显示并响应点击,false表示隐藏,默认是false}---------------------------------------------分割线-------------------------------------------监听器里的具体操作,可以自己完成。
private void setMapListener(){aMap.setOnMapClickListener(new OnMapClickListener() {……});aMap.setOnMarkerClickListener(new OnMarkerClickListener() {……});aMap.setInfoWindowAdapter(new InfoWindowAdapter() {//个性化定制信息窗口marker对象@Overridepublic View getInfoWindow(final Marker marker) {……} aMap.setOnInfoWindowClickListener(newOnInfoWindowClickListener() {……});}---------------------------------------------分割线-------------------------------------------Ⅰ.上面setUpMap()方法代码中提到LocationSource接口两个方法,下面是具体实现:@Overridepublic void activate(OnLocationChangedListener arg0) { mListener = arg0;// OnLocationChangedListener接口用于获取位置改变信息if (mAMapLocManager == null) {mAMapLocManager = LocationManagerProxy.getInstance(this); }// LocationManagerProxy mAMapLocManager定位服务类。
这个定位类允许应用定时更新获取设备的地理位置,或者当这个设备进入指定的地理位置时,启动一个应用指定的Intent。
mAMapLocManager.requestLocationUpdates(LocationProviderP roxy.AMapNetwork, 5000*3, 20, this);//注册监听,参数依次代表:注册监听的provider 名称,位置变化的通知时间,位置变化通知的距离,AMapLocationListener(MainActivity实现的接口:当位置改变时接收LocationManagerProxy 发来的信息提示。
如果AMapLocationListener 已经使用LocationManagerProxy 的requestLocationUpdates(String, long,float, AMapLocationListener) 方法进行了注册,那么它的方法才能被调用。
)}/**释放资源*/@Overridepublic void deactivate() {mListener = null;if (mAMapLocManager != null) {mAMapLocManager.removeUpdates(this);mAMapLocManager.destory();}mAMapLocManager = null;}---------------------------------------------分割线-------------------------------------------Ⅱ.上面代码中包含的AMapLocationListener接口,所实现的方法(只需一个,包含低版本的方法均已废弃):@Overridepublic void onLocationChanged(AMapLocation location) {// if (mListener != null) {// 位置改变递归调用// mListener.onLocationChanged(location);// }/**通过返回的location可以获取具体的位置信息,由于该方法是异步的,*主线程需要的位置信息需要通过消息队列传递*/if (location != null) {Double geoLat = location.getLatitude();Double geoLng = location.getLongitude();String cityCode = "";String desc = "";Bundle locBundle = location.getExtras();if (locBundle != null) {cityCode = locBundle.getString("citycode");desc = locBundle.getString("desc");System.out.println("bundlekey=="+locBundle.keySet());}String str = ("定位成功:(" + geoLng + "," + geoLat + ")"+ "\n精度 :" + location.getAccuracy() + "米"+ "\n定位方式:" + location.getProvider() + "\n 城市编码:"+ cityCode + "\n位置描述:" + desc+ "\n定位时间:"+new SimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(new Date(location.getTime()))+"\n省:"+ location.getProvince() + "\n市:" + location.getCity()+ "\n区(县):" + location.getDistrict() + "\n城市编码:"+ location.getCityCode() + "\n区域编码:" + location.getAdCode());Message msg = new Message();msg.obj = str;Bundle b=new Bundle();b.putDouble("lat", geoLat);b.putDouble("lng", geoLng);msg.setData(b);msg.what=0;if (handler != null) {handler.sendMessage(msg);//将经纬度传回主线程,画位置图层:aMap.addMarker,aMap.addCircle}}}---------------------------------------------分割线-------------------------------------------Ⅲ.搜附近的主要代码,写在aMap.setInfoWindowAdapter的第一个方法里,对view中的某个控件绑定监听,回调时所执行的操作如下,该方法返回view (也就是infowindow信息窗口):int radius=3000;//搜索附近的半径final PoiSearch poiSearch=new PoiSearch(AMapMainActivity.this, new Query(selectString, PoiTypeDef.All,Constants.CITYCODE));//参数依次为:context,兴趣点,搜索结果类型,城市编码,如北京010,上海021等SearchBound searchBound=new SearchBound(newLatLonPoint(marker.getPosition().latitude,marker.getPosition().longitude),radius);//定义矩形搜索区域poiSearch.setBound(searchBound);poiSearch.setPageSize(10);//设置返回结果页数new Thread( new Runnable() {public void run() {try {PoiPagedResultresult=poiSearch.searchPOI();if (result!=null) {list=result.getPage(1);if (list!=null&&list.size()>0) { handler.sendMessage(Message.obtain(handler, 1));//传回主线程,在地图上标注出搜索结果}}} catch (AMapException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}).start();---------------------------------------------分割线-------------------------------------------显示搜索兴趣点返回所有的结果:private void addMarkers(List<PoiItem> poiItems) {if (listBitmap==null) {listBitmap=new ArrayList<BitmapDescriptor>();//用来存储系统marker图片}if (listBitmap.size()<=0) {listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_AZURE));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_BLUE));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_CYAN));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_GREEN));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_MAGENTA));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_ORANGE));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_RED));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_ROSE));listBitmap.add(BitmapDescriptorFactory.defaultMarker(Bitmap DescriptorFactory.HUE_YELLOW));listBitmap.add(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));}for (int i = 0; i < poiItems.size(); i++) {aMap.addMarker(new MarkerOptions().position(newLatLng( poiItems.get(i).getPoint().getLatitude(),poiItems.get(i).getPoint().getLongitude())).title(poiItems.get(i).getTitle()).snippet(poiItems.get(i).getSnippet()).icon(listBitmap.get((int)(Math.random()*9))));}}---------------------------------------------分割线-------------------------------------------Ⅳ.乘车路线查询具体实现,代码写的地方与搜附近类似,换一个控件绑定。