PAYATHON 2026

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 显示为每个城市的标签。城市标签需要另行配置,不影响这里建立地理坐标系的修复。

备注:内容仅供参考。