从百度地图获取水库位置及名字,并将其BD09坐标系转为WGS84坐标系 您所在的位置:网站首页 坐标系和经纬度的关系 从百度地图获取水库位置及名字,并将其BD09坐标系转为WGS84坐标系

从百度地图获取水库位置及名字,并将其BD09坐标系转为WGS84坐标系

2023-06-01 17:42| 来源: 网络整理| 查看: 265

从百度地图获取水库位置及名字可以使用百度地图开放平台提供的API来实现,API文档链接为:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi。

首先需要在百度地图开放平台上注册并获取相应的AK(Access Key)。然后,通过调用API接口获取到指定区域内的水库信息,其JSON格式的响应包含了水库的名称和经纬度坐标信息。接着,就可以使用Python内置的geopy库将百度坐标系转换为wgs84坐标系了。 import requests from geopy import Point, distance

# 全局变量,需替换为你自己的AK值 AK = "XXXXXXXXXXXXXXXXXXXXXXXXXXX"

def get_reservoirs(lng, lat):     '''获取指定经纬度周围5公里范围内的所有水库信息,并返回'''     url = "http://api.map.baidu.com/place/v2/search"     params = {         "query": "水库",         "location": f"{lat},{lng}",         "radius": 5000,         "coord_type": "bd09ll",         "output": "json",         "ak": AK     }     response = requests.get(url, params=params).json()     results = []     for result in response['results']:         if 'reservoir' not in result['tags']:             continue         name = result['name']         location = result['location']         point = Point(location['lat'], location['lng'])         dis = round(distance((lat, lng), (point.latitude, point.longitude)).km, 2)         results.append((name, point, dis))     return results

def bd09_to_wgs84(point):     '''将百度坐标系(bd09ll)下的Point对象转为wgs84坐标系'''     url = "http://api.map.baidu.com/geoconv/v1/"     params = {         "coords": f"{point.longitude},{point.latitude}",         "from": 3,         "to": 5,         "ak": AK     }     response = requests.get(url, params=params).json()     if response['status'] != 0:         raise ValueError(f"Coordinate conversion failed: {response['message']}")     location = response['result'][0]     return Point(location['y'], location['x'])

# 测试代码 if __name__ == '__main__':     lat, lng = 31.231139, 121.472805  # 上海市浦东新区南汇金汇镇吉林路     reservoirs = get_reservoirs(lng, lat)     for name, point, dis in reservoirs:         print(f"Name: {name}\tDistance: {dis} km")         wgs84_point = bd09_to_wgs84(point)         print(f"BD09: ({point.latitude}, {point.longitude})\tWGS84: ({wgs84_point.latitude}, {wgs84_point.longitude})")  

以上代码使用了requests和geopy库,需要提前安装。在运行的过程中需要替换上文中的AK字符串为您自己的AK值。在`get_reservoirs`函数中需要传入指定的经度和纬度信息,在函数中使用请求地址和参数来获取周围指定范围内的所有水库信息。在`bd09_to_wgs84`函数中,通过调用百度API将百度坐标系转换为wgs84坐标系,并返回Point对象。

对于测试代码部分,它会输出附近5公里距离内的水库名称、距离以及水库坐标并进行BD09与WGS84的坐标显示。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有