为何sf::st_join未为Dryden测雪站点返回对应行政区面要素?
解决Dryden测雪站无法匹配行政区的问题
以下是几种针对性的排查和解决方法:
1. 修复多边形的无效几何
行政区多边形可能存在拓扑错误(比如自相交),导致空间判断失效,先检查并修复:
# 检查行政区几何有效性 districts_old %>% mutate(is_valid = st_is_valid(geometry)) %>% filter(!is_valid) # 修复所有无效几何 districts_fixed <- districts_old %>% st_make_valid() # 用修复后的图层重新做连接 check_fixed <- st_join( snowlocs %>% select(STATION_NUMBER), districts_fixed %>% select(DISTRICT_NAME) ) check_fixed
2. 彻底切换到平面坐标系运算
有时候仅设置sf_use_s2(FALSE)可能不生效,建议在加载数据前就关闭S2,再重新转换投影:
# 先关闭S2几何运算 sf_use_s2(FALSE) # 重新加载并转换两个图层 snowlocs_flat <- arc.select(arc.open("https://ws.lioservices.lrc.gov.on.ca/arcgis2/rest/services/LIO_OPEN_DATA/LIO_Open08/MapServer/31")) %>% arc.data2sf() %>% st_transform(3162) %>% filter(STATION_NUMBER %in% c("SNOW-WLF-MK", "SNOW-WLF-DY", "SNOW-WLF-PK")) %>% group_by(STATION_NUMBER) %>% slice(1) districts_old_flat <- arc.select(arc.open("https://services1.arcgis.com/TJH5KDher0W13Kgo/arcgis/rest/services/MNR_Administrative_Boundaries/FeatureServer/1")) %>% arc.data2sf() %>% st_transform(3162) %>% filter(DISTRICT_NAME %in% c("Kenora", "Dryden", "Sioux Lookout")) # 重新执行连接 check_flat <- st_join( snowlocs_flat %>% select(STATION_NUMBER), districts_old_flat %>% select(DISTRICT_NAME) ) check_flat
3. 指定更精确的空间判断规则
st_join默认用st_intersects,可以换成更严格的st_within或者st_contains_properly,避免边界点的判断误差:
# 使用st_within作为连接规则 check_within <- st_join( snowlocs %>% select(STATION_NUMBER), districts_old %>% select(DISTRICT_NAME), join = st_within ) # 或者用st_contains(从多边形角度判断包含点) check_contains <- st_join( snowlocs %>% select(STATION_NUMBER), districts_old %>% select(DISTRICT_NAME), join = function(x, y) st_contains(y, x) )
4. 手动验证单个点与多边形的关系
先单独提取Dryden行政区和SNOW-WLF-DY站点,直接测试空间关系,确认是否真的存在包含关系:
# 提取Dryden多边形和目标站点 dryden_poly <- districts_old %>% filter(DISTRICT_NAME == "Dryden") dy_point <- snowlocs %>% filter(STATION_NUMBER == "SNOW-WLF-DY") # 测试是否在多边形内 st_within(dy_point, dryden_poly) # 测试多边形是否包含点 st_contains(dryden_poly, dy_point)
如果返回TRUE说明几何本身没问题,只是连接时的参数或环境设置问题;如果返回FALSE,可能是坐标转换时出现偏差,需要检查投影参数是否正确。
内容的提问来源于stack exchange,提问作者Nova
相关产品推荐
相关产品推荐

