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

求助:无经纬度字段的Shapefile按纬度筛选多边形的代码实现

解决Shapefile筛选高纬度区域的可行代码

首先,你的核心问题是当前Shapefile的坐标系大概率不是经纬度格式(EPSG:4326),导致直接用坐标值设置的筛选阈值不符合需求。以下是完整的实现步骤和代码:

核心思路

先确认Shapefile的原始坐标系,将其转换为通用的WGS84经纬度坐标系,这样就能直接用纬度值(y轴)作为筛选依据,精准移除纬度高于60度的区域。

完整代码

# 加载依赖包
library(sf)
library(dplyr)

# 定义Shapefile路径
shapefile_path <- "/Users/langbai/Desktop/lcsd000b16a_e/lcsd000b16a_e.shp"

# 读取Shapefile并查看当前坐标系
shapefile_data <- st_read(shapefile_path)
print(st_crs(shapefile_data))  # 输出结果可确认原始投影类型,比如UTM投影

# 转换为WGS84经纬度坐标系(EPSG:4326)
shapefile_wgs84 <- st_transform(shapefile_data, crs = 4326)

# 方式1:通过要素质心纬度筛选(快速筛选,适合多数场景)
shapefile_filtered <- shapefile_wgs84 %>%
  mutate(centroid_lat = st_coordinates(st_centroid(geometry))[, 2]) %>%
  filter(centroid_lat < 60)

# 方式2:通过要素边界纬度筛选(更严谨,确保整个要素都低于60度纬度)
# shapefile_filtered <- shapefile_wgs84 %>%
#   mutate(
#     max_lat = st_bbox(geometry)[["ymax"]]
#   ) %>%
#   filter(max_lat < 60)

# 可视化验证筛选结果
plot(st_geometry(shapefile_filtered), main = "筛选后区域")

关键说明

  1. 坐标系转换:这是解决问题的核心,只有转换为经纬度坐标系,才能用60度这个地理阈值进行筛选
  2. 两种筛选逻辑:
    • 质心筛选:只要要素的几何中心纬度低于60度就保留,操作简单高效
    • 边界筛选:确保要素的所有部分纬度都低于60度,适合对精度要求更高的场景
  3. 原代码中convex_hulls_with_farms为未定义对象,已移除该无效逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:10:00