Leaflet地图点要素固定边缘问题排查求助
解决Leaflet中公交站点LISA聚类点偏移问题
以下是针对你遇到的点数据全部集中在地图北部边缘问题的排查和解决建议:
确认SF对象的坐标与CRS匹配
你的ggplot代码中用coords = c("lon", "lat")构建SF对象并指定CRS为3857,后续直接用st_set_crs(stops, 4326)可能存在逻辑错误:如果原始stops对象的坐标是基于3857的平面坐标,强行设置为4326会导致坐标完全错乱。正确做法是从原始数据重新构建SF对象,确保坐标顺序和CRS对应:# 从原始数据重新构建SF对象,先指定WGS84(EPSG:4326) stops <- st_as_sf(ausw_input, coords = c("lon", "lat"), crs = 4326)为空间分析使用平面投影,再转换回Leaflet兼容CRS
rgeoda的空间权重计算(如queen_weights)更适合平面投影(比如德国北部的EPSG:25832),可避免球面坐标带来的误差。计算完成后再转换回Leaflet原生支持的EPSG:4326:# 转换为平面投影用于空间分析 stops_planar <- st_transform(stops, 25832) # 计算空间权重和局部Moran's I nb_loc <- rgeoda::queen_weights(stops_planar) moran_loc <- rgeoda::local_moran(nb_loc, stops_planar["t2"]) # 合并聚类结果后转换回4326供Leaflet使用 moran_clustered <- stops_planar %>% mutate(cluster_num = lisa_clusters(moran_loc) + 1, cluster = factor(lisa_labels(moran_loc)[cluster_num], levels = lisa_labels(moran_loc)), h_id_varchar = as.character(h_id_varchar)) %>% st_transform(4326) # 关键:转换回Leaflet支持的CRS显式指定Leaflet的经纬度参数
有时候Leaflet自动解析SF对象的坐标会出现异常,可手动提取经纬度传入addCircleMarkers:leaflet(moran_clustered) %>% addProviderTiles('CartoDB.DarkMatter') %>% addCircleMarkers( lng = ~st_coordinates(geometry)[,1], # 提取经度 lat = ~st_coordinates(geometry)[,2], # 提取纬度 stroke = TRUE, fillColor = ~pal(cluster), color = "grey30", weight = 1, fillOpacity = 1, radius = 6, label = ~label, layerId = ~h_id_varchar ) %>% addLegend(position = 'bottomright', pal = pal, values = moran_clustered$cluster, title = 'LISA Clusters')检查rgeoda处理后的CRS是否丢失
运行st_crs(moran_clustered)确认CRS是否正确设置为4326,如果返回NA,说明CRS在处理过程中丢失,需要重新指定:st_crs(moran_clustered) <- 4326
内容的提问来源于stack exchange,提问作者fluegelrad
相关产品推荐
相关产品推荐

