微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在没有邮政编码、经度和纬度的情况下在 r 中绘制地图? 加载必要的库下载苏里南形状文件读取苏里南地区 shapefile解析本地数据情节附录:示例数据

如何解决如何在没有邮政编码、经度和纬度的情况下在 r 中绘制地图? 加载必要的库下载苏里南形状文件读取苏里南地区 shapefile解析本地数据情节附录:示例数据

我想用我的国家苏里南的数据制作一个制图。此图应显示地图上的位置以及学校的数量。我拥有的唯一数据是:

度假村 协调 学校代码
帕拉马里博 Beekhuizen 5°30'29,88"NB,55°10'44,04"WL A1
帕拉马里博 Beekhuizen 5°30'29,04"WL A2
帕拉马里博 中心 5°30'29,9"NB,55°10'44,0"WL A3
帕拉马里博 Beekhuizen 5°30'29,04"WL A4
帕拉马里博 Welgelegen 5°50'33"NB,55°13'7"WL A5
万尼卡 Nieuwe Grond 5°45'NB,55°13'WL A6
万尼卡 东堡 5°42'NB,55°5'WL A7
万尼卡 东堡 5°42'NB,55°5'WL A8

我查看了说明视频,找到了有关使用邮政编码以及经度和纬度构建地图的说明。 是否可以在 r 中使用这些数据来构建图表? 如果是的话,你能给我一些指导如何做到这一点吗? 如果答案是否定的,是否可以将此列转换为数据的经纬度甚至邮政编码?如果是,我该怎么做?

提前致谢。

解决方法

这里有一些应该让你开始的东西;附加评论是内嵌的。

加载必要的库

# Load libraries
library(tidyverse)
library(magrittr)
library(sf)

下载苏里南形状文件

# Download Suriname shape files of country,district and resort boundaries
# Source: https://data.humdata.org/dataset/suriname-administrative-level-0-1-and-2-boundaries
url <- "https://data.humdata.org/dataset/ab35e673-76f2-43e5-a6a4-a5b81f9e093c/resource/fd31ebfd-bf77-4b7d-902f-3ea3a9c2d7a2/download/sur_adm_2017_shp.zip"
download.file(url,"suriname_data.zip")
unzip("suriname_data.zip",exdir = "data")

数据存储在文件夹 ./data 中。 ZIP 文件还包含带有元数据信息的 PDF。我建议看看。

读取苏里南地区 shapefile

# Read shapefile of Suriname districts
# Note: Geodetic CRS = WGS84
suriname_district <- st_read("data/sur_admbnda_adm1_2017.shp")

解析本地数据

# Define custom function to parse coordinates from your data.frame
parse_coordinaten <- function(x) {

    x %>%
    str_remove_all("(NB|WL)") %>%        # Remove NB and WL suffixes
    str_split(",") %>%                  # Split into lat/long string
    map(~ .x %>%
        str_replace_all(",",".") %>%    # Replace,with . decimal separator
        str_split("[^(\\d|\\.)]") %>%    # Split each lat/long on non-digit char
        map_dbl(function(w) w %>%        # Convert deg/min/sec to fractional degree
            as.numeric() %>%
            multiply_by(c(1,1/60,1/3600)) %>%
            sum(na.rm = TRUE)
        ) %>%
        multiply_by(c(1,-1)) %>%        # Multiply long by -1 since west of prime meridian 
        setNames(c("lat","lon")) %>%   
        bind_rows()
    ) %>%
        bind_rows()
}

# Read data; I assume you have a `data.frame` named `df` 
# Note: `dput(df)` included in the appendix
data <- df %>%
    mutate(Coordinaten = map(Coordinaten,parse_coordinaten)) %>%
    unnest(Coordinaten) %>%
    st_as_sf(coords = c("lon","lat"),crs = 4326) %>%
    mutate(label = paste(District,Ressort,Schoolcode,sep = "<br>"))

情节

# Plot using `leaflet`
library(leaflet)
pal <- colorFactor("Spectral",levels = suriname_district$ADM1_NL)
leaflet() %>%
    addTiles() %>% 
    addPolygons(
        fillColor = ~pal(ADM1_NL),fillOpacity = 0.6,weight = 0,data = suriname_district) %>%
    addMarkers(
        data = data,label = ~map(label,htmltools::HTML))

enter image description here

leaflet 允许大量自定义;例如,您可以调整标记标签、添加度假村边界等。


附录:示例数据

df <- structure(list(District = c("Paramaribo","Paramaribo","Wanica","Wanica"),Ressort = c("Beekhuizen","Beekhuizen","Centrum","Welgelegen","Nieuwe Grond","Domburg","Domburg"),Coordinaten = c("5°30'29,88NB,55°10'44,04WL","5°30'29,9NB,0WL","5°50'33NB,55°13'7WL","5°45'NB,55°13'WL","5°42'NB,55°5'WL",55°5'WL"),Schoolcode = c("A1","A2","A3","A4","A5","A6","A7","A8")),class = "data.frame",row.names = c(NA,-8L))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?