echarts4r 地图上的城市散点不显示,应该如何添加?
数据小陈
要按城市经纬度在地图上叠加散点,先将代码中的 e_map() 替换为 e_geo(),建立供散点使用的 geo 坐标系,并保留 e_scatter(..., coord_system = "geo")。
为什么有图例却没有散点?
e_map() 添加地图系列,e_geo() 初始化地理坐标组件。原代码绘制了地图,却没有建立散点指定的 geo 坐标系。仅设置 coord_system = "geo" 不会自动建立坐标系。
图例出现只能说明存在对应的系列配置,不能证明散点已经获得可用的坐标系。echarts4r 的地理散点示例也是先调用 e_geo(),再调用 e_scatter()。
如何修改代码?
地图注册和城市坐标可以继续使用。将 e_map(map = "NL", ...) 换成 e_geo(map = "NL", ...):
library(echarts4r)
library(httr)
url <- paste0(
"https://service.pdok.nl/cbs/gebiedsindelingen/2024/wfs/v1_0",
"?request=GetFeature&service=WFS",
"&typeName=gebiedsindelingen:gemeente_gegeneraliseerd",
"&outputFormat=json&version=2.0.0",
"&srsname=urn:ogc:def:crs:EPSG::4326"
)
response <- httr::GET(url)
httr::stop_for_status(response)
geo_data <- httr::content(response)
locations <- data.frame(
name = c("Amsterdam", "Utrecht"),
lon = c(4.9041, 5.1214),
lat = c(52.3676, 52.0907)
)
locations |>
e_charts(lon) |>
e_map_register("NL", geo_data) |>
e_geo(map = "NL", nameProperty = "statnaam") |>
e_scatter(
lat,
name = "City",
symbol_size = 5,
coord_system = "geo"
)
代码用 e_charts(lon) 指定经度列,用 e_scatter(lat, ...) 指定纬度列。注册地图时使用的名称 "NL" 必须与 e_geo(map = "NL") 一致。e_geo() 的 map 参数用于选择地图,具体接口见 e_geo 文档。
示例统一使用原生管道 |>,避免混用管道语法;散点缺失的关键修复是建立 geo 坐标系。
修改后仍不显示时检查什么?
以上修改以 WFS 服务正常返回有效 GeoJSON 为前提。如果仍然没有散点,可以依次检查:
- 地图响应:
stop_for_status()能发现 HTTP 错误,但还需要确认geo_data确实包含地图数据,而不是服务返回的错误信息。 - 坐标及顺序:确保
lon、lat是没有缺失值的数值列,经度和纬度没有传反,地图数据与城市坐标采用一致的坐标参考系。请求中的srsname指定了EPSG::4326,仍需以服务实际返回的数据为准。 - 散点可见性:可以临时增大
symbol_size,判断是否只是点太小。
另外,name = "City" 设置的是散点系列名称,不会自动把 locations$name 显示为每个城市的标签。城市标签需要另行配置,不影响这里建立地理坐标系的修复。
备注:内容仅供参考。
