You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否通过地理坐标获取folium地图背景色,判断点的水陆属性?

关于用folium判断坐标是陆地还是水域的问题

直接通过folium获取地图背景色的思路不可行,原因有两点:

  • folium依赖第三方地图瓦片(如OpenStreetMap),不同瓦片的配色规则不统一,同一坐标在不同瓦片、不同缩放级别下的像素颜色可能不同;
  • 从瓦片图片中提取对应坐标的像素颜色需要额外处理瓦片定位、像素映射,技术复杂度高且准确率无法保证。

推荐以下几种可靠的替代方案:

1. 使用地理空间数据集(最稳定)

下载公开的陆地/水域边界数据(如Natural Earth的全球陆地数据集),用geopandas进行空间判断:

import geopandas as gpd
from shapely.geometry import Point

# 加载预先下载的陆地边界Shapefile
land_data = gpd.read_file("natural_earth_land.shp")
# 待判断的坐标(注意是 经度, 纬度 顺序)
target_point = Point(116.4074, 39.9042)

# 判断点是否在陆地区域内
is_land = land_data.contains(target_point).any()
print("该坐标位于陆地" if is_land else "该坐标位于水域")

2. 调用地理查询API

利用OpenStreetMap的Nominatim API反向查询坐标的地理属性:

import requests

lat, lon = 39.9042, 116.4074
api_url = f"https://nominatim.openstreetmap.org/reverse?lat={lat}&lon={lon}&format=json"
response = requests.get(api_url).json()

# 解析返回的地址信息判断类型
address = response.get("address", {})
if address.get("natural") == "water":
    print("该坐标位于水域")
else:
    print("该坐标位于陆地")

3. 使用osmnx库查询土地利用

osmnx可以直接从OpenStreetMap获取坐标周边的地理要素:

import osmnx as ox

lat, lon = 39.9042, 116.4074
# 查询坐标周边10米范围内的自然要素
water_tags = {"natural": ["water", "lake", "river"]}
gdf = ox.geometries.geometries_from_point((lat, lon), water_tags, dist=10)

if not gdf.empty:
    print("该坐标位于水域")
else:
    print("该坐标位于陆地")

folium的核心定位是地图可视化,不适合做这类空间分析操作,以上方案的准确率和稳定性都远高于获取瓦片颜色的思路。

内容的提问来源于stack exchange,提问作者Birosc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:35:19