首页系统综合问题高德地图:通过Python获取并保存地理位置、经纬度等数据

高德地图:通过Python获取并保存地理位置、经纬度等数据

时间2023-05-12 20:24:20发布分享专员分类系统综合问题浏览192

今天小编给各位分享ip地址定位查询地图软件的知识,文中也会对其通过高德地图:通过Python获取并保存地理位置、经纬度等数据和如何采集到百度地(高德地图)图上的地理位置信息?等多篇文章进行知识讲解,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 高德地图:通过Python获取并保存地理位置、经纬度等数据
  • 如何采集到百度地(高德地图)图上的地理位置信息?
  • 高德地图怎样实现实时定位,得到当前地点的坐标,位置
  • 如何采集到百度地(高德地图)图上的地理位置信息?
  • 一、高德地图:通过Python获取并保存地理位置、经纬度等数据

    我们经常使用高德地图、百度地图来进行搜索一些地址、行业等信息,如我们需要搜索珠海市有多少酒店、多少个商场等等。之前我已写有一篇《Python怎么获取高德地图平台经纬度等数据》,该篇文章只写了如何申请高德地图key和通过python调用高德地图api获取高德地图搜索结果,并没有把数据保存下来的内容,故重新写了本篇文章内容。

    这篇文章主要讲解“Python获取并保存高德地图平台地理位置、经纬度等数据”,即通过python调用高德地图api进行关键字搜索,从而获取去高德地图平台经纬度等数据。

    本篇文章主要分为3部分内容:

    1、注册高德开放平台账号并申请Key,作为位置数据调用的密匙

    2、通过python获取高德地图平台经纬度数据

    3、搜索结果数据保存

    (1)数据预处理:将json格式搜索结果数据转换为dataframe

    (2)将预处理后的数据dataframe保存到本地目录

    (3)将预处理后的数据dataframe保存到数据库

    一、注册高德开放平台账号并申请Key,作为位置数据调用的密匙

    1、高德开放平台--网址

    高德开放平台网址:https://console.amap.com/dev/index

    2、高德开放平台--注册账号

    打开高德开放平台网址,按要求输入手机号注册即可

    高德开放平台--用户注册

    3、高德开放平台--申请Key

    (1)、登录平台账号,在【应用管理】-【我的应用】界面,点击【创建新应用】

    高德开放平台--我的应用

    (2)、自命名填写【应用名称】,选择【应用类型】,然后点击【新建】按钮

    高德开放平台--创建新应用

    (3)、新建应用后,点击【添加】

    高德开放平台-为应用添加 Key

    (4)、自命名填写【key名称】,选择【web服务】,【ip白名单】留空,然后点击【提交】

    高德开放平台--填写完善key信息

    (5)、生成的key如下图,key名称=testkey,key值=‘8d4621****’

    高德开放平台--key值

    二、通过python获取高德地图平台经纬度数据

    1、获得key以后,咱们就可以构造API数据请求函数:fun_gaode_search(key_word, city, page),Python代码如下:

    """调用高德API,POI关键字查询--关键字搜索"""def fun_gaode_search(key_word, city, page):        '''        key_word: 搜索关键字        city: 城市名称        page: 搜索返回结果的第几页        '''        print('高德地图')        import requests        import json        # 输入API问号前固定不变的部分        url = 'https://restapi.amap.com/v3/place/text'        # 将两个参数放入字典         params = {'key': '8d4621*****',  # 高德开放平台key值                  'keywords': key_word,                  'city': city,                  'page': page,                  'offset': 1000                  }        result_res = requests.get(url, params)        res = json.loads(result_res.text)        return res['pois']

    如搜索珠海有多少个高等院校:fun_gaode_search('高等院校', '珠海', 1)

        res = fun_gaode_search('高等院校', '珠海', 1)  # 返回搜索结果第一页    print('珠海高等院校 搜索结果如下:')    pprint(res)

    2、上述脚本运行结果如下:

    搜索结果包括:address详细地址、adname区县名称、cityname地市名称、location地理坐标(经度,纬度),name地点名称等信息。

    运行结果--json格式数据

    三、保存搜索结果数据

    将json格式数据转换为dataframe,然后就可以通过df.to_sql()或df.to_csv()函数保存搜索结果数据。

    数据保存方式:

    1、保存到本地目录:df.to_csv()

    2、保存到数据库:df.to_sql()

    (1)数据预处理:将json格式数据转换为dataframe

    json格式数据可能存在部分字段缺失,故需对缺少字段进行处理。如字典元素中不存在某个字段,则dataframe中该字段标记为None.

    '''高德搜索结果--json格式数据转换为dataframe格式数据'''def fun_gaode_result_deal(result_search):        import pandas as pd        df_result = pd.DataFrame(columns=['name',  # 地点名称                                          'pname',  # 省份                                          'cityname', # 城市名称                                          'adname',  # 区域名称                                          'type',                                          'address',   # 地址                                          'location',  # 经纬度                                          'tel',  # 电话                                          'typecode',                                          'id',                                          'shopinfo'                                          ]                                 )        for i in range(len(result_search)):            dict_keys = result_search[i].keys()            df_result.at[i, 'name'] = result_search[i]['name'] if 'name' in dict_keys else None            df_result.at[i, 'pname'] = result_search[i]['pname'] if 'pname' in dict_keys else None            df_result.at[i, 'cityname'] = result_search[i]['cityname'] if 'cityname' in dict_keys else None            df_result.at[i, 'adname'] = result_search[i]['adname'] if 'adname' in dict_keys else None            df_result.at[i, 'type'] = result_search[i]['type'] if 'type' in dict_keys else None            df_result.at[i, 'address'] = result_search[i]['address'] if 'address' in dict_keys else None            df_result.at[i, 'location'] = result_search[i]['location'] if 'location' in dict_keys else None            df_result.at[i, 'tel'] = result_search[i]['tel'] if 'tel' in dict_keys and len(result_search[i]['tel']) > 6 else None            # df_result.at[i, 'tel'] = result_search[i]['tel'] if 'tel' in dict_keys else None            df_result.at[i, 'typecode'] = result_search[i]['typecode'] if 'typecode' in dict_keys else None            df_result.at[i, 'id'] = result_search[i]['id'] if 'id' in dict_keys else None            df_result.at[i, 'shopinfo'] = result_search[i]['shopinfo'] if 'shopinfo' in dict_keys else None        return df_result

    (2)将预处理后的数据保存到本地目录

    构造函数 fun_df_to_csv(save_filename, df_result, bl_append),脚本如下

    参数说明:

    1、save_filename:是指保存到本地目录的文件名,如 save_filename=‘D:\a.txt’

    2、df_result:搜索结果预处理后的数据dataframe

    3、bl_append:是否追加写入save_filename文件

    bl_append=True,则在文件末尾开始写入记录

    bl_append=False,则清除文本所有内容后重新开始写入文本

     '''搜索结果另存为文件'''def fun_df_to_csv(save_filename, df_result, bl_append):        print('搜索结果另存为文件')        pprint(sys.path)        if bl_append is True:            df_result.to_csv(path_or_buf=save_filename,                             index=False,                             sep=",",                             mode='a'  # 追加                             )        else:            df_result.to_csv(path_or_buf=save_filename,                             index=False,                             sep=","                             )

    (3)将预处理后的数据保存到数据库

    构造函数 fun_df_to_sql(df_result, db_table, if_exists)来保存数据到数据库,脚本如下:

    参数说明:

    1、df_result:搜索结果预处理后的数据dataframe

    2、db_table:数据库表名

    库表的格式需跟df格式对应,如库表不存在,df.to_sql()会自动根据df的列名进行自动建表

    3、if_exists:操作方式,有append、fail、replace

    append:如果表存在,则将数据添加到这个表的后面

    fail:如果表存在就不操作

    replace:如果存在表,删了,重建

    # 导入sqlalchemy中的create_engine模块,用于连接数据库from sqlalchemy import create_enginedef fun_df_to_sql(df_result, db_table, if_exists):        try:            engine = create_engine('mysql+pymysql://{username}:{password}@{host}:{port}/{database}'.format(host=self.host,username=self.user_id,password=self.pwd,port=self.port,database=self.db_name))                       conn = engine.connect()            # if_exists=['append','fail','replace']            # 导入到mysql数据库            df_result.to_sql(name=db_table,                            con=conn,                            index=False,                            if_exists=if_exists  # if_exists='append'                            )            print('数据导入数据库--OK')        except Exception as err:            print('数据导入数据库--错误: '+str(err))

    综上,Python取高德地图平台经纬度等数据全部代码如下:

    from pprint import pprint from sqlalchemy import create_engine"""调用高德API,POI关键字查询--关键字搜索"""def fun_gaode_search(key_word, city, page):        '''        key_word: 搜索关键字        city: 城市名称        page: 搜索返回结果的第几页        '''        print('高德地图')        import requests        import json        # 输入API问号前固定不变的部分        url = 'https://restapi.amap.com/v3/place/text'        # 将两个参数放入字典         params = {'key': '8d4621******',  # 高德开放平台key值                  'keywords': key_word,                  'city': city,                  'page': page,                  'offset': 1000                  }        result_res = requests.get(url, params)        res = json.loads(result_res.text)        return res['pois']'''高德搜索结果--json格式数据转换为dataframe格式数据'''def fun_gaode_result_deal(result_search):        import pandas as pd        df_result = pd.DataFrame(columns=['name',  # 地点名称                                          'pname',  # 省份                                          'cityname', # 城市名称                                          'adname',  # 区域名称                                          'type',                                          'address',   # 地址                                          'location',  # 经纬度                                          'tel',  # 电话                                          'typecode',                                          'id',                                          'shopinfo'                                          ]                                 )        for i in range(len(result_search)):            dict_keys = result_search[i].keys()            df_result.at[i, 'name'] = result_search[i]['name'] if 'name' in dict_keys else None            df_result.at[i, 'pname'] = result_search[i]['pname'] if 'pname' in dict_keys else None            df_result.at[i, 'cityname'] = result_search[i]['cityname'] if 'cityname' in dict_keys else None            df_result.at[i, 'adname'] = result_search[i]['adname'] if 'adname' in dict_keys else None            df_result.at[i, 'type'] = result_search[i]['type'] if 'type' in dict_keys else None            df_result.at[i, 'address'] = result_search[i]['address'] if 'address' in dict_keys else None            df_result.at[i, 'location'] = result_search[i]['location'] if 'location' in dict_keys else None            df_result.at[i, 'tel'] = result_search[i]['tel'] if 'tel' in dict_keys and len(result_search[i]['tel']) > 6 else None            # df_result.at[i, 'tel'] = result_search[i]['tel'] if 'tel' in dict_keys else None            df_result.at[i, 'typecode'] = result_search[i]['typecode'] if 'typecode' in dict_keys else None            df_result.at[i, 'id'] = result_search[i]['id'] if 'id' in dict_keys else None            df_result.at[i, 'shopinfo'] = result_search[i]['shopinfo'] if 'shopinfo' in dict_keys else None        return df_result '''搜索结果另存为文件'''def fun_df_to_csv(save_filename, df_result, bl_append):        print('搜索结果另存为文件')        pprint(sys.path)        if bl_append is True:            df_result.to_csv(path_or_buf=save_filename,                             index=False,                             sep=",",                             mode='a'  # 追加                             )        else:            df_result.to_csv(path_or_buf=save_filename,                             index=False,                             sep=","                             )def fun_df_to_sql(df_result, db_table, if_exists):        try:            engine = create_engine('mysql+pymysql://{username}:{password}@{host}:{port}/{database}'.format(host=self.host,username=self.user_id,password=self.pwd,port=self.port,database=self.db_name))                       conn = engine.connect()            # if_exists=['append','fail','replace']            # 导入到mysql数据库            df_result.to_sql(name=db_table,                            con=conn,                            index=False,                            if_exists=if_exists  # if_exists='append'                            )            print('数据导入数据库--OK')        except Exception as err:            print('数据导入数据库--错误: '+str(err))'''主函数'''if __name__ == "__main__":    res = fun_gaode_search('高等院校', '珠海', 1)  # 搜索结果    print('珠海高等院校 搜索结果如下:')    # pprint(res)    df = fun_gaode_result_deal(res)    pprint(df)  # 打印查看预处理后的数据df        save_filename='d:\a.txt'    df_result=df    bl_append=True    fun_df_to_csv(save_filename, df_result, bl_append)  # 保存数据到本地目录        df_result=df    db_table='chen_gaode_result'    if_exists = 'append'    fun_df_to_sql(df_result, db_table, if_exists)  # 保存数据到数据库

    一、如何采集到百度地(高德地图)图上的地理位置信息?

    中先点击“地图快速生成器”然后,第一步:创建地图(定位中心点、设置地图、添加标注)
    第二步:获取代码(然后我获取了代码),获取了代码后就不知道下一步该如何操作了。请教百度高人指!

    二、高德地图怎样实现实时定位,得到当前地点的坐标,位置

    开发指南第三章定位信息前半部分的代码实现的功能是:当手机采集的地理位置(经纬度)发生改变时在界面上显示出改变后的经纬度。如果开发过android原生定位程序的开发者应该对这部分代码不陌生,中规中矩,先注册位置监听服务,然后当位置发生改变后出发onLocationChanged()方法。现在请在官网上下载示例代码,导入工程后开启包com.amap.cn.apis.location中的MyLocation.java文件,该文件实现的主要功能是:初始化地图并且实现首次定位,地图会自动移动到定位点,我们一会便要基于这个文件来完成地图自动实时定位的功能。
      看到这儿,有人可能想把MyLocation文件中的内容与第三章给出的android原生定位模块简单整合。如果你的解决思路是:在onLocationChanged()方法中企图在地图上绘制出当前的位置,那么就会遇到很大的麻烦。因为如果用高德地图提供的api在地图上绘制定位点的话一定要调用类MyLocationOverlay中的enableMyLocation()方法,根据官方参考资料,这个方法封装了android原生的类LocationManager中的requestLocationUpdates()方法,所以你在写onLocationChanged()方法前一定是已经调用了原生的类LocationManager中的requestLocationUpdates()方法,这样一来造成了LocationManager在没有removeUpdate前又进行了一次requestLocationUpdates,由此造成程序意外退出。
      所以还是回到开发指南第三章,好好看看后半部分:如果想让地图跟随当前位置移动,需要继承MyLocationOverlay 并实现其onLocationChanged()方法,调用MapView.getController().animateTo()方法移动地图位置。官方用户指南上的这句原话正是问题的正解,不过官网实在太坑爹,简简单单几行文字和代码,对于浣熊这种刚刚接触地图开发的小白来说实在是看得一头雾水,还在一阵瞎折腾,终于解决了问题,所以共享出来,希望和我一样的小白能够少走些弯路。
      我先把修改后的MyLocation.java文件整个贴出来,在增加或改动的代码前后均表明了注释(不包括包的改动):“”和""

    三、如何采集到百度地(高德地图)图上的地理位置信息?

    你说的东西叫POI搜索,调用百度地图或高德地图自己提供的接口就可以,具体示例自己去看看官网SDK提供的DEMO,通过这些API就可以取到你要的数据,是保存还是干吗就取决于你自己了。

    关于ip地址定位查询地图软件的问题,通过《高德地图怎样实现实时定位,得到当前地点的坐标,位置》、《如何采集到百度地(高德地图)图上的地理位置信息?》等文章的解答希望已经帮助到您了!如您想了解更多关于ip地址定位查询地图软件的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    ip地址定位查询地图软件
    Allegro下载歌单分享,让你的音乐之旅更加开阔 ALC声卡的最大驱动支持以及输出特性