如何使用Highcharter创建美国及波多黎各县级地图
问题描述
Highcharts提供的美国及其领地地图样式符合需求,但仅到州/领地级别,没有县级精度。我已经用R处理了包含美国本土和波多黎各的县级GeoJSON文件:
map <- read_sf("app/data/georef-united-states-of-america-county.geojson") usaprmap <- map %>% filter(coty_area_code %in% c("USA","PRI")) geojson_map <- sf_geojson(usaprmap)
但获取的县级GeoJSON是全球视角布局,和Highcharts示例的布局不一致。作为Highcharter新手,想知道能不能合并两者信息,或者创建符合示例布局的自定义县级地图?
解决方案
完全可以基于Highcharts的布局,自定义县级精度的地图,步骤如下:
1. 修正GeoJSON的投影与布局
Highcharts地图默认使用Web墨卡托投影(EPSG:3857),你获取的全球视角GeoJSON可能是WGS84(EPSG:4326)且布局分散。可以用R的sf包转换投影,同时调整领地位置匹配示例布局:
# 转换到Web墨卡托投影 usaprmap_proj <- st_transform(usaprmap, crs = 3857) # 调整波多黎各的位置,移到美国本土附近(和示例布局一致) pr <- usaprmap_proj %>% filter(coty_area_code == "PRI") pr_shifted <- st_sfc(st_geometry(pr) + c(-500000, -1000000), crs = 3857) usaprmap_proj <- usaprmap_proj %>% filter(coty_area_code != "PRI") %>% rbind(cbind(pr, geometry = pr_shifted)) # 导出调整后的GeoJSON geojson_final <- sf_geojson(usaprmap_proj)
2. 在Highcharter中加载自定义GeoJSON
用highchart()加载处理好的GeoJSON,同时复用示例的样式配置:
library(highcharter) highchart(type = "map") %>% hc_add_series( mapData = geojson_final, name = "Counties", borderColor = "#FFF", borderWidth = 0.5, states = list( hover = list(color = "#BADA55") ) ) %>% hc_mapNavigation(enabled = TRUE) %>% hc_title(text = "US & Puerto Rico Counties")
3. 合并Highcharts示例元数据(可选)
如果需要示例中的标签、tooltip等元数据,可以把Highcharts州级地图的属性(名称、缩写)和你的县级GeoJSON关联:
# 获取Highcharts的州级元数据 hc_us_data <- get_data_from_map(download_map_data("countries/us/custom/us-all-territories")) # 通过州缩写字段关联县级数据(假设你的GeoJSON有stusab字段) usaprmap_joined <- usaprmap_proj %>% left_join(hc_us_data, by = c("stusab" = "hc-key")) # 导出带元数据的GeoJSON geojson_joined <- sf_geojson(usaprmap_joined)
通过以上步骤,就能得到和Highcharts示例布局一致、同时具备县级精度的自定义地图。
内容的提问来源于stack exchange,提问作者Isa
相关产品推荐
相关产品推荐

