天地图 服务中心 https://cloudcenter.tianditu.gov.cn/administrativeDivision/
代码
import os
import sys
import geopandas as gpd
import folium
from folium.plugins import StripePattern
# ================== 路径管理增强模块(Jupyter适配版)==================
# 动态构建文件路径(使用os.getcwd()替代__file__)
current_dir = os.getcwd() # 获取Jupyter当前工作目录[6,8](@ref)
geo_path = os.path.join(current_dir, '潮州市_市.geojson')
output_dir = os.path.join(current_dir, 'outputs')
# 调试信息打印(新增)
print(f"当前工作目录: {current_dir}")
print(f"GeoJSON文件路径: {geo_path}")
# 路径校验逻辑(适配Jupyter环境)
if not os.path.exists(geo_path):
print(f"[错误] GeoJSON文件不存在于路径: {geo_path}")
print("排查步骤:")
print(f" 1. 执行命令: !ls -l {geo_path}") # Jupyter魔法命令验证文件存在性[5](@ref)
print(f" 2. 确认文件编码: !file -i {geo_path}") # 验证文件编码
sys.exit(1)
# 创建输出目录(保留原逻辑)
os.makedirs(output_dir, exist_ok=True)
# ================== 数据加载模块 ==================
try:
# 中文路径处理(保留编码参数)
chaozhou = gpd.read_file(geo_path, encoding='utf-8-sig')
print("坐标系类型:", chaozhou.crs)
# 坐标系强制转换(保留原逻辑)
if chaozhou.crs != 'EPSG:4326':
print(f"正在转换坐标系:{chaozhou.crs} -> WGS84")
chaozhou = chaozhou.to_crs(epsg=4326)
except Exception as e:
print(f"文件加载失败,错误详情:{str(e)}")
sys.exit(2)
# ================== 地图生成模块(保留原逻辑)==================
# 计算动态中心点
center_lat = chaozhou.geometry.centroid.y.mean()
center_lon = chaozhou.geometry.centroid.x.mean()
# 创建高德矢量地图
m = folium.Map(
location=[center_lat, center_lon],
zoom_start=9,
tiles='https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}',
attr='高德地图',
control_scale=True
)
# 行政区划样式函数
def style_function(feature):
return {
'fillColor': '#ffffff',
'color': '#ff0000',
'weight': 2,
'fillOpacity': 0.1,
'dashArray': '5,5'
}
# 添加GeoJSON图层
folium.GeoJson(
chaozhou,
name='潮州市行政边界',
style_function=style_function,
tooltip=folium.GeoJsonTooltip(
fields=['name'],
aliases=['行政区: '],
localize=True,
labels=True
)
).add_to(m)
# 添加图例组件(保留原逻辑)
legend_html = '''
# ================== 输出模块(适配跨平台打开方式)==================
output_path = os.path.join(output_dir, 'chaozhou_gaode_map.html')
m.save(output_path)
print(f"地图已生成,文件位置: {output_path}")
print(f"打开方式建议: 直接点击Jupyter文件列表中的 {output_path}") # 替代Linux专属指令