高德地图 订阅
高德是中国领先的数字地图内容、导航和位置服务解决方案提供商。拥有导航电子地图甲级测绘资质、测绘航空摄影甲级资质和互联网地图服务甲级测绘资质“三甲”资质,其优质的电子地图数据库成为公司的核心竞争力。公司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] 
收起全文
精华内容
下载资源
问答
  • 近期博主在做地理数据可视化方面的研究,pyecharts提供了较好的工具,里面提供了很多图形,尤其是Map和Geo这两种图,一种是地图,一种是地理信息图。pyecharts的基础还是echart,echart是百度地图开源的一个数据可视...

    引言

    近期博主在做地理数据可视化方面的研究,pyecharts提供了较好的工具,里面提供了很多图形,尤其是Map和Geo这两种图,一种是地图,一种是地理信息图。pyecharts的基础还是echart,echart是百度地图开源的一个数据可视化 JS 库,从我个人使用的情况来看,目前pyecharts(博主pyecharts版本是0.5.11)有这两个问题:

    • 地图精度不够。目前pyecharts提供的地图层级有世界地图、各个国家的地图、中国各省地图、中国各地市图、区县图,到区县后,就不再细分,如果我想看某条道路的具体信息,就难以实现。
    • 经纬度定位“不准确”。这不属于pyecharts是问题,应该属于百度地图在地理编码上的特点,当然,并不是说百度地图地理编码不准确,而是博主的目前在做的项目,地理位置都比较奇特,不管是BaiduMap还是AMap(高德地图)都很难定位到特别准确。由于pyecharts的底层地图是百度地图,所以看起来是pyecharts定位“不准确”。

    要解决第一个问题,就是说想要更高层级的地图,这个就需要换可视化包了,也就是说,将pyecharts改成具有其他更高层级地图的可视化包。博主使用的是folium,这个包也很强大,pyecharts的强大之处在与echart的可视化功能,folium则体现在地图及地图的扩展应用上。folium目前支持OpenStreetMap、AMap等几种地图,但不支持百度地图。一度吐血,为啥我用的这两个包底层地图就不能通用下。但其实也好,为了用好这两个包,博主对百度、高德这两大地图大佬的开发文档进行了研究,现在将二者地理编码的方式记录下来。
    开发环境:

    • Python3.7;
    • pyecharts0.5.11;
    • pycharm

    百度地图地理编码

    开发文档看这里,使用前需要去申请AK,同时最好申请开发者认证,能提升访问限制。开发文档其实写的很详细,无非是爬虫get和json解析那一套,我直接上代码。

    import json
    import pandas as pd
    import numpy as np
    from urllib.request import urlopen, quote
    import requests
    
    def Scene2CoordinateBaiduMap(filename):
        data = pd.read_csv(filename)
        result = []
        i = 1
        j = 1
        for k in data['地点']:
            address = quote(k)  # 1
            url = 'http://api.map.baidu.com/geocoder/v2/?address=' + address + '&output=json&ak=yourAK'  # 2
            req = urlopen(url)
    
            res = req.read().decode()
            temp = json.loads(res)
            try:  # 3
                result.append(temp['result']['location'])
                print('catch %d \n' % i)
                i = i + 1
            except:
                result.append({'lat': 'null', 'lng': 'null'})
                print('fail %d \n' % j)
                j = j + 1
    
        print('成功定位%d个,成功率%.2f%%' % (i - 1, (i - 1) * 100 / (i + j - 2)))
    
        df = pd.DataFrame(result)
        df.to_csv('经纬度原始数据-百度地图.csv', index=False)
    
    if __name__ == '__main__':
        main()
    

    先看导入的包,访问百度地图API返回的都是json格式的数据,要对数据进行解析,自然少不了json包,pandas和numpy常规包,基本上很难不用到,后面两个是网页数据获取的包。高德地图地理编码也是这几个包,后面不再重复写。
    几点说明:
    #1quote函数是为了得到GBK的url编码,国内的网站编码都是GBK编码的;
    #2要把url里面的AK改成你自己申请的AK,而不是yourAK这个字符串;
    #3为啥要用try来处理,因为不是所有的地理编码都能成功,如果不用try处理,容易报错,程序会中断。
    这个函数写的很详细了,你提供一个CSV文件,其中一列命名为‘地点’,就能将你的所有填写的地点都能转换成经纬度,当然,也有不成功的,总体成功率在95%左右。总体来说,定位效果还是可以的,但是如果地点数据很多填写的不规范,地理编码虽然解析出经纬度,但很多都是有问题的,比如解析出来的点不在正确的地点,如下图。
    在这里插入图片描述
    这些点本来应该都出现在无锡市地图上,但还有不少点在无锡市外,也就是说,解析的不正确。问题出在哪里?博主又回过头去看文档,文档里说,请求的参数除了address外,还有city,也就是城市,这个参数不是必须要写的,如果是写了这个,会不会就正确了呢?于是,我找了一个落在无锡地图之外的点,将请求网址写成这样:

    http://api.map.baidu.com/geocoding/v3/?address=南湖大道双庆桥公交站前&city=无锡市&output=json&ak=您的ak&callback=showLocation
    

    返回的数据如下:

    showLocation&&showLocation({"status":0,"result":{"location":{"lng":120.31700801956372,"lat":31.532789952709309},"precise":0,"confidence":50,"comprehension":24,"level":"桥"}})
    

    根据经纬度去百度地图拾取坐标系统中看看,巧了,点还对了。。。
    博主懵逼了,上午的时候,明明是不对的,所以才想到要写一篇博客来解决这个问题,回过头来一想,因为我上午写的请求网址是这样的:

    http://api.map.baidu.com/geocoding/v3/?address=南湖大道双庆桥公交站前&city='无锡市'&output=json&ak=您的ak&callback=showLocation
    

    无锡市我打了引号,其实是没必要打引号的。。。
    在这里插入图片描述
    所以,实际上,在请求网址里面加上城市名,就能保证经纬度转换的时候,所有点都落在你想要的城市里面。。。
    持续吐血,这篇博客还要写吗,我上午已经按照我的解决思路,高德地图地理编码→高德地图转百度地图→pyecharts地点上图,这个套路,解析了3000+的地点。
    都写了3000多字了,还是继续写完吧。。。

    高德地图地理编码

    开发文档看这里
    ,技术细节与百度地图基本一致,请求格式上我换了一种写法,让读者可以更灵活的使用爬虫的技巧。
    上代码

    def Scene2CoordinateAMap(filename):
        data = pd.read_csv(filename)
        sgdd = data['事故地点'].tolist()
        geo = []
        key = 'yourKEY'
        base = 'https://restapi.amap.com/v3/geocode/geo'
        j = 1
        k = 1
        for i in range(len(sgdd)):
            parameters = {'address': sgdd[i], 'key': key, 'city':'无锡'}
            response = requests.get(base, parameters)
            answer = response.json()
            try:
                pos = answer['geocodes'][0]['location']
                pos = pos.split(',')
                pos[0], pos[1] = pos[1], pos[0]
                geo.append(pos)
                print('catch %d \n'%j)
                j = j + 1
            except:
                geo.append([ 'null','null'])
                print('fail %d \n'%k)
                k = k + 1
        points = pd.DataFrame(geo)
        points.to_csv('经纬度填充-高德地图.csv', index=False, columns = ['lng', 'lat'])
        print('成功定位%d个,成功率%.2f%%' % (j - 1, (j - 1) * 100 / (j + k - 2)))
    

    为啥我会写成‘无锡’,能理解了吧,我高德就是这么写的。。。
    可以看出来,和百度地图请求方式有一点不同,我用的是requests.get去请求的,其实网上更多的推荐是用这种方式去请求,而不是用urlopen,不过我个人习惯用urlopen,两者都行吧。

    高德地图经纬度转百度地图经纬度

    其实已经没啥必要写了,因为二者都差不多。
    文档看这里,上代码

    def AMap2BaiduMap(filename):
        data = pd.read_csv(filename)
        base = 'http://api.map.baidu.com/geoconv/v1/?coords='
        tail = '&from=3&to=5&ak=yourAK'
        transpos = []
        j = 1
        k = 1
        for i in range(len(data)):
            url = base + str(data.iloc[i]['lng_Amap']) + ',' + str(data.iloc[i]['lat_Amap']) + tail
            req = urlopen(url)
            res = req.read().decode()
            temp = json.loads(res)
                         
            try:
                pos = list(temp['result'][0].values())  # 字典转列表
                transpos.append(pos)
                print('catch %d \n'%j)
                j = j + 1
            except:
                transpos.append(['null','null'])
                print('fail %d \n'%k)
                k = k + 1
        tran = pd.DataFrame(transpos)
        tran.to_csv('高德转百度.csv', index=False, columns = ['lng', 'lat'])
        print('成功转换%d个,成功率%.2f%%' % (j - 1, (j - 1) * 100 / (j + k - 2)))
    

    注意下,链接里有这么句代码

    from=3&to=5
    

    官方文档解释如下:

    源坐标类型:
    1:GPS设备获取的角度坐标,WGS84坐标;
    2:GPS获取的米制坐标、sogou地图所用坐标;
    3:google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标,国测局(GCJ02)坐标;
    4:3中列表地图坐标对应的米制坐标;
    5:百度地图采用的经纬度坐标;
    6:百度地图采用的米制坐标;
    7:mapbar地图坐标;
    8:51地图坐标
    目标坐标类型:
    5:bd09ll(百度经纬度坐标);
    6:bd09mc(百度米制经纬度坐标)

    我是高德经纬度转百度经纬度,自然是from=3to=5。
    看看转换经纬度后的pyecharts-Geo图吧
    在这里插入图片描述
    全都在无锡市内了,大功告成,虽然没啥用了(╥╯^╰╥)

    展开全文
  • 四、完整代码 # encoding: utf-8 ''' @author 李华鑫 @create 2020-10-06 19:46 Mycsdn:https://buwenbuhuo.blog.csdn.net/ @contact: 459804692@qq.com @software: Pycharm @file: 高德地图_每个城市的天气.py @...

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/
    1

    PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!


    2


    推荐

    31
      ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

      ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
    30

    一、 分析网页结构

    以往几篇都是介绍的传统的静态界面的爬取,这次博主介绍一个爬取动态网页的超简单的一个小demo
    3
    说到动态网页,你对它了解多少呢?

    如果对动态网页不认识的童鞋,博主在此给出链接,可以看百度百科的详细解析动态网页_百度百科以及小马夫的静态页面和动态页面的区别

    4
    不要怪博主没有进行讲解,因为博主本人对与动态网页的概念也不是太过了解。等到博主整理好思绪的时候,博主会专门写一篇博文的 -。-

    简单来说,要获取静态网页的网页数据只需要给服务器发送该网页url地址就行,而动态网页的数据因为是存储在后端的数据库里。所以要获取动态网页的网页数据,我们需要向服务器发送请求文件的url地址,而不是该网页的url地址。

    🆗,下面开始进入正题。

    本篇博文就以高德地图展开:https://www.amap.com/
    5
    在打开后,我们发现有一堆div标签,但是并没有我们需要的数据,这个时候就可以判定其为动态网页,这个时候,我们就需要找接口
    8
    6
    点击网络标签,我们可以看到网页向服务器发送了很多请求,数据很多,找起来太费时间

    我们点击XHR分类,可以减少很多不必要的文件,省下很多时间。

    XHR类型即通过XMLHttpRequest方法发送的请求,它可以在后台与服务器交换数据,这意味着可以在不加载整个网页的情况下,对网页某部分的内容进行更新。也就是说,向数据库请求然后得到响应的数据是XHR类型的

    然后我们就可以在XHR类型下开始一个个找,找到了如下的数据
    7
    通过查看Headers获得URL
    9
    打开之后,我们发现其为近两天的天气情况。
    10

    打开后我们可以看到上面的情况,这是个json格式的文件。然后,它的数据信息是以字典的形式来保存的,而数据是都保存在“data”这个键值里面。

    🆗,找到了json数据,我们来对比下看是否是我们找的东西
    11
    通过对比,数据正好对应,那就说明咱们已经拿到数据了。

    二、拿到相关网址

    '''
    查询当前地点天气的url:https://www.amap.com/service/cityList?version=2020101417
    各城市对应code的url:https://www.amap.com/service/weather?adcode=410700
    
    备注:这两个url可以从Network中查看到
    '''
    

    12
    🆗,相关网址我们已经拿到了,下面就是具体的代码实现了。至于怎么实现,

    我们知道json数据可以使用response.json()转字典,然后操作字典。
    13

    三、代码实现

    知道了数据的位置后,我们开始来写代码。

    3.1 查询所有城市名称和编号

    先抓取网页,通过添加headers来伪装成浏览器来对数据库地址进行访问,防止被识别后拦截。

    url_city = "https://www.amap.com/service/cityList?version=202092419"
    
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    }
    
    city = []
    response = requests.get(url=url_city, headers=headers)
    content = response.json()
    print(content)
    

    14
    得到我们想要的数据之后,我们通过查找可以发现cityByLetter里的编号和名称是我们需要的,那么我们就可以盘它了。
    15

        if "data" in content:
            cityByLetter = content["data"]["cityByLetter"]
            for k,v in cityByLetter.items():
                city.extend(v)
        return city
    

    15

    3.2 根据编号查询天气

    得到了编号和名称,下面肯定就是查询天气呀!

    先来看接口
    16
    通过上图,可以确定最高温度,最低温度等内容。那么就以此来进行数据爬取。

    url_weather = "https://www.amap.com/service/weather?adcode={}"
    
    response = requests.get(url=url_weather.format(adcode), headers=headers)
    content = response.json()
    item["weather_name"] = content["data"]["data"][0]["forecast_data"][0]["weather_name"]
    item["min_temp"] = content["data"]["data"][0]["forecast_data"][0]["min_temp"]
    item["max_temp"] = content["data"]["data"][0]["forecast_data"][0]["max_temp"]
    print(item)
    

    17

    🆗,我们的设想已经实现了。
    20

    四、完整代码

    # encoding: utf-8
    '''
      @author 李华鑫
      @create 2020-10-06 19:46
      Mycsdn:https://buwenbuhuo.blog.csdn.net/
      @contact: 459804692@qq.com
      @software: Pycharm
      @file: 高德地图_每个城市的天气.py
      @Version:1.0
    
    '''
    import requests
    
    
    url_city = "https://www.amap.com/service/cityList?version=202092419"
    url_weather = "https://www.amap.com/service/weather?adcode={}"
    
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
    }
    
    
    def get_city():
        """查询所有城市名称和编号"""
        city = []
        response = requests.get(url=url_city, headers=headers)
        content = response.json()
    
        if "data" in content:
            cityByLetter = content["data"]["cityByLetter"]
            for k, v in cityByLetter.items():
                city.extend(v)
        return city
    
    
    def get_weather(adcode, name):
        """根据编号查询天气"""
        item = {}
        item["adcode"] = str(adcode)
        item["name"] = name
    
        response = requests.get(url=url_weather.format(adcode), headers=headers)
        content = response.json()
        item["weather_name"] = content["data"]["data"][0]["forecast_data"][0]["weather_name"]
        item["min_temp"] = content["data"]["data"][0]["forecast_data"][0]["min_temp"]
        item["max_temp"] = content["data"]["data"][0]["forecast_data"][0]["max_temp"]
    
        return item
    
    
    def save(item):
        """保存"""
        print(item)
        with open("./weather.txt","a",encoding="utf-8") as file:
            file.write(",".join(item.values()))
            file.write("\n")
    
    
    if __name__ == '__main__':
        city_list = get_city()
        for city in city_list:
            item = get_weather(city["adcode"],city["name"])
            save(item)
    

    五、保存结果

    18
    19

    美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


    21

      好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
      如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
      码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

    22
    23

    展开全文
  • 然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和实际位置居然相差几十公里,一开始是以为自己配置有问题,浪费了我大半天时间去找原因,最后发现他本身提供的API就是偏差很大距离的,他...

    前言:

    由于项目需求需要在项目中实现手机端(基于网页)考勤打卡功能,最初考虑使用H5自身定位功能,但尝试过后,效果很不稳定。然后尝试使用百度地图JsAPI,百度家的稳定倒是很稳定,没想到的是定位位置和实际位置居然相差几十公里,一开始是以为自己配置有问题,浪费了我大半天时间去找原因,最后发现他本身提供的API就是偏差很大距离的,他自己家的倒是定位很准,对外开放的API简直惨不忍睹。

    百度API浏览器定位

    高德API浏览器定位

    然后换用高德去测试,高德开放的API精确度和百度地图是一样的,小伙伴可以亲自去体验下,难怪百度如今沦落到这样。。。

    所以就决定使用高德API来进行定位了;

    主要思路:利用高德API获取当前位置经纬度、设置考勤点经纬度、计算两点距离判断是否在考勤范围内。

    高德JS API提供的浏览器定位接口,融合了HTML5 Geolocation定位接口、精确IP定位服务,以及安卓定位sdk定位。所以在定位上大大提高了精准度以及成功率。

    效果如下:

    正文:

    首先注册账号并申请Key

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

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

    3. 为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 

    准备页面

    1. 在页面添加 JS API 的入口脚本标签,并将其中「您申请的key值」替换为您刚刚申请的 key;

    HTML

    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script> 

    2. 添加div标签作为地图容器,同时为该div指定id属性;

    HTML

    <div id="container"></div> 

    3. 为地图容器指定高度、宽度;

    CSS

    #container {width:300px; height: 180px; }  

    4. 进行移动端开发时,请在head内添加viewport设置,以达到最佳的绘制性能;

    HTML

    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 

    5. 在完成如上准备工作之后便可以开始进行开发工作了。

    显示定位地图以及获取当前经纬度地址

    <!doctype html>
    <html>
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
        <title>浏览器精确定位</title>
          <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css" />
        <style>
            html,body,#container{
                height:100%;
            }
            .info{
                width:26rem;
            }
        </style>
    <body>
    <div id='container'></div>
    <div class="info">
        <h4 id='status'></h4><hr>
        <p id='result'></p><hr>
        <p >由于众多浏览器已不再支持非安全域的定位请求,为保位成功率和精度,请升级您的站点到HTTPS。</p>
    </div>
    <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&key=您申请的key值"></script>
    <script type="text/javascript">
        var map = new AMap.Map('container', {
            resizeEnable: true
        });
        AMap.plugin('AMap.Geolocation', function() {
            var geolocation = new AMap.Geolocation({
                enableHighAccuracy: true,//是否使用高精度定位,默认:true
                timeout: 10000,          //超过10秒后停止定位,默认:5s
                buttonPosition:'RB',    //定位按钮的停靠位置
                buttonOffset: new AMap.Pixel(10, 20),//定位按钮与设置的停靠位置的偏移量,默认:Pixel(10, 20)
                zoomToAccuracy: true,   //定位成功后是否自动调整地图视野到定位点
    
            });
            map.addControl(geolocation);
            geolocation.getCurrentPosition(function(status,result){
                if(status=='complete'){
                    onComplete(result)
                }else{
                    onError(result)
                }
            });
        });
        //解析定位结果
        function onComplete(data) {
            document.getElementById('status').innerHTML='定位成功'
            var str = [];
            str.push('定位结果:' + data.position);
            str.push('定位类别:' + data.location_type);
            if(data.accuracy){
                 str.push('精度:' + data.accuracy + ' 米');
            }//如为IP精确定位结果则没有精度信息
            str.push('是否经过偏移:' + (data.isConverted ? '是' : '否'));
            document.getElementById('result').innerHTML = str.join('<br>');
        }
        //解析定位错误信息
        function onError(data) {
            document.getElementById('status').innerHTML='定位失败'
            document.getElementById('result').innerHTML = '失败原因排查信息:'+data.message;
        }
    </script>
    </body>
    </html>

    计算当前位置与考勤点距离

    var signzone = [121.52625, 31.66925];//设置的签到点
    console.log(signzone);
    //计算当前位置与考勤点距离
    var distance = AMap.GeometryUtil.distance(getposition,signzone).toFixed(2);
    
    //document.getElementById('distance').innerHTML = distancestr;
    console.log(distance);
    			
    if (distance <= 1000) {
    //在范围内
        //数据操作
    } else {
    //不在范围内
        //数据操作
    }
    			

    绘制签到点范围 

    //绘制签到范围
    
    var circle = new AMap.Circle({
    	center: signzone,
    	radius: 100, //签到范围半径
    	borderWeight: 1,
    	strokeOpacity: 1,
    	
    	strokeOpacity: 0.2,
    	fillOpacity: 0.4,
    })
    
    circle.setMap(map)
    // 缩放地图到合适的视野级别
    map.setFitView([ circle ])
    
    var circleEditor = new AMap.CircleEditor(map, circle)
    

    到这里定位打卡的基本功能就完成了,然后再加上一些判断,比如用户是否进入考勤范围这些等等,配合上后端数据操作就可以实现该需求了。

     

    最终页面效果如下:

    效果演示地址:https://www.eiun.net/tools/map/index.html

    一些注意事项

    定位一般分为两种场景:移动端和PC,下面分别讲下这两个场景在使用定位过程中的一些注意事项。

    移动端

    移动端包括手机,pad和其它带有GPS定位芯片的智能设备(如手表、音箱等),移动端的系统包括iOS和Android。成功完成定位需要达成以下前提条件:

    1. 系统GPS打开

    2. 所使用的App或浏览器已获取定位权限

    3. 对打开的页面允许使用定位

    4. 对于iOS10以上系统和Android的一些版本已禁止在非HTTPS协议的域名下定位,请尽快将站点升级到HTTPS

    注意,以上只是定位成功的前提条件,满足这些并不一定等于可以成功定位,定位还与当前位置(室内会影响GPS信息)、手机信号和定位权限等因素影响。如果您在使用过程中定位失败,可以参考FAQ:Geolocation的定位流程以及定位失败的原因 ,将失败信息通过工单发送给我们,高德的工程师将协助您解决问题。

    PC

    因为pc设备上大都缺少GPS芯片,所以在PC上的定位主要通过IP精准定位服务,该服务的失败率在5%左右。

    定位失败

    如果定位失败或者遇到其它问题,请参考FAQ:Geolocation的定位流程以及定位失败的原因 

    附上源代码:

    Github地址:https://github.com/iGaoWei/Amap-location

    第一次写GitHub,喜欢的小伙伴点个Star哦,本资料仅供参考,水平有限,难免存在纰漏错误之处,欢迎评论指正。

    展开全文
  • 背景根据Apple官方WWDC的回答,减少内存可以让用户体验到更快的启动速度,不会因为内存过大而导致Crash,可以让APP存活的更久。对于高德地图来说,根据线上数据的分析,内存过高会导...

    背景

    根据Apple官方WWDC的回答,减少内存可以让用户体验到更快的启动速度,不会因为内存过大而导致Crash,可以让APP存活的更久。

    对于高德地图来说,根据线上数据的分析,内存过高会导致导航过程中系统强杀OOM。尤其区别于其他APP的地方是,一般APP只需要关注前台内存过高的系统强杀FOOM,高德地图有不少用户使用后台导航,所以也需要关注后台的内存过高导致的系统强杀BOOM,且后台强杀较前台强杀更为严重。为了提升用户体验,内存治理迫在眉睫。

    原理剖析

    OOM

    OOM是Out of Memory的缩写。在iOS APP中如果内存超了,系统会把APP直接杀死,一种另类的Crash,且无法捕获。发现OOM时,我们可以从设备->隐私->分析与改进->分析数据中找到以JetsamEvent开头的日志,日志里面记录了很多信息:手机设备信息、系统版本、内存大小、CPU时间等。

    Jetsam

    Jetsam是iOS系统的一种资源管理机制。不同于MacOS、Linux、Windows等,iOS中没有内存交换空间,所以在设备整体内存紧张时,系统会将一些优先级不高或者占用内存过大的直接Kill掉。

    通过iOS开源的XNU内核源码可以分析到:

    • 每个进程在内核中都存在一个优先级列表,JetSam在受到内存压力时会从优先级列表最低的进程开始尝试杀死,直到内存水位恢复到正常水位。

    • Jetsam是通过get_task_phys_footprint获取到phys_footprint的值,来决定要不要杀掉应用。

    Jetsam机制清理策略可以总结为以下几点:

    • 单个APP物理内存占用超过上限会被清理,不同的设备内存水位线不一样。

    • 整个设备物理内存占用受到压力时,优先清理后台应用,再清理前台应用。

    • 优先清理内存占用高的应用,再内存占用低的应用。

    • 相比系统应用,会优先清理用户应用。

    Android端为Low Memory Killer:

    • 根据APP的优先级和使用总内存的多少,系统会在设备内存吃紧情况下强杀应用。

    • 内存吃紧的判断取决于系统RSS(实际使用物理内存,包含共享库占用的全部内存)的大小。

    • 关键参数有3个:

      • oom_adj:在Framework层使用,代表进程的优先级,数值越高,优先级越低,越容易被杀死。

      • oom_adj threshold:在Framework层使用,代表oom_adj的内存阈值。Android Kernel会定时检测当前剩余内存是否低于这个阀值,若低于则杀死oom_adj ≥该阈值对应的oom_adj中,数值最大的进程,直到剩余内存恢复至高于该阀值的状态。

      • oom_score_adj:在Kernel层使用,由oom_adj换算而来,是杀死进程时实际使用的参数。

    数据分析

    phys_footprint获取iOS应用总的物理内存,具体可以参考官方说明iOS Memory Deep Dive.

    std::optional<size_t> memoryFootprint()
    {
        task_vm_info_data_t vmInfo;
        mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
        kern_return_t result = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count);
        if (result != KERN_SUCCESS)
            return std::nullopt;
        return static_cast<size_t>(vmInfo.phys_footprint);
    }
    

    Instruments-VM Tracker可以用来分析具体内存分类,比如Malloc部分是堆内存,Webkit Malloc部分是JavaScriptCore占用的内存等。需要注意的是每个分类的内存值 = Dirty Size + Swapped。

    通过Instruments VM Tracker抓取导航中内存分布进行对比分析。导航前台静置时,高德地图的总内存数值非常高,其中IOKit、WebKit Malloc和Malloc堆内存为内存占用大头。

    在分析过程中可以使用的工具很多,各有优缺点,需要配合使用,相互弥补。我们在分析的过程中主要用到Intruments VM Tracker、Allocations、Capture GPU Frame、MemGraph、dumpsys meminfo 、Graphics API Debugger、Arm Mobile Studio、AJX 内存分析工具、自研Malloc分析工具等。

    • IOKit内存为地图渲染显存部分。

    • WebKit Malloc内存为AJX JS业务内存。

    • Malloc堆内存,我们通过Hook Malloc分配内存的API,通过抓取堆栈分析具体内存消费者。


    治理优化

    根据上面的数据分析,很容易做出从大头开始抓起的思路。我们在治理过程中的大体思路:

    • 分析数据:从内存大头开始,分析各内存归属业务,以便业务进一步分析优化。

    • 内存治理:优化技术方案减少内存开销、高低端机功能分级和智能容灾(即内存告警时通过功能降级等策略释放内存)。


    分而治之

    据数据分析,高德地图三大内存消耗分别是地图渲染(Graphic显存)、功能业务(JavaScriptCore)和通用业务(Malloc)。我们也主要从这三个方面入手优化。

    地图Graphic显存优化

    Xcode自带Debug工具Capture GPU Frame,可以分析出具体显存占用,显存主要分为纹理Texture部分和Buffer部分,通过详细的地址信息分析具体消耗。Android端类似分析显存工具可以用Google的Graphics API Debugger。

    根据分析,Texture部分我们通过FBO绘制方式调整、矢量路口大图背景优化、图标跨页面释放、文字纹理优化、低端机关闭全屏抗锯齿等减少显存消耗。Buffer部分通过开启低显存模式、关闭四叉树预加载、切后台释放缓存资源等。

    Webkit Malloc优化

    高德地图使用的是自研的动态化方案,依赖于iOS系统提供的框架JavaScriptCore,使用的业务内存消耗大多会被系统归类到WebKit Malloc,从系统工具Instruments上的VM Tracker可以看出。此处有两个思路,一个是业务自身优化内存消耗,第二个是动态化引擎和框架优化内存消耗。

    业务自身优化,动态化方案的IDE提供内存分析工具可以清晰的输出具体业务内存消耗在什么地方,便于业务同学分析是否合理。

    动态化引擎和框架优化,我们通过优化对系统库JavaScriptCore的使用方式,即多个JSContextRef上下文共享同一份JSContextGroupRef的方式。多个页面可以共享一份框架代码,从而减少内存开销。

    Malloc堆内存优化

    iOS端堆内存分配基本上使用的libmalloc库,其中包含以下几个内存操作接口:

    // c分配方法
    void    *malloc(size_t __size) __result_use_check __alloc_size(1);
    void    *calloc(size_t __count, size_t __size) __result_use_check __alloc_size(1,2);
    void     free(void *);
    void    *realloc(void *__ptr, size_t __size) __result_use_check __alloc_size(2);
    void    *valloc(size_t) __alloc_size(1);
    
    
    // block分配方法
    // Create a heap based copy of a Block or simply add a reference to an existing one.
    // This must be paired with Block_release to recover memory, even when running
    // under Objective-C Garbage Collection.
    BLOCK_EXPORT void *_Block_copy(const void *aBlock)
        __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_2);
    

    通过hook内存操作API记录下内存分配的堆栈、大小,即可分析内存使用情况。

    同时源码中还存在一个全局钩子函数malloc_logger ,可输出Malloc过程中的日志,定义如下:

    // We set malloc_logger to NULL to disable logging, if we encounter errors
    // during file writing
    typedef void(malloc_logger_t)(uint32_t type,
            uintptr_t arg1,
            uintptr_t arg2,
            uintptr_t arg3,
            uintptr_t result,
            uint32_t num_hot_frames_to_skip);
    extern malloc_logger_t *malloc_logger;
    

    iOS堆内存分析方案,可通过hook malloc系列API,也可以设置malloc_logger的函数实现,即可记录下堆内存使用情况。

    此方案有几个难点问题,每秒钟内存分配的量级大、内存有分配有释放需要高效查询和堆栈反解聚合。为此我们设计了一套完整的Malloc堆内存分析方案,来满足快速定位堆内存归属,以便分发到各自业务Owner分析优化。

    统一管理

    随着业务的增长给高德地图这个超级APP带来了极大资源压力,因此我们沉淀了一套自适应资源管理框架,来满足不同业务场景在有限资源下能够做到功能和体验极致均衡。主要的设计思路是通过监测用户设备等级、系统状态、当前业务场景以及用户行为,利用调度算法进行实时推算,统一管理协调APP当前资源状态分配,对用户当前不可见的内存等资源进行回收。

    自适应资源管理框架-内存部分

    可以根据不同的设备等级、业务场景、用户行为和系统状态来管理资源。各业务都可以很容易的接入此框架,目前已经应用到多个业务场景,均有不错的收益。

    数据验收

    通过三个版本的连续治理,前后台导航场景均有50%的收益,同时Abort率也有10%~20%的收益。整体收益算是比较乐观,但是随之而来的挑战是我们该如何守住成果。

    长线管控

    所谓打江山容易守江山难,如果没有长线管控的方案,随着业务的版本迭代,不出三五个版本就会将先前的优化消耗。为此我们构建了一套APM性能监控平台,在研发测试阶段发现并解决问题,不把问题带上线。

    APM性能监控平台

    为了将APP的性能做到日常监控,我们建设了一套线下「APM性能监控平台」,平台能够支持常规业务场景的性能监控,包括:内存、CPU、流量等,能够及时的发现问题并进行报警。再配合性能跟进流程,为客户端性能保障把好最后一关。

    内存分析工具

    Xcode memory gauge:在Xcode的Debug navigator中,可以粗略查看内存占用的情况。

    Instruments - Allocations:可以查看虚拟内存占用、堆信息、对象信息、调用栈信息、VM Regions信息等。可以利用这个工具分析内存,并针对地进行优化。

    Instruments - Leaks:用于检测内存泄漏。

    Instruments - VM Tracker:可以查看内存占用信息,查看各类型内存的占用情况,比如dirty memory的大小等等,可以辅助分析内存过大、内存泄漏等原因。

    Instruments - Virtual Memory Trace:有内存分页的具体信息,具体可以参考WWDC 2016 - Syetem Trace in Depth。

    Memory Resource Exceptions:从Xcode 10开始,内存占用过大时,调试器能捕获到EXC_RESOURCE RESOURCE_TYPE_MEMORY异常,并断点在触发异常抛出的地方。

    Xcode Memory Debugger:Xcode中可以直接查看所有对象间的相互依赖关系,可以非常方便的查找循环引用的问题。同时,还可以将这些信息导出为memgraph文件。

    memgraph + 命令行指令:结合上一步输出的memgraph文件,可以通过一些指令来分析内存情况。vmmap可以打印出进程信息,以及VMRegions的信息等,结合grep可以查看指定VMRegion的信息。leaks可追踪堆中的对象,从而查看内存泄漏、堆栈信息等。heap会打印出堆中所有信息,方便追踪内存占用较大的对象。malloc_history可以查看heap指令得到的对象的堆栈信息,从而方便地发现问题。

    总结:malloc_history ===> Creation;leaks ===> Reference;heap & vmmap ===> Size。

    MetricKit:iOS 13新推出的监控框架,用于收集和处理电池和性能指标。当用户使用APP的时候,iOS会记录各项指标,然后发送到苹果服务端上,并自动生成相关的可视化报告。通过Window -> Organizer -> Metrics可查,包括电池、启动时间、卡顿情况、内存情况、磁盘读写五部分。也可以MetricKit集成到工程里,将数据上传到自己的服务进行分析。

    MLeaksFinder:通过判断UIViewController被销毁后其子view是否也都被销毁,可以在不入侵代码的情况下检测内存泄漏。

    Graphics API Debugger:Google开源的一系列的Graphics调试工具,可以检查、微调、重播应用对图形驱动的API调用。

    Arm Mobile Studio: 专业级GPU分析工具。

    你可能还想看

    3倍+提升,高德地图极致性能优化之路

    以高德为例,超级APP启动提速的实践和思考

    高德APP启动耗时剖析与优化实践(iOS篇)

    招聘

    阿里巴巴高德地图工程技术中心长期招聘Java、Golang、Python、Android、iOS 前端资深工程师和技术专家,职位地点:北京。欢迎投递简历到gdtech@alibaba-inc.com,邮件主题为:姓名-应聘团队-应聘方向。

    展开全文
  • openlayers部署离线高德地图

    万次阅读 2021-01-18 15:06:09
    一、通过Nginx反向代理 通过前置机连接高德地图,配置了很久,Nginx反向代理通了,但始终卡在了内网服务器上,内网服务器可以访问前置机的地址,端口也通了就是地图没有显示出来;我检查 看是不是代码出现问题,...
  • 伴随着高德地图APP近几年的高速发展,也面临到这些问题,从2019年开始,我们开启了一系列性能优化专项,对高德地图APP进行了深入性能分析和极致优化,取得比较显著的效果。在这个过程中总结了一系列优化思路和技术...
  • uni-app 接入高德地图案例

    万次阅读 多人点赞 2019-03-19 15:02:04
    第一步:注册高德地图开发者账号 地址:https://lbs.amap.com/ 第二步:创建自己的应用 (我这里是小程序的) 第三步:下载相关sdk文件,导入amap-wx.js到项目中 第四步:创建AMapWX对象 方式一: 方式二...
  • 高德智慧交通地图空间可视化SDK设计与实现

    万次阅读 多人点赞 2021-02-01 17:59:59
    一、背景地图空间可视化作为高德智慧交通前端业务中最重要的功能之一,承担着城市交通大脑、全境智能大屏等业务中大量的地图渲染需求。作为向用户展示交通数据的窗口,我们需要展现省、市、区、商圈、...
  • 2020云栖大会于9月17日-18日在线上举行,阿里巴巴高德地图携手合作伙伴精心组织了“智慧出行”专场,为大家分享高德地图在打造基于DT+AI和全面上云架构下的新一代出行生活服务平台过程...
  • Android实现高德地图轨迹回放

    千次阅读 多人点赞 2020-10-30 14:13:53
    Android实现高德地图轨迹回放写在前面准备官方文档解读创建应用:地图api引入:权限添加效果展示过程实现写在结尾 写在前面 本篇文章是对近期工作项目中集成高德地图轨迹回放和单/多点标记功能的一个总结。 欢迎...
  • Python调用高德地图API实现经纬度换算、地图可视化

    万次阅读 多人点赞 2019-06-26 21:42:16
    前地图可视化的工具和函数比较多,但是在不知道相关地点经纬度的情况下,通过python调用高德地图API实现经纬度换算,并且直接在高德地图新推出的轻量级可视化平台上实现一键式地图可视化,这其中需要申请密钥、批量...
  • 之前在做大创的时候,就用到了高德地图,但是当时是为了赶项目,所以只是按照官方的demo代码搬运了过来,而具体哪个类是干什么的根本不清楚,而且一个完整的流程也是很模糊。现在再次用到了这个东西,所以觉得一定要...
  • uniapp 中引入高德地图

    千次阅读 2020-07-06 15:22:01
    uniapp 引入高德地图 地图现在已经渗入到生活的方方面面,给生活带了极大的编译,那么我们如何才能在 项目中引入地图呢 首先看一下效果 : 联系地址这个地方 在项目中引入的高德地图 引入步骤 首先 1,需要在高德...
  • 关于高德地图的分析报告

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

    千次阅读 热门讨论 2020-08-26 11:47:20
    vue集成高德地图
  • 高德地图中展示轨迹有三种方法,一种方法是AMapUI的PathSimplifier创建巡航器来展示轨迹: 高德地图轨迹展示示例 第二种方法是使用moveAlong,moveAlong可以让marker按照给定的经纬度数组以指定的速度移动 高德地图...
  • 准备工作 ... 首先,注册开发者账号,成为高德开放平台开发者 ... 为应用添加 Key,「服务平台」一项请选择「 Web 端 ( JSAPI ) 」 ...新建一个DIV,作为地图的容器(这一步和使用其他插件一样,必...
  • 高德地图拾取经纬度 + 搜索 + 标记

    万次阅读 2020-07-24 10:46:52
    代码: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>坐标</title>...key=0250860ccb
  • 本文转自:公众号“设计气象台”作者:爱敷面膜的台小妹高德地图可以做区位分析,想必你应该都知道了。(▲ 高德地图“原配”色系)但是最近发现,高德地图又新出了个逆天的功能——一键生成城市3...
  • 微信小程序---高德地图API

    万次阅读 2018-11-29 10:16:16
    本文章介绍微信小程序调用高德地图API的过程,使用高德定位功能做演示。 微信小程序目前支持百度地图、高德地图、腾讯地图。用法都基本一致,简单说一下他们的区别,高德地图精度应该是最准确的,毕竟本来就是做...
  • 高德地图-绘制路线

    万次阅读 2019-04-23 14:14:30
    高德地图-绘制路线 效果如下图: #步骤一:使用高德地图 JS API 开发地图应用之前的一些准备工作 1.1. 在页面添加 JS API 的入口脚本标签,并将其中「您申请的key值」替换为您刚刚申请的 key; HTML <...
  • 高德地图面积测量小工具

    万次阅读 2018-09-26 12:11:49
    由于项目的需要,需要用到高德地图的测量面积功能,其实高德地图官方已经提供了测量面积的工具,但是感觉有点不太方便,于是在原来的测量面积工具的基础上进行一点补充,由于时间的原因,写的比较粗糙,其实有很多...
  • html前端使用高德地图入门教程

    万次阅读 多人点赞 2018-09-11 10:14:38
    web端使用高德地图入门教程 不要问为什么使用高德地图,而不是百度地图,没有为什么 web端使用高德地图入门教程 开始 准备工作 开始 准备工作 如果开发者账号包括Key...
  • 现在做这个移动端的项目中有一个地图选址的功能,本来高德地图中有一个现成的选址组件,但是有两个问题,因为他是用iframe引用的,第一改不了样式,这点还勉强能接受;第二他的左上角有一个返回键,在搜索的时候可以...
  • 方法:1.a标签直接打开地图,地图在浏览器支持跳转。 高德: <...name=所在的位置名称">...高德地图</a> 百度: <a href="http://api.map.baidu.com/marker?location=纬度,经度&title=所在位置名
  • 高德地图3D轨迹回放 + 视野跟随功能

    千次阅读 2020-12-09 17:45:03
    高德地图3D轨迹回放 + 视野跟随功能概述代码实现步骤完整代码 (需要添加一个2.0的key) 概述 若有帮助到你,麻烦点一波关注,博主会持续推出Echarts,D3,地图,Three.js方面的文章~~~ 注意:高德地图必须使用2.0版本 ...
  • 本文实例为大家分享了Android实现高德地图显示及定位的具体代码,供大家参考,具体内容如下 先看看效果 1、要实现高德地图的定位,首先要下载高德地图的SDK  下载地址 然后在高德地图官网上登录你注册的账号并且去...
  • uniapp H5端使用高德地图完成路线规划

    千次阅读 热门讨论 2020-09-01 15:14:26
    首先到高德地图API,申请web端key 参考高德H5端教程开始写代码高德地图JS API 1、准备工作,会提示你先引入下边这块代码 <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.15&...
  • Echarts 与 高德地图/百度地图结合 风可视化实例Demo声明正文Echarts结合百度地图Echarts结合高德地图 声明 原例与数据来源于Echarts 官方实例 - GL实例 中 GL路径图:Global Wind Visualization。 原例官网...
  • 高德地图加载谷歌地图瓦片

    千次阅读 热门讨论 2019-08-17 17:11:01
    外业实验采集数据,需要用到无人机,遂利用高德地图SDK和DJI Mobile SDK开发了一款无人机航线规划软件。然而当地比较偏僻,高德卫星地图缩放等级约为16,无法满足作业需求。调查了其他地图,如腾讯地图、百度地图、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,391
精华内容 14,556
关键字:

高德地图