Leafmap是一个专为交互式地图和地理空间分析设计的Python包,旨在让用户能够在Jupyter环境中以最少的代码进行地理空间数据的分析和可视化。
Leafmap构建于多个开源包之上,包括:
•
Folium
:基于Leaflet.js的交互式地图库
•
ipyleaflet
:用于Jupyter环境的交互式地图小部件
•
WhiteboxTools和whiteboxgui
:用于分析地理空间数据
•
ipywidgets
:用于设计交互式图形用户界面(GUI)
Leafmap允许用户无需编码即可将矢量和栅格数据加载到地图上。此外,用户可以利用强大的分析后端(即WhiteboxTools)直接在Leafmap用户界面中执行地理空间分析,而无需编写任何代码。WhiteboxTools库目前包含500多个用于高级地理空间分析的工具,如GIS分析、地貌分析、水文分析、LiDAR数据分析、数学和统计分析以及流网络分析。
安装方法
Leafmap的安装过程简单,建议使用干净的环境以避免依赖冲突。
前提条件:
• Jupyter 环境(如Jupyter Notebook或Google Colab)
安装步骤:
创建新Conda环境
conda create -n geo python=3.9 conda activate geo
安装Leafmap及依赖
conda install -c conda-forge mamba mamba install -c conda-forge leafmap geopandas localtileserver
核心功能
1. 一键创建交互式地图
import leafmap m = leafmap.Map() m # 在 Jupyter 中显示地图`
2. 多后端支持 (以kepler.gl为例)
import leafmap import geopandas as gpd # 创建一个 GeoDataFrame (示例数据) data = { 'City' : [ 'New York' , 'London' , 'Tokyo' ], 'Latitude' : [ 40.7128 , 51.5074 , 35.6895 ], 'Longitude' : [- 74.0060 , - 0.1278 , 139.6917 ] } gdf = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data[ 'Longitude' ], data[ 'Latitude' ])) m = leafmap.Map(center=[ 0 , 0 ], zoom= 2 , backend= 'kepler' ) # 指定使用 kepler.gl m.add_gdf(gdf, layer_name= "Cities" ) m
3. 交互式底图切换
import leafmap m = leafmap.Map() m.add_basemap( "Stamen.Terrain" ) #添加Stamen.Terrain底图 m
4. 矢量和栅格数据支持 (以Shapefile和GeoTIFF为例)
import leafmap m = leafmap.Map() # 添加 Shapefile (你需要替换成你的 Shapefile 路径) shapefile_path = "path/to/your/shapefile.shp" m.add_shp(shapefile_path, layer_name= "My Shapefile" ) # 添加 GeoTIFF (你需要替换成你的 GeoTIFF 路径) geotiff_path = "path/to/your/geotiff.tif" m.add_raster(geotiff_path, layer_name= "My Raster" , colormap= 'terrain' ) m
5. 自定义图例和颜色条
import leafmap import matplotlib.pyplot as plt m = leafmap.Map() # 添加栅格数据 (使用示例数据, 或替换成你的栅格文件路径) url = 'https://github.com/giswqs/data/raw/main/raster/srtm90.tif' m.add_raster(url, layer_name= 'srtm' , colormap= 'terrain'
) # 添加自定义颜色条, 自定义范围和标签 colors = [ '#006633' , '#E5FFCC' , '#662A00' , '#D8D8D8' , '#F5F5F5' ] # 颜色列表 labels = [ 'Low' , 'Medium' , 'High' , 'Very High' , 'Extremely High' ] m.add_colorbar(colors=colors, labels=labels, vmin= 0 , vmax= 4000 ) #指定最小值和最大值. m
6. 分屏和联动地图
import leafmap # 创建两个地图 m1 = leafmap.Map(center=[ 40 , - 100 ], zoom= 4 , height= "450px" ) #美国中心 m2 = leafmap.Map(center=[ 40 , - 100 ], zoom= 4 , height= "450px" ) # 添加不同的底图 m1.add_basemap( "OpenStreetMap" ) m2.add_basemap( "Esri.WorldImagery" ) #创建分割面板 leafmap.linked_maps([m1, m2]) #进行地图联动`
7. OpenStreetMap数据集成
import leafmap m = leafmap.Map(center=[ 40.7128 , - 74.0060 ], zoom= 14 ) # New York City #通过城市名称下载, 并添加到地图 m.add_osm_from_geocode( "Manhattan, New York" , layer_name= "Manhattan" ) m
8. 交互式矢量数据编辑
此功能需要在Jupyter中与地图进行交互操作, 以下代码仅为启动编辑功能的示例
import leafmap m = leafmap.Map() m.add_draw_control() #添加绘制工具, 允许用户在地图上进行交互式绘制 m
9. 地理空间数据搜索 (以 STAC 为例)
(此功能需要在Jupyter中使用搜索工具与地图进行交互操作)
import leafmap m = leafmap.Map() m.add_stac_layer( url= "https://raw.githubusercontent.com/SpatialTemporalAssetCatalogs/stac-browser/main/examples/stac-load/catalog.json" ) m