(PYTHION)地理逆编码(根据经纬度获取详细地址)

本文介绍了如何利用高德地图的逆地理编码API将经纬度坐标转换为详细的地理位置信息。首先,需要申请API Key,然后通过HTTP请求发送坐标并解析返回的JSON数据,获取省、市、区等地址信息。针对行政村级别的数据,通过设置`extensions=all`可获取更多详细信息。此外,还提供了坐标转换函数,以解决不同坐标系统间的转换问题。最后,通过示例代码展示了如何遍历返回的POI列表,找到最近的村庄名称。

@TOC地理逆编码(获取经纬度详细地址)

逆地理编码

逆地理编码,又称地址解析服务,是指从已知的经纬度坐标到对应的地址描述(如行政区划、街区、楼层、房间等)的转换。常用于根据定位的坐标来获取该地点的位置详细信息,与定位功能是黄金搭档。也就是坐标转地址。

作业流程

第一步,申请Web服务API类型Key;

第二步,参考接口参数文档发起HTTP/HTTPS请求,第一步申请的 Key 需作为必填参数一同发送;

第三步,接收请求返回的数据(JSON或XML格式),参考返回参数文档解析数据。

定义URL

需要注意的是,调用逆地理编码需要高德的key,没有的同学可以搜索高德开放平台进行注册申请,这里就不介绍了。这是高德平台调用逆编码API的开发指南地址https://lbs.amap.com/api/webservice/guide/api/georegeo

URL构成

逆地理编码采用的请求方式为GET,API服务地址为https://restapi.amap.com/v3/geocode/regeo?parameters。URL中可以输入10个参数,其中Key和Location为必填参数,其余为可选参数,若不填写,则会使用默认的缺省值。具体的参数含义和缺省值见下表。
在这里插入图片描述
由于我们的目标是获取到行政村一级的数据,而常规返回数据中这一项通常为空值,故选择设置extensions=all,可以得到更多的返回信息,下面是一段完整的url。
“https://restapi.amap.com/v3/geocode/regeo?output=json&location={111.102608},{38.119400}&key=&extensions=all”

发起请求和返回数据处理

发起请求

import requests
res = requests.get(url)

逆地理编码API使用的请求方式为get

返回参数处理

逆地理编码的响应结果的格式由请求参数output指定。这里没有设置该参数,故返回默认的json格式。

val = res.json()

返回参数主要分为结果状态值status、状态说明info、逆地理编码列表regeocodes三类。结果状态值和状态说明反映的是请求结果,主要数据都在逆地理编码列表中。
在这里插入图片描述
我们可以读取字典的方式对该列表进行读取

val['addressComponent']['province']   # 获取省份
val['addressComponent']['city']           # 获取市
val['addressComponent']['district']      # 获取县区

下面是根据上述流程对代码进行封装得到的完整代码,这里我们通过遍历PIO列表里面的地名获取距离最近的庄村点作为所属行政村名称。另外值得注意的是常规GPS获取到数据的坐标系统与高德所用坐标系统不一致,存在偏差。可以通过调用坐标转换API实现GPS坐标到高德坐标的转换。这部分代码已经采用函数封装写在下面了,有需要的可以参考一下。

import requests

在 Vue2 项目中使用高德地图 API 根据经纬度获取详细地址信息,可以通过调用高德地图的逆地理编码服务实现。高德地图提供了 `AMap.Geocoder` 插件,用于将经纬度转换为具体的地址信息。 以下是一个完整的示例代码,展示如何在 Vue2 项目中实现该功能: ### 1. 引入高德地图 API 在 `index.html` 文件中引入高德地图的 JS API: ```html <script type="text/javascript" src="https://webapi.amap.com/maps?v=1.4.14&key=你的高德地图Key"></script> ``` 请将 `你的高德地图Key` 替换为你在高德开放平台申请的合法 Key。 ### 2. 在 Vue 组件中使用 `AMap.Geocoder` ```vue <template> <div> <button @click="getLocation">获取地址信息</button> <p>详细地址:{{ address }}</p> </div> </template> <script> export default { data() { return { address: '', longitude: 116.397428, // 示例经度 latitude: 39.90923 // 示例纬度 }; }, methods: { getLocation() { const that = this; const lnglat = [this.longitude, this.latitude]; AMap.plugin('AMap.Geocoder', function () { const geocoder = new AMap.Geocoder(); geocoder.getAddress(lnglat, function (status, result) { if (status === 'complete' && result.info === 'OK') { that.address = result.regeocode.formattedAddress; console.log('获取到的详细地址:', that.address); } else { console.error('根据经纬度查询地址失败:', status, result); that.address = '暂无'; } }); }); } } }; </script> ``` ### 3. 说明 - `AMap.Geocoder` 是用于地理编码逆地理编码的插件。 - `getAddress(lnglat, callback)` 方法接收一个经纬度数组和一个回调函数,返回该坐标点的详细地址信息。 - `result.regeocode.formattedAddress` 是返回的格式化后的地址字符串。 ### 4. 注意事项 - 确保引入的高德地图 API 的版本为 `1.4.14` 或更高版本。 - 需要注册高德地图开发者账号并申请合法的 Key。 - 该功能依赖浏览器的网络请求权限,确保网络请求未被拦截[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值