高德地图_高德地图api - CSDN
高德地图 订阅
高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。拥有导航电子地图甲级测绘资质、测绘航空摄影甲级资质和互联网地图服务甲级测绘资质“三甲”资质,其优质的电子地图数据库成为公司的核心竞争力。公司2010年登陆美国纳斯达克全球精选市场(NasdaqAMAP)。2014年12月,高德发布了“出行保障”计划,宣布此项服务长期有效,而且最高赔付额度提高到了1000元。 [1]  2018年6月5日 苹果在美国时间6月4日的苹果开发者大会上,发布了最新的iOS 12操作系统,CarPlay支持高德地图。 [2] 展开全文
高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。拥有导航电子地图甲级测绘资质、测绘航空摄影甲级资质和互联网地图服务甲级测绘资质“三甲”资质,其优质的电子地图数据库成为公司的核心竞争力。公司2010年登陆美国纳斯达克全球精选市场(NasdaqAMAP)。2014年12月,高德发布了“出行保障”计划,宣布此项服务长期有效,而且最高赔付额度提高到了1000元。 [1]  2018年6月5日 苹果在美国时间6月4日的苹果开发者大会上,发布了最新的iOS 12操作系统,CarPlay支持高德地图。 [2]
信息
软件大小
114.52MB [4]
开发商
高德软件有限公司 [5]
最新版本
10.05.2.2639 [4]
软件类型
旅游出行 [4]
中文名
高德地图 [3]
上市时间
2010年
官    网
http://ditu.amap.com/
外文名
Amap
高德地图功能
最新地图浏览器:最新矢量地图渲染,最高质量地图效果、最丰富数据信息、最快速操作体验、最节省数据流量。专业地图服务:实地采集、网络采集,行业领先。2000万POI信息,每年四次信息更新 高德地图(5张) 领先的地图渲染技术:性能提升10倍,所占空间降低80%,比传统地图软件节省流量超过90%专业在线导航功能:覆盖全国364个城市、全国道路里程352万公里在线导航功能:最新高德在线导航引擎,全程语音指引提示,完善偏航判定和偏航重导功能。AR虚拟实景:AR功能结合手机摄像头和用户位置、方向等信息,将信息点以更直观的方式展现给用户,为发现和目标地点指引丰富的出行查询功能:地名信息查询、分类信息查询、公交换乘、驾车路线规划、公交线路查询、位置收藏夹等丰富的基础地理信息查询工具。锁屏语音提示,即使你的手机在锁屏状态也能听到高德导航的语音提示,不用担心一直开着手机屏幕费电了。夜间导航HUD抬头提示,打开高德导航并开启HUD,把手机放到汽车挡风玻璃下,高德导航会把路线提示倒映到汽车挡风玻璃上,看起来特别方便,不用担心低头看手机影响驾驶了。动态导航交通路况实时播报智能计算到达目的地所需的时间避堵路线方案规划摄像头提醒离线下载2D、3D离线地图分地区下载地图包全国地图包、全国概要图地图搜索热门地点、线路搜索公交、自驾出行线路规划公交、火车、天气查询服务全新引擎最新3D版本,360度旋转视角矢量数据传送观看更流畅、更清晰兴趣点餐饮、住宿、优惠、演出、团购全覆盖海量兴趣点随意搜叫车服务2013年7月,高德地图更新,新增打车功能,综合快的打车、嘀嘀打车两家资源,覆盖80%市场份额。与阿里合作后,高德地图凭借高市场占有率,逐渐从单一地图向LBS工具箱转变。新版高德地图不仅增加了可预约的出租车数量,提高了打车效率,覆盖城市也扩展到26个。推出顺风车业务2018年3月27日,高德地图宣布推出顺风车业务,成都、武汉两地率先上线,同时开启北京、上海、广州、深圳、杭州等城市的车主招募,之后逐步向全国更多城市拓展。高德表示,该公益顺风车平台没有任何商业化目的,承诺对用户永不抽佣,也不会打补贴战,而是基于其长期积累的自驾出行用户及出行调度能力,在不增加城市道路压力的情况下,以科技手段提升运力,及社会出行效率,缓解城市交通拥堵。 [6]  高德智慧景区2.02018年11月1日,高德地图宣布,“一张地图游乌镇”正式上线,这是继高德智慧景区2.0建设的 “智能云台山”之后落地的人文智慧景区产品。 [7]  多方向实时路况2018年11月,高德地图宣布在业内首次推出“多方向实时路况”,它实现了路口处的车道级导航能力,能对路口车辆进行更精准引导,称每天可为用户出行节约近10万小时。 [8]  返程直通车2020年2月15日,高德地图上线“返程直通车”一站式服务,通过疫情信息提醒、防疫检查站及高速收费站实时车流信息、返程人员信息在线登记等多项功能,帮助自驾返程用户更好规划行程,减少返程途中在疫情检查站的停留和等待时间。 [9]  家人地图2020年7月14日,高德上线了“家人地图”功能。用户可以让家人随时看到彼此的位置,特别是针对空巢老人家庭,子女忙于工作,父母独自在家,老人有没有出门,外出去到了哪里,有没有偏离日常行动轨迹,都可以在地图上随时查看。 [10] 
收起全文
精华内容
参与话题
  • 通过本课程的学习,大家可以系统的学习高德地图各个接口如何在自己的项目中使用。以及如何进行扩展学习。并且通过一个综合的实战案例来巩固知识点以及积累项目经验。 主要内容如下: 如何到...
  • html前端使用高德地图入门教程

    万次阅读 2019-10-11 17:12:44
    web端使用高德地图入门教程 不要问为什么使用高德地图,而不是百度地图,没有为什么 web端使用高德地图入门教程 开始 准备工作 开始 准备工作 如果开发者账号包括Key...

    开始

    准备工作

    注册Key

    如果开发者账号包括Key已经有了,请忽略此步骤

    1. 首先,注册开发者账号,成为高德开放平台开发者

    2. 登陆之后,在进入「应用管理」 页面「创建新应用」

    3. 为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 这里写图片描述

    4. 记住这个Key,等会要用,以后可能也会用,一定要记住。

    前期页面上的准备

    此时距离你的页面上出现地图,已经更近了一步

    1. 新建一个DIV,作为地图的容器(这一步和使用其他插件一样,必须新建一个挂载点)。
    2. 给这个新建的div设置好宽高(这里提醒一下,可以使用弹性布局,没有影响)。
    3. 在body后面引入高德地图的js。
    4. 最后,异步初始化高德地图插件,一定要异步,使用window.onLoad。
    //新建一个容器
    <div id="wrapper"></div>
    //设置宽和高
    <style>
    	#wrapper{
    		width: 500px;
    		height: 500px;
    	}
    </style>
    
    //引入js
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.8&key=您申请的key值"></script> 
    * 这里需要刚才申请的Key
    
    <script>
    	//初始化地图插件
    	window.onload = function(){
    		var map = new AMap.Map('wrapper');
    	}
    </script>
    

    这里写图片描述
    这里写图片描述

    • 好了,现在你的页面上已经出现了高德地图

    插件使用

    地图本身功能有限,很多地方需要使用插件满足自己的需求

    插件使用步骤

    1. 引入插件
    2. 创建插件实例
    3. 调用插件方法

    引入插件

    1.异步引入插件(推荐这种)

    	//引入单个插件
    	AMap.plugin('AMap.ToolBar',function(){//异步加载插件
            var toolbar = new AMap.ToolBar();
            map.addControl(toolbar);
        });
        //引入多个插件
        AMap.plugin(['AMap.ToolBar','AMap.Driving'],function(){//异步同时加载多个插件
          var toolbar = new AMap.ToolBar();
          map.addControl(toolbar);
          var driving = new AMap.Driving();//驾车路线规划
          driving.search(/*参数*/)
    	});
    

    2.同步引入插件(不推荐使用,就不讲了)

    定位

    如果在地图初始化时不配置中心点,和缩放级别,这个时候地图上面默认是你所处的位置,缩放级别也是默认的
    PC端默认是IP定位,如果IP定位无法使用则会自动切换到浏览器定位
    移动端默认是浏览器定位,如果浏览器定位无法使用则会自动切换到IP定位

    自定义地图显示位置和缩放级别

    	//对于地图的自定义,属性有很多,只列举三个
    	var map = new AMap.Map('container', {
            zoom:11,//缩放级别
            center: [116.397428, 39.90923],//地图显示中心点坐标,如果没有center属性,则会定位到你当前所处的位置
            viewMode:'3D'//使用3D视图
        });
    

    自定义坐标和缩放级别

    	//设置地图显示的中心点
    	map.setCenter([116.397428, 39.90923]);
    	//设置地图显示中心点,并缩放到指定级别
    	map.setZoomAndCenter(16, [116.397428, 39.90923]);
    

    添加实时路况图层

    	//实时路况图层
        var trafficLayer = new AMap.TileLayer.Traffic({
            zIndex: 10
        });
        map.add(trafficLayer);//添加图层到地图
    

    获取定位信息(需要使用插件)

    浏览器定位

    	map.plugin('AMap.Geolocation', function() {
    	  var geolocation = new AMap.Geolocation({
    	    // 是否使用高精度定位,默认:true
    	    enableHighAccuracy: true,
    	    // 设置定位超时时间,默认:无穷大
    	    timeout: 10000,
    	    // 定位按钮的停靠位置的偏移量,默认:Pixel(10, 20)
    	    buttonOffset: new AMap.Pixel(10, 20),
    	    //  定位成功后调整地图视野范围使定位位置及精度范围视野内可见,默认:false
    	    zoomToAccuracy: true,     
    	    //  定位按钮的排放位置,  RB表示右下
    	    buttonPosition: 'RB'
    	  })
    	
    	  geolocation.getCurrentPosition()
    	  AMap.event.addListener(geolocation, 'complete', onComplete)
    	  AMap.event.addListener(geolocation, 'error', onError)
    	
    	  function onComplete (data) {
    	    // data是具体的定位信息
    	    // 获取当前位置信息
    	    this._position = [data.position.getLng(),data.position.getLat()];
    	  }
    	
    	  function onError (data) {
    	    // 定位出错
    	  }
    	})
    

    定位到当前位置

    点击按钮,定位到当前位置

    //根据浏览器定位,已经获取到当前位置信息
    map.setCenter(this._position); 
    //如果同时需要缩放到指定缩放级别
    map.setZoomAndCenter(13, this._position);
    

    IP定位获取当前城市信息

    	AMap.plugin('AMap.CitySearch', function () {
    	  var citySearch = new AMap.CitySearch()
    	  citySearch.getLocalCity(function (status, result) {
    	    if (status === 'complete' && result.info === 'OK') {
    	      // 查询成功,result即为当前所在城市信息
    	    }
    	  })
    	})
    

    覆盖物

    目前只用到点标记,所以暂时只讲点标记

    添加覆盖物

    1. 点标记
    • 使用点标记肯定都是自定义点标记,可以自定义图片,字体等
    	var marker = new AMap.Marker({ //添加自定义点标记
            map: map,
            position: [116.397428, 39.90923], //基点位置
            offset: new AMap.Pixel(-17, -42), //相对于基点的偏移位置
            draggable: true,  //是否可拖动
            content: '<div class="marker-route marker-marker-bus-from"></div>'   //自定义点标记覆盖物内容
        });
    
    	//可以使用css对content里面的dom元素设置样式
    
    1. 灵活点标记
    • 标记大小会随着地图缩放跟着变化
    1. 导航,导航同样属于覆盖物范围
       //导航需要一个起点和终点 
       var driving = new AMap.Driving({
            map: map,
            panel: "panel"
        }); 
        // 根据起终点经纬度规划驾车导航路线
        driving.search(new AMap.LngLat(116.379028, 39.865042), new AMap.LngLat(116.427281, 39.903719));
    
    1. 海量点标记MassMarks
    • 海量点标记不是普通的覆盖物,它实际上是由海量点组成的一个图层
    • 对于1000个以上的点标记,强烈建议海量点,相当于减少dom操作,极大的提升了浏览器性能
    	// 创建样式对象
    	var styleObject = new AMap.StyleObject({
    	    url: '//vdata.amap.com/icons/b18/1/2.png',  // 图标地址
    	    size: new AMap.Size(11,11),      // 图标大小
    	    anchor: new AMap.Pixel(5,5) // 图标显示位置偏移量,基准点为图标左上角
    	});
    	// 创建海量点
    	var massMarks = new AMap.MassMarks({
    	    zIndex: 5,  // 海量点图层叠加的顺序
    	    zooms: [3, 19],  // 在指定地图缩放级别范围内展示海量点图层
    	    style: styleObject  // 设置样式对象
    	});
    	// 海量点信息
    	var data = [{
    	    lnglat: [116.405285, 39.904989], //点标记位置
    	    name: 'beijing',
    	    id:1
    	}, // {}, …,{}, …
    	];
    	massMarks.setData(data);
    	// 将海量点添加至地图实例
    	massMarks.setMap(map);
    

    获取覆盖物

    	//获取所有的覆盖物(点标记,导航等)
    	that.map.getAllOverlays();
    	//获取所有的点标记
    	that.map.getAllOverlays('marker');
    

    这里获取所有的点标记或覆盖物,意思是地图上面所有的添加的点标记或者覆盖物,而不是当前视野范围内的点标记或者覆盖物,如果有需求是获取当前视野范围内的点标记或覆盖物,就需要自己根据这个方法写了。具体什么方法,如果有想了解的,请在下方留言。

    覆盖物的操作

    	1.删除所有覆盖物
    	// 使用clearMap方法删除所有覆盖物
    	map.clearMap();
    	
    	2.删除点标记
    	// 单独移除点标记
    	map.remove(marker);
    	
    	3.取消导航
    	
    	//取消导航覆盖物
    	driving.clear();
    	
    	//一般覆盖物都会有隐藏和显示的方法,这个可以极大的优化性能,因为增加和删除覆盖物操作非常浪费性能。
    	4.覆盖物隐藏
    	marker.hide();
    	5.覆盖物显示
    	marker.show();
    

    图层

    设置图层

    	// 构造官方卫星、路网图层
    	var layers =  [
    	    new AMap.TileLayer.Satellite(),
    	    new AMap.TileLayer.RoadNet()
    	]
    	// 地图上设置图层
    	map.setLayers(layers);
    

    获取图层

    	//获取图层数据
    	map.getLayers();
    

    移除图层

    	// 移除一个图层
    	// layer1指的是建立图层的变量
    	map.remove(layer1);
    

    3D地图

    	var map = new AMap.Map('container', {
    	    pitch:75, // 地图俯仰角度,有效范围 0 度- 83 度
    	    viewMode:'3D' // 地图模式
    	});
    

    未完待续…

    展开全文
  • 通过本课程的学习,大家可以系统的学习高德地图各个接口如何在自己的项目中使用。以及如何进行扩展学习。 学习完本课程可以继续学习“Web前端开发仿美团/饿了吗移动App之高德地图接口对接案例”, 主要内容: ...
  • 高德地图自定义地图apidemo,地图样式,标注样式,自定义窗体
  • (注:先注册,高德开发者 ) 1.地址:https://lbs.amap.com/ 2.控制台 3.创建新应用 4.编辑信息 4.1 获取安全码SHA1(命令提示符方式:win+r - cmd ) cd .android keytool -list -v -keystore debug....

    (注:先注册,高德开发者 )

    1.地址:https://lbs.amap.com/

    2.控制台

    3.创建新应用

    4.编辑信息

    4.1 获取安全码SHA1(命令提示符方式:win+r - cmd )

          cd .android 

         keytool -list -v -keystore debug.keystore

    4.2 获取PackageName

          打开Android项目的清单文件

          

    5.把高德地图引入项目

    5.1

    5.2 相关下载

    开发包定制下载

     

    5.3 

    解压文件,导入项目

    添加: 

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    6.清单文件配置

    6.1 权限

           

    <!--地图包、搜索包需要的基础权限-->
    <!--允许程序打开网络套接字-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--允许程序设置内置sd卡的写权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!--允许程序获取网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--允许程序访问WiFi网络信息-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!--允许程序读写手机状态和身份-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    6.2 配置key

       

       

    7.显示地图

    显示结果:

           

       注:模拟器报错,真机没有问题(模拟器问题未解决)

    参考文档:https://lbs.amap.com/api/android-sdk/guide/create-map/show-map

    展开全文
  • 之前在做大创的时候,就用到了高德地图,但是当时是为了赶项目,所以只是按照官方的demo代码搬运了过来,而具体哪个类是干什么的根本不清楚,而且一个完整的流程也是很模糊。现在再次用到了这个东西,所以觉得一定要...

    之前在做大创的时候,就用到了高德地图,但是当时是为了赶项目,所以只是按照官方的demo代码搬运了过来,而具体哪个类是干什么的根本不清楚,而且一个完整的流程也是很模糊。现在再次用到了这个东西,所以觉得一定要好好研究一下,为了以后用的更方便,总不能每次都搬运人家官方的demo吧-。=。

    今天这篇是最基础的一篇,我会从申请高德API的key开始走一遍流程,因为相信大家跟我一样,看官网给的代码都已经晕头转向了(他写的实在是太乱了)。

     

    第二篇:高德地图Poi搜索周边位置https://blog.csdn.net/zy_jibai/article/details/103017217

    接下来我们按照申请的流程一步一步的实现高德地图的API使用:

    一、申请和配置

    首先来看一下申请和配置的流程:

    1、申请注册成为开发者。

    这一步应该不用怎么说吧,大家自己都会注册账号密码什么的。。

    2、申请应用key

    ①首先点开控制台,点击应用管理:

    我这里已经有了四个应用,如果是刚刚创建的话是没有的。

    ②点击右上角创建应用:

     

    应用名称随便填,应用类型也随便填。点击创建

    我们创建好了之后会在应用中显示刚刚创建和已经创建的应用。

    ③点击右上角添加新Key

    我们只说一下获取这两个安全码SHA1:

    2.1.调试版:我们打开Android Studio,点击gradle projects(默认在右侧),app->Tasks->android->signingReport。

     

    双击后,他会给我们调试版的安全码SHA1。这个测试版的安全码我们就可以填入了。

     

    2.2.发布版:这个需要我们找到自己的签名证书文件,如果没有的话,下面笔者带着大家申请一个:

     

    1. 申请签名证书文件
    2. 打开终端或者Terminal,获取正式版安全码SHA1。

    2.2.1申请签名证书文件:

    关于申请签名证书文件的方式有很多,可以通过终端,也可以通过Android  Studio,个人比较喜欢用Android Studio(可能是因为比较懒吧-。+!!)。

    点击Generate Signed APK 。

    他会出现一个这样的界面。在第一行中的Key Store path中指定我们签名文件的路径,如果没有的话点击Create new...

     

    随便填,只要你能记得住就行,Validity为签名文件有效时间,当然我们肯定用不了这么长时间的。点击ok。

    然后退出Generate signed APK,因为我们只是为了生成一个签名证书文件,又不是发布正式版的APK。

     

    2.2.2打开终端或者Terminal。

    推荐大家使用Terminal,因为Android Studio已经集成了,用起来比较方便(本人就是懒-。+)。

    首先要移动到我们刚刚生成的签名证书文件的路径下。

     

    然后输入以下代码:

    keytool -list -v -keystore 这是我们刚刚创建的签名证书文件的名字

    点击enter,

     

    他会出现让我们输入密匙口令,这个就是我们刚才创建签名文件的时候自己设置的。

     

    现在我们就获取到正式版的SHA1安全码了。

    现在我们将测试安全码和正式安全码填入,下面的包名我们在AndroidManifest.xml中自己就可以查找。不多说。

    我们看到现在已经应用中已经有了key。

     

    3、在Project中添加配置。

    我们从官方下载的SDK解压后如下:

    我下的是6.3.0的版本:

     

    3.1.导入jar包。

    3.1.1.我们将里面的jar包放入app/libs文件目录下。

     

    因为我已经导入了,在大家那里应该是看不到jar包前面的这个小箭头的。

    3.1.2.导入jar包

    导入jar包的方式有两种:

    一种是最暴力的,直接点击File->Sync Project with Gradle Files ,将所有libs目录下的jar包全部导入。

    另一种是我们选择将哪个jar包导入。File->Project Structure ->Dependencies -> + ->Jar dependency->找到自己Application Project的路径,->libs中选择自己想要导入的jar包。

    个人觉得还是第二中比较好,因为不必要的jar包导入让整个app看着很胖。

     

    3.2.放入.so文件

    放入.so文件同样有两种方式:使用默认配置(不修改build.gradle)和修改build.gradle配置。

    使用默认配置:将解压缩剩下的(除了jar包)的文件夹放入src/main/jniLibs文件夹下(没有自己创建,在几版本的Android Studio中我记得添加jni就会自动创建这个目录)

    修改build.gradle:将文件夹放入刚才的app/libs目录。然后打开build.gradle。

    在android下添加如下标签:

    android {
        compileSdkVersion 26
        defaultConfig {
            ......
            /*sourceSets{
                main{
                    jniLibs.srcDirs = ['libs']
                }
            }*/
        }
        ......
    }

     

    注释掉的部分,因为本人比较懒,所以用的默认配置-。+。

     

     

    3.3.在AndroidManifest.xml中进行配置。

    3.3.1.权限声明

    我们开发肯定需要一系列权限的声明(我直接打出来了,大家复制粘贴吧23333):

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
        <!--用于访问GPS定位-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
        <!--获取运营商信息,用于支持提供运营商信息相关的接口-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
        <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
        <!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
        <!--用于访问网络,网络定位需要上网-->
        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <!--用于读取手机当前的状态-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
        <!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
        <!--用于申请调用A-GPS模块-->
        <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
        <!--用于申请获取蓝牙信息进行室内定位-->
        <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
        <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

    3.3.2.在Application标签中加入 meta-data标签

    <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="07e23534b69a1ea1dd7b17cc2812142c" />

     

    其中name一定要这样写,value就是我们刚才申请的key。

     

    3.3.3.声明Service组件

    <service android:name="com.amap.api.location.APSService"/>

     

    到现在为止我们申请和配置的工作就做完了(感觉也不是很多是吧!)

     

    二、显示地图

    由于篇幅的原因,我们今天只看一下如何显示地图以及显示定位蓝点。

    1、在layout中添加地图容器。

    这个是一个很没有操作的事情,我们默认一般都使用mapview,官方还提供了6中容器用来显示地图。

    <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
    />
    

    2、使用AMap类。

    这个AMap类可以说是一个很重要的类,他是地图的控制器类,主要负责的工作有:

     

    • 地图模式切换(黑夜、卫星......)
    • 改变地图状态(旋转角度、俯仰角、中心坐标、缩放级别等)
    • 添加标记点(Marker)
    • 绘制几何图形(Polyline、Polyon、Circle等)
    • 事件监听(点击、手势)

    下面我们一起看一下AMap类的主要方法:

     

    限定符

    返回值

    方法名

    介绍

    字段

    public final 

    void

    setMapType(int)

    设置地图模式

    MAP_TYPE_NORMAL  普通

    MAP_TYPE_SATELLITE 卫星

    MAP_TYPE_NIGHT 夜间

    MAP_TYPE_NAVI 导航

    MAP_TYPE_BUS 公交

    public final

    int

    getMapType()

    获取地图模式

     

    public final

    UiSettings

    getUiSettings()

    获取地图UI控制器

     

    public final

    void

    setMylocationStyle(MyLocationStye)

    设置定位小蓝点(坐标位置)

     

    public final

    void

    setMylocationEnabled(boolean)

    设置是否启动定位蓝点

    true:启动显示

    false:隐藏定位蓝点,并不定位

    默认false

    public final

    void

    setTrafficEnabled(boolean)

    设置是否打开交通图层

    true:打开

    false:不打开

    默认true

    public final

    boolean

    isTrafficEnabled()

    获取是否已打开交通图层

     

    public final

    void

    showMapText(boolean)

    设置是否打开文字标注

    默认true

    public final

    void

    showIndoorMap(boolean)

    设置是否显示室内地图

    默认false

    public final

    void

    showBuildings(boolean)

    设置是否显示3D建筑

    默认true

    这里面涉及到两个其他的类:MyLocationStyle类和UiSettings类。我们今天主要看一下MyLocationStyle类:

    3、MyLocationStyle类介绍

    MyLocationStyle类为定位小蓝点的绘制样类。方法如下:

     

    限定符

    返回值

    方法名

    介绍

    字段

    public

    MyLocationStyle

    myLocationIcon(BitmapPescriptor)

    设置定位蓝点的图标

     

    public

    MyLocationStyle

    anchor(float u,float v)

    设置定位图标锚点的偏移量

     

    public

    MyLocationStyle

    radiusFillColor(int color)

    设置圆形区域的填充颜色

     

    public

    MyLocationStyle

    strokeColor(int color)

    设置圆形区域的边框颜色

     

    public

    MyLocationStyle

    strokeWidth(float width)

    设置圆形区域的边框宽度

     

    public

    MyLocationStyle

    inteval(long interval)

    设置连续定位请求间隔

     

    public

    MyLocationStyle

    showMyLocation(boolean visible)

    是否显示蓝点图标

    默认true,false情况会定位,但是图标不显示

    public

    MyLocationStyle

    myLocationType(int type)

    设置位置展示模式

    _SHOW 只定位一次

    _LOCAE 只定位一次,且将视角移动到地图中心点

    _FOLLOW 连续定位,将视角移动到中心点,定位蓝点随设备移动。

    _MAP_ROTATE 连续、视角移动到中心点,地图依照设备防线旋转,定位点随设备移动

    _LOCATON_ROTATE 连续、视角移动到中心点,定位点照地图方向旋转,跟设备移动。

    _LOCATION_ROTATE_NO_CENTER

    _MAP_ROTATE_NO_CENTER

    _FOLLOW_NO_CENTER

    后面这三个对应上面的三个,只是不一定到地图中心点

    可以看出MyLocationStyle是支持链式编写。

     

    有了上面的这些方法介绍,相信大家已经知道如何去显示一个地图了,下面直接给大家带来一个代码栗子了:

    private void initMap(Bundle savedInstanceState) {
            location = (TextView) findViewById(R.id.sample_text);
            location.setText(stringFromJNI());
            mapView = (MapView) findViewById(R.id.map);
            mapView.onCreate(savedInstanceState);
            if (aMap == null) {
                aMap = mapView.getMap();   //获取到aMap实例,从地图容器中获取
            }
    
            MyLocationStyle myLocationStyle;
            myLocationStyle = new MyLocationStyle();//初始化定位蓝点样式类
    
            myLocationStyle.radiusFillColor(getColor(R.color.colorAlphaRed));//设置圆形区域填充颜色为红色
    
            myLocationStyle.interval(5000); //设置连续定位模式下的定位间隔,只在连续定位模式下生效
    
            myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,地图依照设备方向旋转,并且蓝点会跟随设备移动。
    
            aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Style
    
            aMap.getUiSettings().setMyLocationButtonEnabled(true);  //设置默认定位按钮是否显示,非必需设置。
            aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,
            aMap.showIndoorMap(true);//室内定位开启
    
            aMap.setMapType(AMap.MAP_TYPE_NIGHT);//地图类型设为夜晚
    
    }

    效果如下:

    由于模拟器无法实现地图定位,所以只能用真机截个图了!!!

    好了,关于高德地图初次使用就到这里了,下一篇中会给大家介绍如何实现定位功能。

    喜欢的朋友,如果感觉对你有所帮助的话,希望支持关注一波!!!

     
     
    展开全文
  • 快速简单高德地图接入

    千次阅读 2018-04-13 15:17:17
    1.导入SDK链接:https://pan.baidu.com/s/1vdoPXmsZ4CuVfV_J144zuw 密码:fvv2里面有定位 地图 获取屏幕中心经纬度 距离测量用的是EventBus传值2.添加权限&lt;!-- 用于访问网络,网络定位需要上网 --&gt; &...

    1.导入SDK

    链接:https://pan.baidu.com/s/1vdoPXmsZ4CuVfV_J144zuw 密码:fvv2

    里面有定位 地图  获取屏幕中心经纬度 距离测量

    用的是EventBus传值

    2.添加权限

    <!-- 用于访问网络,网络定位需要上网 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- 写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据 -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <!-- 用于进行网络定位 -->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
        <!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <!-- 用于访问GPS定位 -->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
        <!-- 用于读取手机当前的状态 -->
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <!-- 这个权限用于允许程序在手机屏幕关闭后后台进程仍然运行 -->
        <user-permission android:name="android.permission.WAKE_LOCK" />


    3.加入你的application里面

    <meta-data
                android:name="com.amap.api.v2.apikey"
                android:value="你的key" />
    
            <service android:name="com.amap.api.location.APSService" />


    4.到EventBus包

    implementation 'de.greenrobot:eventbus:3.0.0-beta1'

    5.主函数

    public class MapActivity extends BaseActivity implements
            GeocodeSearch.OnGeocodeSearchListener,
            AMap.OnCameraChangeListener,
            DistanceSearch.OnDistanceSearchListener, LocationSource {
    
    
        private MapView mapView;
        private AMap aMap;
        private boolean tag=false;
        private GeocodeSearch geocodeSearch;
        private OnLocationChangedListener mListener;
        private boolean isFirstLoc=false;
    
        private double latitu2,longitu2;
        public double latitu1=0.0;
        public double longitu1=0.0;
        private DistanceSearch distanceSearch;
        private DistanceSearch.DistanceQuery distanceQuery;
    
        //声明AMapLocationClient类对象
        public AMapLocationClient mLocationClient = null;
    
    
    
        /**
         * 声明定位回调监听器
         */
        public AMapLocationListener mLocationListener = new AMapLocationListener() {
            @Override
            public void onLocationChanged(AMapLocation amapLocation) {
                if (amapLocation != null) {
                    if (amapLocation.getErrorCode() == 0) {
                        //定位成功回调信息,设置相关消息
                        amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表
                        amapLocation.getLatitude();//获取纬度
                        amapLocation.getLongitude();//获取经度
                        amapLocation.getAccuracy();//获取精度信息
                        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        Date date = new Date(amapLocation.getTime());
                        df.format(date);//定位时间
                        amapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果,网络定位结果中会有地址信息,GPS定位不返回地址信息。
                        amapLocation.getCountry();//国家信息
                        amapLocation.getProvince();//省信息
                        amapLocation.getCity();//城市信息
                        amapLocation.getDistrict();//城区信息
                        amapLocation.getStreet();//街道信息
                        amapLocation.getStreetNum();//街道门牌号信息
                        amapLocation.getCityCode();//城市编码
                        amapLocation.getAdCode();//地区编码
                        amapLocation.getAoiName();//获取当前定位点的AOI信息
                        lat = amapLocation.getLatitude();
                        lon = amapLocation.getLongitude();
                        Log.v("pcw", "lat : " + lat + " lon : " + lon);
                        Log.v("pcw", "Country : " + amapLocation.getCountry() + " province : " + amapLocation.getProvince() + " City : " + amapLocation.getCity() + " District : " + amapLocation.getDistrict());
    
                        // 设置当前地图显示为当前位置
                        aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lon), 15));
                        MarkerOptions markerOptions = new MarkerOptions();
                        aMap.addMarker(markerOptions);
    
                        // 如果不设置标志位,此时再拖动地图时,它会不断将地图移动到当前的位置
                        if (isFirstLoc==true) {
                            //设置缩放级别
                            aMap.moveCamera(CameraUpdateFactory.zoomTo(17));
                            //将地图移动到定位点
                            aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));
                            //点击定位按钮 能够将地图的中心移动到定位点
                            mListener.onLocationChanged(amapLocation);
                            isFirstLoc = false;
                        }
    
                    } else {
                        //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。
                        Log.e("AmapError", "location Error, ErrCode:"
                                + amapLocation.getErrorCode() + ", errInfo:"
                                + amapLocation.getErrorInfo());
                    }
                }
            }
        };
    
        //声明mLocationOption对象
        public AMapLocationClientOption mLocationOption = null;
        private double lat;
        private double lon;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.map_activity);
            mapView = (MapView) findViewById(R.id.map);
            mapView.onCreate(savedInstanceState);//必须要写
    
            //初始化定位
            mLocationClient = new AMapLocationClient(getApplicationContext());
            //设置定位回调监听
            mLocationClient.setLocationListener(mLocationListener);
    
            init();
            aMap.setOnCameraChangeListener(this);
    
    
    
    
        }
    
    
        /**
         * * 初始化AMap对象
         */
        private void init() {
            if (aMap == null) {
                aMap = mapView.getMap();
            }
            //构造一个默认的位置
            LatLng latLng = new LatLng(latitu1,longitu1);
            aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng,11));
            // 是否显示定位按钮
            aMap.getUiSettings().setMyLocationButtonEnabled(true);
            aMap.setMyLocationType(AMap.LOCATION_TYPE_MAP_ROTATE);
            //设置定位监听
            aMap.setLocationSource(this);
            // 是否可触发定位并显示定位层
            aMap.setMyLocationEnabled(true);
    
            MyLocationStyle myLocationStyle = new MyLocationStyle();
            myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher));// 自定义定位蓝点图标*/
            myLocationStyle.strokeColor(Color.argb(0, 0, 0, 0));// 自定义精度范围的圆形边框颜色
            myLocationStyle.radiusFillColor(Color.argb(0, 0, 0, 0));//圆圈的颜色,设为透明的时候就可以去掉园区区域了
            aMap.setMyLocationStyle(myLocationStyle);
    
            //地理搜索类
            geocodeSearch = new GeocodeSearch(this);
            geocodeSearch.setOnGeocodeSearchListener(this);
            setUpMap();
    
        }
    
        private void setUpMap() {
            //初始化定位参数
            mLocationOption = new AMapLocationClientOption();
            //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
            mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
            //设置是否返回地址信息(默认返回地址信息)
            mLocationOption.setNeedAddress(true);
            //设置是否只定位一次,默认为false
            mLocationOption.setOnceLocation(true);
            //设置是否强制刷新WIFI,默认为强制刷新
            mLocationOption.setWifiActiveScan(true);
            //设置是否允许模拟位置,默认为false,不允许模拟位置
            mLocationOption.setMockEnable(false);
            //设置定位间隔,单位毫秒,默认为2000ms
            mLocationOption.setInterval(2000);
            //给定位客户端对象设置定位参数
            mLocationClient.setLocationOption(mLocationOption);
            //启动定位
            mLocationClient.startLocation();
        }
    
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onResume() {
            super.onResume();
            mapView.onResume();
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onPause() {
            super.onPause();
            mapView.onPause();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            mLocationClient.stopLocation();//停止定位
            //关闭后台定位,参数为true时会移除通知栏,为false时不会移除通知栏,但是可以手动移除
            if(android.os.Build.VERSION.SDK_INT >= 26){
                mLocationClient.disableBackgroundLocation(true);
            }
    
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
    
        /**
         * 方法必须重写
         */
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mapView.onDestroy();
            mLocationClient.onDestroy();//销毁定位客户端。
        }
        public void affirm(View view){
             tag=true;
            //逆地理编码
            getAddressByLatlng(new LatLng(latitu1,longitu1));
            getAddressByLatlng(new LatLng(latitu2,longitu2));
            chelian();
            Intent i=new Intent();
            setResult(0,i);
            finish();
        }
    
        @Override
        public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
            RegeocodeAddress regeocodeAddress = regeocodeResult.getRegeocodeAddress();
            ArrayList<String> arr = new ArrayList<>();
            if (tag == true) {
                arr.add(regeocodeAddress.getProvince());
                arr.add(regeocodeAddress.getCity());
                arr.add(regeocodeAddress.getDistrict());
                arr.add(regeocodeAddress.getTownship());
                arr.add(regeocodeAddress.getFormatAddress());
                arr.add(regeocodeAddress.getNeighborhood());
                EventBus.getDefault().post(arr);
            }
    
            Log.d("aaaaa", "onRegeocodeSearched: " + regeocodeAddress.getDistrict());
        }
        //
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {
            LatLng target = cameraPosition.target;
            if(latitu1==0.0){
                latitu1=target.latitude;
                longitu1=target.longitude;
            }
            latitu2=target.latitude;
            longitu2=target.longitude;
            Log.d("aaaaa", "onCameraChange111: "+target.latitude+"-----"+target.longitude);
    
        }
    
        @Override
        public void onCameraChangeFinish(CameraPosition cameraPosition) {
    
        }
    
        @Override
        public void onGeocodeSearched(GeocodeResult result, int rCode) {
    
        }
        private void getAddressByLatlng(LatLng latLng) {
            //逆地理编码查询条件:逆地理编码查询的地理坐标点、查询范围、坐标类型。
            LatLonPoint latLonPoint = new LatLonPoint(latLng.latitude, latLng.longitude);
            RegeocodeQuery query = new RegeocodeQuery(latLonPoint, 500, GeocodeSearch.GPS);
            //异步查询
            geocodeSearch.getFromLocationAsyn(query);
        }
        public void chelian(){
            distanceSearch = new DistanceSearch(this);
            distanceSearch.setDistanceSearchListener(this);
            distanceQuery = new DistanceSearch.DistanceQuery();
            LatLonPoint start = new LatLonPoint(latitu1, longitu1);
            LatLonPoint dest = new LatLonPoint(latitu2, longitu2);
    
            //设置起点和终点,其中起点支持多个
            List<LatLonPoint> latLonPoints = new ArrayList<LatLonPoint>();
            latLonPoints.add(start);
            distanceQuery.setOrigins(latLonPoints);
            distanceQuery.setDestination(dest);
            //设置测量方式,支持直线和驾车
            distanceQuery.setType(DistanceSearch.TYPE_DRIVING_DISTANCE);
            //请求经纬度的距离
            distanceSearch.calculateRouteDistanceAsyn(distanceQuery);
        }
        //得到距离   返回结果成功或者失败的响应码。1000为成功,其他为失败
        @Override
        public void onDistanceSearched(DistanceResult result, int i) {
            if(i==1000){
                List<DistanceItem> distanceResults = result.getDistanceResults();
                for (int j = 0; j <distanceResults.size() ; j++) {
                    Log.d("aaaaa", "onDistanceSearched: "+distanceResults.get(j).getDistance()+"米");
                }
    
            }
        }
    
    
        @Override
        public void activate(OnLocationChangedListener onLocationChangedListener) {
            mListener = onLocationChangedListener;
            isFirstLoc=true;
        }
    
        @Override
        public void deactivate() {
            mListener = null;
        }
    }
    

    7.主布局

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".pub.MapActivity">
        <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@mipmap/coordicon"
            android:layout_centerInParent="true"/>
        <Button
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"
            android:layout_width="180dp"
            android:layout_height="wrap_content"
            android:text="@string/pub_but"
            android:textColor="@color/white"
            android:background="@drawable/usercenter_register_button"
            android:onClick="affirm"
            android:layout_marginBottom="7dp"
            />
    </RelativeLayout>




    8.副布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="yizhong.com.xtzhangbinbin.jpq.app.Main2Activity">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="bb"
            android:onClick="bb"/>
    </LinearLayout>


    9.如果你写到这里运行没有实现定位成功的话   一定要注意你的包名



    这里的包名只能是下面图的包名




    下面我在送大家一个查询SHA1的方法直接在你的项目中运行得到返回值就行了

    //获取SHA1安全码
        public static String sHA1(Context context) {
            try {
                PackageInfo info = context.getPackageManager().getPackageInfo(
                        context.getPackageName(), PackageManager.GET_SIGNATURES);
                byte[] cert = info.signatures[0].toByteArray();
                MessageDigest md = MessageDigest.getInstance("SHA1");
                byte[] publicKey = md.digest(cert);
                StringBuffer hexString = new StringBuffer();
                for (int i = 0; i < publicKey.length; i++) {
                    String appendString = Integer.toHexString(0xFF & publicKey[i])
                            .toUpperCase(Locale.US);
                    if (appendString.length() == 1)
                        hexString.append("0");
                    hexString.append(appendString);
                    hexString.append(":");
                }
                String result = hexString.toString();
                return result.substring(0, result.length()-1);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return null;
        }

    直接在main函数中运行这个方法将返回值打印一下   复制到高德官网上就行了


    展开全文
  • 高德地图爬虫

    千次阅读 2019-02-27 11:11:13
    高德地图爬虫 工具:Pycharm,win10,Python3.6.4 1.需求分析 这篇爬虫和上一篇百度地图爬虫要求一样,百度地图爬虫我发现有一个auth参数会一直变化,一旦变化则获取的数据是不准确的,所以我上高德地图看了一下,...
  • 阿里巴巴高德地图 AMAP-TECH 算法大赛于 7 月 8 日开启初赛,赛题为「基于车载视频图像的动态路况分析」,活动邀请了业界权威专家担任评委,优秀选手不仅可以瓜分丰厚的奖金,领取荣...
  • 博主这里用了vue-admin-template作为前台模板...引入(那个key换成自己在高德申请的): <link rel="stylesheet" href="https://cache.amap.com/lbs/static/main.css" /> <script type="text/javascript
  • 高德地图 JS Web 添加自定义图标,自定义窗口标记 如何做一个类似这样的地点指示的地图: 线上实例: https://kylebing.cn/tools/car-manage/ 你需要掌握的 在进行之前你需要了解的: 高德地图 Web 端 JS API 的...
  • 高德离线地图的使用场景还是很多的,但是他的api在国外,想参考api对网络差的朋友来说不是一件容易的事,对我来说一样,在这里整理下他的api内容。 注:本文是将官网api挪动出来,网好的童鞋想看原版的请点击官网...
  • 高德地图禁用鼠标缩放使用加减号缩放按钮缩放地图 varmap = new AMap.Map('thisabigmap', { resizeEnable: false, center: new AMap.LngLat(114.513536,38.044663), // 地图中心点位置+ zoom:8, // 初始...
  • 高德地图获取地址坐标

    万次阅读 2013-06-03 15:29:21
    http://api.amap.com/Javascript/example# 有一个地图工具---》
  • 高德地图设置地图缩放比例

    万次阅读 2017-04-06 17:06:29
    aMap.moveCamera(CameraUpdateFactory.zoomTo(18)); 这个数值越大显示的越详细
  • 高德地图 禁止拖动和缩放的方法

    万次阅读 2016-08-25 21:32:04
    初始化参数中设置zoomEnable:false, dragEnable: false,
  • 如题,在使用高德地图的jsAPI的时候,试过多种方法都无法向信息窗体添加方法,貌似是因为信息窗体好像作为某种东西被封起来了,如何解决
  • 高德使用高德定位后,如果不设置,缩放级别很低,需要一直放大才能看具体的地理位置,那么可以再地图初始化的时候,调用AMap.moveCamera(CameraUpdateFactory.zoomTo(zoom))方法设置地图的缩放级别,记住带在地图...
  • 高德地图跟百度地图经纬度互转

    万次阅读 2018-01-05 12:52:55
    高德经纬度转百度经纬度 http://api.map.baidu.com/geoconv/v1/?coords=113.9609047719607,22.537714359860125&from=3&... 高德地图官方文档有详细介绍http://lbs.amap.com/api/javascript-api/reference/lnglat-to
  • Polygon类 覆盖物>多边形 相关参数详情https://lbs.amap.com/api/javascript-api/reference/overlay#polygon <!doctype html> <html> <head> <meta charset="utf-8">...meta h...
1 2 3 4 5 ... 20
收藏数 25,017
精华内容 10,006
关键字:

高德地图