思路
在json文件中获取下面的四个点
组成东北,西南两组
{
“southwest”: { “lat”: 35.950, “lng”: 120.000 },//西南方
“northeast”: { “lat”: 36.200, “lng”: 120.300 }//东北方
}
最西点经度(minLng)
最东点经度(maxLng)
最南点纬度(minLat)
最北点纬度(maxLat)
方法一
从开放平台下载GeoJSON(地址:https://datav.aliyun.com/portal/school/atlas/area_selector)
访问国家地理信息公共服务平台(天地图)或青岛市开放数据平台,下载行政区划的GeoJSON数据。
python 脚本如下,修改文件路径直接运行即可
import json
try:
with open(r"D:\so\geojson.json", "r", encoding="utf-8") as f:
data = json.load(f)
# 检查数据结构
if "features" not in data or len(data["features"]) == 0:
raise ValueError("GeoJSON缺少features或features为空")
feature = data["features"][0]
geometry = feature["geometry"]
if geometry["type"] == "Polygon":
coordinates = geometry["coordinates"][0] # Polygon的第一层是边界
elif geometry["type"] == "MultiPolygon":
# 合并所有子多边形的坐标
coordinates = []
for polygon in geometry["coordinates"]:
coordinates.extend(polygon[0]) # 每个子多边形的第一层
else:
raise ValueError(f"不支持的几何类型: {geometry['type']}")
lats = [point[1] for point in coordinates]
lngs = [point[0] for point in coordinates]
bounds = {
"southwest": (min(lats), min(lngs)),
"northeast": (max(lats), max(lngs))
}
print(bounds)
except Exception as e:
print(f"错误: {e}")
方法二:
使用地图API(推荐)
- 百度地图API
百度地图提供行政区划边界查询接口,适合国内开发者。
步骤:
注册百度地图开放平台账号并创建应用,获取API密钥(AK)。
调用DistrictSearch接口,查询青岛市的区级边界。
解析返回的边界点数据,计算最小矩形范围。
示例代码:
// 引入百度地图API脚本
<script src="https://api.map.baidu.com/api?v=3.0&ak=你的AK"></script>
<script>
const map = new BMap.Map("container");
const districtSearch = new BMap.DistrictSearch(map);
districtSearch.search("青岛市市南区", (result) => {
const boundaries = result.districtList[0].boundaries; // 获取边界点数组
let minLat = 90, maxLat = -90, minLng = 180, maxLng = -180;
boundaries.forEach(points => {
points.forEach(point => {
minLat = Math.min(minLat, point.lat);
maxLat = Math.max(maxLat, point.lat);
minLng = Math.min(minLng, point.lng);
maxLng = Math.max(maxLng, point.lng);
});
});
const bounds = {
southwest: { lat: minLat, lng: minLng },
northeast: { lat: maxLat, lng: maxLng }
};
console.log("市南区latLngBounds:", bounds);
});
</script>
方法三
高德地图API
高德地图同样提供行政区划查询接口,支持GeoJSON格式边界数据。
接口文档:
https://lbs.amap.com/api/webservice/guide/api/district