高德地图_高德地图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

    展开全文
  • 1.今天研究了一下高德地图的POI周边搜索,以及改变下初始定位,主要涉及关键字搜索和以及marker展示,还包括搜索结果信息的获取。2.下面直接上源码,上面都已注释布局文件:poi_around_search.xml ...

    1.今天研究了一下高德地图的POI周边搜索,以及改变下初始定位,主要涉及关键字搜索和以及marker展示,还包括搜索结果信息的获取。

    2.下面直接上源码,上面都已注释

    布局文件:poi_around_search.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center_horizontal" >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            <com.amap.api.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true" >
            </com.amap.api.maps.MapView>
    
        </RelativeLayout>
    
        <RelativeLayout
            android:id="@+id/search_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_marginLeft="@dimen/offset_title"
            android:layout_marginRight="@dimen/offset_title"
            android:layout_marginStart="@dimen/offset_title"
            android:layout_marginTop="@dimen/offset_title"
            android:gravity="center_vertical"
            android:orientation="horizontal" >
    
            <TextView
                android:id="@+id/btn_search"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_alignParentEnd="true"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:background="@drawable/offlinearrow_tab2_pressed"
                android:clickable="true"
                android:gravity="center"
                android:paddingEnd="12dp"
                android:paddingLeft="12dp"
                android:paddingRight="12dp"
                android:paddingStart="12dp"
                android:text="搜索"
                android:textColor="@color/white"
                android:textSize="12dp"/>
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerVertical="true"
                android:layout_toLeftOf="@+id/btn_search"
                android:layout_toStartOf="@+id/btn_search"
                android:background="@drawable/search_input_half"
                android:clickable="true"
                android:gravity="center_vertical" >
    
    
                <EditText
                    android:id="@+id/input_edittext"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:drawableLeft="@drawable/search_input"
                    android:background="@color/transparent"
                    android:hint="请输入搜索关键字"
                    android:textColorHint="@color/darkgrey"
                    android:singleLine="true"
                    android:textColor="@color/gary"
                    android:textSize="14sp" />
            </LinearLayout>
        </RelativeLayout>
        <RelativeLayout
            android:id="@+id/poi_detail"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_alignParentBottom="true"
            android:background="@drawable/border_bg"
            android:visibility="gone">
    
            <TextView
                android:id="@+id/poi_name"
                android:layout_width="wrap_content"
                android:layout_height="30dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_marginLeft="12dp"
                android:layout_marginStart="12dp"
                android:ellipsize="end"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:textColor="#5566b8"
                android:textSize="15sp" />
    
    
            <TextView
                android:id="@+id/poi_address"
                android:layout_width="wrap_content"
                android:layout_height="35dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@id/poi_name"
                android:layout_marginLeft="12dp"
                android:layout_marginStart="12dp"
                android:gravity="center_vertical"
                android:singleLine="true"
                android:textColor="#333333"
                android:textSize="15sp" />
        </RelativeLayout>
    
    </RelativeLayout>

    3.代码文件:PoiAroundSearch.java

    package com.dragon.arnav.basicFuction.locationMap;
    
    import android.app.Activity;
    import android.graphics.BitmapFactory;
    import android.graphics.Color;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.EditText;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    
    import com.amap.api.maps.AMap;
    import com.amap.api.maps.CameraUpdateFactory;
    import com.amap.api.maps.MapView;
    import com.amap.api.maps.model.BitmapDescriptor;
    import com.amap.api.maps.model.BitmapDescriptorFactory;
    import com.amap.api.maps.model.CircleOptions;
    import com.amap.api.maps.model.LatLng;
    import com.amap.api.maps.model.LatLngBounds;
    import com.amap.api.maps.model.Marker;
    import com.amap.api.maps.model.MarkerOptions;
    import com.amap.api.services.core.LatLonPoint;
    import com.amap.api.services.core.PoiItem;
    import com.amap.api.services.core.SuggestionCity;
    import com.amap.api.services.poisearch.PoiResult;
    import com.amap.api.services.poisearch.PoiSearch;
    import com.dragon.arnav.R;
    import com.dragon.arnav.basicFuction.util.ToastUtil;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * This file created by dragon on 2016/8/4 13:19,
     * belong to com.dragon.arnav.basicFuction.locationMap .
     */
    public class PoiAroundSearch extends Activity implements OnClickListener,AMap.OnMapClickListener,
            AMap.OnInfoWindowClickListener,AMap.InfoWindowAdapter,AMap.OnMarkerClickListener,PoiSearch.OnPoiSearchListener {
        private MapView mapView;
        private AMap mAMap;//地图对象
        private PoiResult poiResult;//the result of the poi
        private int currentPage = 0;//the page start with 0
        private PoiSearch.Query query;//poi query
        //当前定位在深圳市南山区,这个经纬度应该是经过偏移的,具体原因,相信你懂的
        private LatLonPoint lp=new LatLonPoint(22.528402,113.938963);
        private Marker locationMarker;//选择点
        private Marker detailMarker;
        private Marker mlastMarker;
        private PoiSearch poiSearch;
        private myPoiOverlay poiOverlay;//poi图层
        private List<PoiItem> poiItems;//poi数据
        private PoiItem mPoi;
    
        private RelativeLayout mPoiDetail;
        private TextView mPoiName,mPoiAddress;
        private String keyWord = "";
        private EditText mSearchText;
    
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.poi_around_search);
    //        基本操作
            mapView = (MapView)findViewById(R.id.mapView);
            mapView.onCreate(savedInstanceState);
            init();
        }
    //AMap对象的初始化
        private void init(){
            if(mAMap == null){
                mAMap = mapView.getMap();
    //            AMap对象的监事件
                mAMap.setOnMapClickListener(this);
                mAMap.setOnMarkerClickListener(this);
                mAMap.setOnInfoWindowClickListener(this);
                mAMap.setInfoWindowAdapter(this);
    //            获取相关控件
                TextView searchButton = (TextView)findViewById(R.id.btn_search);
                searchButton.setOnClickListener(this);
    //初始位置标记
                locationMarker = mAMap.addMarker(new MarkerOptions().anchor(0.5f,0.5f).icon(BitmapDescriptorFactory
                .fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.point4))).position(new LatLng(lp.getLatitude(),lp.getLongitude())));
                locationMarker.showInfoWindow();
            }
            setup();
    //        显示摄像头的大小
            mAMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lp.getLatitude(),lp.getLongitude()),14));
        }
    
        private void setup(){
    
            mPoiDetail = (RelativeLayout)findViewById(R.id.poi_detail);
            mPoiDetail.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v){
    
                }
            });
            mPoiName =(TextView)findViewById(R.id.poi_name);
            mPoiAddress = (TextView)findViewById(R.id.poi_address);
            mSearchText = (EditText)findViewById(R.id.input_edittext);
        }
    
    //    begin poi serch
        protected void doSearchQuery(){
            //Trim() 函数的功能是去掉首尾空格
            keyWord = mSearchText.getText().toString().trim();
            currentPage = 0;
            // 第一个参数表示搜索字符串,第二个参数表示poi搜索类型,第三个参数表示poi搜索区域(空字符串代表全国)
            query = new PoiSearch.Query(keyWord,"","深圳市");
    
            query.setPageSize(20);//setting how mang itmes to return;
            query.setPageNum(currentPage);//setup query the first page;
    
            if(lp!=null){
                poiSearch = new PoiSearch(this,query);
                poiSearch.setOnPoiSearchListener(this);
                // 设置搜索区域为以lp点为圆心,其周围5000米范围
                poiSearch.setBound(new PoiSearch.SearchBound(lp,5000,true));
                poiSearch.searchPOIAsyn();//asyn search
            }
        }
        @Override
        protected void onResume(){
            super.onResume();
            mapView.onResume();
            whetherToShowDetailInfo(false);
        }
        @Override
        protected void onPause(){
            super.onPause();
            mapView.onPause();
        }
        @Override
        protected void onSaveInstanceState(Bundle outState){
            super.onSaveInstanceState(outState);
            mapView.onSaveInstanceState(outState);
        }
        @Override
        protected void onDestroy(){
            super.onDestroy();
            mapView.onDestroy();
        }
        @Override
        public void onPoiItemSearched(PoiItem arg0,int arg1){
    
        }
    //    搜索成功时的回调
        @Override
        public void onPoiSearched(PoiResult result, int rcode){
            if(rcode ==1000){
    //            检测搜索结果
                if(result!=null && result.getQuery()!=null){
    //                是否是同一条
                    if(result.getQuery().equals(query)){
                        poiResult = result;
                        poiItems = poiResult.getPois();
    //                   获取poitem数据
                        List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();
                        if(poiItems !=null && poiItems.size()>0) {
                            //清楚POI信息
                            whetherToShowDetailInfo(false);
    //                        并还原点击marker样式
                            if (mlastMarker != null) {
                                resetlastmarker();
                            }
    //                        清除之前的结果marker样式
                            if (poiOverlay != null) {
                                poiOverlay.removeFromMap();
                            }
    //                        新的marker
                            mAMap.clear();
                            poiOverlay = new myPoiOverlay(mAMap, poiItems);
                            poiOverlay.addToMap();
                            poiOverlay.zoomToSpan();
    
                            mAMap.addMarker(new MarkerOptions().anchor(0.5f, 0.5f)
                                    .icon(BitmapDescriptorFactory
                                            .fromBitmap(BitmapFactory.decodeResource(
                                                    getResources(), R.drawable.point4)))
                                    .position(new LatLng(lp.getLatitude(), lp.getLongitude())));
    //在地图上显示搜索范围圈
                            mAMap.addCircle(new CircleOptions().center(new LatLng(lp.getLatitude(), lp.getLongitude())).radius(5000)
                                    .strokeColor(Color.BLUE)
                                    .fillColor(Color.argb(50, 1, 1, 1))
                                    .strokeWidth(2));
    
                        }else if (suggestionCities !=null && suggestionCities.size()>0){
                            showSuggestCity(suggestionCities);
                        } else {
                            ToastUtil.show(PoiAroundSearch.this,R.string.no_result);
                        }
                    }
                }else {
                    ToastUtil.show(PoiAroundSearch.this,R.string.no_result);
                }
            }
        }
    
    
        public boolean onMarkerClick(Marker marker) {
            if (marker.getObject() != null) {
    //            显示相关的位置信息
                whetherToShowDetailInfo(true);
                try {
                    PoiItem mCurrentPoi = (PoiItem) marker.getObject();
                    if (mlastMarker == null) {
                        mlastMarker = marker;
                    } else {
    //                    还原原来的marker
                        resetlastmarker();
                        mlastMarker = marker;
                    }
                    detailMarker = marker;
    //                按下后的显示图标
                    detailMarker.setIcon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.poi_marker_pressed)));
                    setPoiItemDisplayContent(mCurrentPoi);
                } catch (Exception e) {
    
                }
            } else {
                whetherToShowDetailInfo(false);
                resetlastmarker();
            }
            return true;
        }
    //    将之前点击的marker还原为原来的状态
        private void resetlastmarker() {
            int index = poiOverlay.getPoiIndex(mlastMarker);
    //        10个以内的marker显示图标
            if(index<10){
                mlastMarker.setIcon(BitmapDescriptorFactory
                        .fromBitmap(BitmapFactory.decodeResource(
                                getResources(),
                                markers[index])));
            }else{
    //            大于10个后的marker显示图标信息
                mlastMarker.setIcon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.marker_other_highlight)));
    
            }
            mlastMarker = null;
        }
    
        private void setPoiItemDisplayContent(final PoiItem mCurrentPoi){
            mPoiName.setText(mCurrentPoi.getTitle());
            mPoiAddress.setText(mCurrentPoi.getSnippet());
        }
        @Override
        public View getInfoContents(Marker arg0){
            return null;
        }
        @Override
        public View getInfoWindow(Marker arg0){
            return null;
        }
        @Override
        public void onInfoWindowClick(Marker arg0){
    
        }
    
        @Override
        public void onClick(View v){
            switch (v.getId()) {
                case R.id.btn_search:
                doSearchQuery();
                break;
                default:
                    break;
            }
        }
    
        private int[] markers = {
                R.drawable.poi_marker_1,
                R.drawable.poi_marker_2,
                R.drawable.poi_marker_3,
                R.drawable.poi_marker_4,
                R.drawable.poi_marker_5,
                R.drawable.poi_marker_6,
                R.drawable.poi_marker_7,
                R.drawable.poi_marker_8,
                R.drawable.poi_marker_9,
                R.drawable.poi_marker_10,
        };
    
        private void whetherToShowDetailInfo(boolean isToShow){
            if(isToShow){
                mPoiDetail.setVisibility(View.VISIBLE);
            }else {
                mPoiDetail.setVisibility(View.GONE);
            }
        }
    
        @Override
        public void onMapClick(LatLng arg0){
            whetherToShowDetailInfo(false);
            if(mlastMarker!=null){
                resetlastmarker();
            }
        }
    
        private void showSuggestCity(List<SuggestionCity> cities){
            String infomation = "推荐城市\n";
            for(int i = 0;i<cities.size();i++){
                infomation += "城市名称:" + cities.get(i).getCityName() + "城市区号:" + cities.get(i).getCityCode() + "城市编码:" + cities.get(i).getAdCode() + "\n";
            }
            ToastUtil.show(this,infomation);
        }
    //myPoiOverlay类,该类下面有多个方法
        private class myPoiOverlay{
            private AMap mamap;
            private List<PoiItem> mPois;
            private ArrayList<Marker> mPoiMarks = new ArrayList<Marker>();
    //    构造函数,传进来的是amap对象和查询到的结果itmes  mPois
            public myPoiOverlay(AMap amap,List<PoiItem>pois){
                mamap = amap;
                mPois = pois;
            }
    
    //增加Maker到地图中
        public void addToMap(){
            for(int i=0;i<mPois.size();i++){
                Marker marker = mamap.addMarker(getMarkerOptions(i));
                PoiItem item = mPois.get(i);
                marker.setObject(item);
                mPoiMarks.add(marker);
            }
        }
    //移除所有的marker
        public void removeFromMap(){
            for(Marker mark: mPoiMarks){
                mark.remove();
            }
        }
    //移动镜头到当前的视角
        public void zoomToSpan(){
            if(mPois !=null && mPois.size()>0){
                if(mamap ==null) return;
                LatLngBounds bounds = getLatLngBounds();
    //            瞬间移动到目标位置
                mamap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds,100));
            }
        }
    
        private LatLngBounds getLatLngBounds(){
            LatLngBounds.Builder b = LatLngBounds.builder();
            for(int i=0;i<mPois.size();i++){
                b.include(new LatLng(mPois.get(i).getLatLonPoint().getLatitude(),mPois.get(i).getLatLonPoint().getLongitude()));
            }
            return b.build();
        }
    
        private MarkerOptions getMarkerOptions(int index){
            return new MarkerOptions()
                    .position(new LatLng(mPois.get(index).getLatLonPoint()
                    .getLatitude(),mPois.get(index)
                    .getLatLonPoint().getLongitude()))
                    .title(getTitle(index)).snippet(getSnippet(index))
                    .icon(getBitmapDescriptor(index));
    
        }
    
        protected String getTitle(int index){
            return mPois.get(index).getTitle();
        }
        protected String getSnippet(int index){
            return mPois.get(index).getSnippet();
        }
    //获取位置,第几个index就第几个poi
        public int getPoiIndex(Marker marker){
            for(int i=0;i<mPoiMarks.size();i++){
                if(mPoiMarks.get(i).equals(marker)){
                    return i;
                }
            }
            return -1;
        }
    
        public PoiItem getPoiItem(int index) {
            if (index < 0 || index >= mPois.size()) {
                return null;
            }
            return mPois.get(index);
        }
    
        protected BitmapDescriptor getBitmapDescriptor(int arg0){
            if(arg0<10){
                BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(
                        BitmapFactory.decodeResource(getResources(),markers[arg0]));
                return icon;
            }else {
                BitmapDescriptor icon = BitmapDescriptorFactory.fromBitmap(
                        BitmapFactory.decodeResource(getResources(),R.drawable.marker_other_highlight));
                return icon;
            }
        }
        }
    
    }
    

    github源码下载链接


    专注于AR的在移动端的实现,如果你还有问题没解决,你可以加入我们一起交流。或是关注我们的技术公众号,这是提供技术干货的地方,你有干货可以向我们推荐。

    这里写图片描述

    如果你觉得写的不错,对你有用,请在下面点个 支持一下嘛,有问题可以在下面留言评论。


    展开全文
  • 近期,终于有点时间,将之前的地图兴趣点爬虫程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的时间爬取了覆盖全国的任一地区的所有类别的兴趣点数据。 数据下载还是...

    近期,终于有点时间,将之前的地图兴趣点爬虫程序(http://blog.csdn.net/sparkexpert/article/details/51554813)完善了下,并用了七天的时间爬取了覆盖全国的任一地区的所有类别的兴趣点数据。


    数据下载还是一个艰难的过程,不过幸运的是,采用了新方法之后,基本上很少需要人工去干预,当然也会有网络的限制,但是基本上同时开辟5个下载通道,速度一直是嗖嗖的。


    下载完成后,由于没有直接处理,只是下载了JSON格式的文本数据,约占磁盘空间60G以上。而汇总的POI个数则有好几千万。(目前有些超出范围还下载得不全,主要原因是网站服务端的限制,只允许下载前几页。当然这个也有办法处理,只是目前没有太计较于这些。)


    那么下载数据之后,就在琢磨如何能够快速查找数据,像百度谷歌等各种地图网站加载数据是非常快的,那么如何去实现这个步骤呢。本文主要就是解决这个问题。


    于是采用redis的HASH来进行每个兴趣点的存储。处理过程中会过滤掉一些重复的键值,但这个过滤是有条件的,如报刊亭,可能有很多同样的键值,但是它们都是独立的,就需要在这些后缀添加个0,1,2,.....



    下附一张在redis客户端查找的个数。这张图只是在导入过程中随便截的图。实际上已经是好几千万了。



    为了验证查询效率,进行了查找,一种是直接查找某个城市的某种类别的数据,如图所示:


    可以说,用redis来做地图POI缓存,速度还是特别快的。在下面的状态栏实时显示的了查询所占用的时间,非常少的时间就返回结果了。


    为了更好地测试对全部信息的查找,如在不限制城市,不限制类别进行查找,其结果如下:



    发现总的测试时间也就5秒多一些,这还是在一台非常普通的PC上的测试。而真正要做地图服务器,则可以采用大内存高性能服务器,完全可以做得毫秒级响应。


    不过采用这种列式数据库有个不好的地方,就是没有办法在上面直接做附近POI查询。(这在键值上也没有办法做到。)这估计还得依靠以前近格网索引的办法才能实现吧。(不过要是限制在某个城市,某种类别的,用redis肯定也能够做到,毕竟在小数据上做查询效率还是很高的)

    展开全文
  • 传统的地理信息采集方法需要地图测绘人员采用精密的测绘仪器去获取一个兴趣点的经纬度,然后再标记下来。正因为POI的采集是一个非常费时费事的工作,对一个地理信息系统来说,POI的数量在一定程度代表着整个系统的...
  • 通过关键字检索、周边检索以及多边形检索,或者任意形式得到的高德POI ID信息,可通过ID检索来获取POI完整详细信息。 实现步骤如下: 1、继承 OnPoiSearchListener 监听。 2、构造 PoiSearch 对象,并设置监听。...
  • 打开高德地图浏览时,拖地地图,会调用https://ditu.amap.com/service/regeo?longitude=XXX&latitude=XXX接口,此接口是不需要鉴权的,该接口的作用是定位,将你所处位置的gps点输入进去后,将会返回附近的几个...
  • 阿里巴巴高德地图 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, // 初始...
  • 之前在做大创的时候,就用到了高德地图,但是当时是为了赶项目,所以只是按照官方的demo代码搬运了过来,而具体哪个类是干什么的根本不清楚,而且一个完整的流程也是很模糊。现在再次用到了这个东西,所以觉得一定要...
  • 目前高德的边界没法批量爬取,不过可以采用百度地图的接口来替代,目前用着还可以,参见这里: http://www.mapboxx.cn/article/boundary/ 为了方便大家,不用再为安装环境,以及运行报错等问题困扰,目前已经将POI...
  •   大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己...
  • 关于高德地图的分析报告

    千次阅读 2019-05-29 10:52:46
    关于高德地图的分析报告 目录 引言 2 一 项目背景 3 二 运营模式 3 三 应用分析 4 1 目标群体 4 2 市场占有率 4 3 与同类应用比较 6 3.1 产品分析 6 3.2 功能分析 7 3.3 使用分析 8 3.4 推广方式 9 四 ...
  • 高德地图源码

    热门讨论 2020-07-30 23:32:24
    高德地图源码
1 2 3 4 5 ... 20
收藏数 28,681
精华内容 11,472
关键字:

高德地图