Чтобы я мог полностью изложить свой вопрос, пожалуйста, соблюдайте следующий код:
library(raster)
library(tibble)
library(dplyr)
library(ggplot2)
library(ggthemes)
library(ggmap)
library(broom)
download.data <- function(path, year, link){
if (length(list.files(file.path(gem_path, year))) == 0){
dir.create(file.path(path, year), recursive=TRUE)
tmp <- tempfile()
download.file(link, tmp)
shp_files <- unzip(tmp)
file.copy(shp_files, file.path(path, year))
unlink(unique(dirname(shp_files)), recursive = TRUE)
} else {
warning("Files are already downloaded.")
}
}
# Variables and paths used
gem_path <- file.path("Data", "Gemeente")
data17_link <- "https://www.cbs.nl/-/media/cbs/dossiers/nederland%20regionaal/wijk-en-buurtstatistieken/2018/shape%202017%20versie%2020.zip"
download.data(gem_path, "2017", data17_link)
#Loading the CBS data in.
gem17_raw <- shapefile(file.path(gem_path, "2017", "gem_2017"))
# Extracting only land areas and tidy up the dataset.
gem17 <- broom::tidy(subset(gem17_raw, gem17_raw$WATER == "NEE"))
ggplot(gem17) +
geom_polygon(aes(x=long, y=lat, group=group)) +
theme_minimal() + coord_fixed()
# Manual input
nl_lat <- c(50.7, 53.65)
nl_lon <- c(3.25, 7.32)
terrain <- get_map(location = c(nl_lon[1], nl_lat[1], nl_lon[2], nl_lat[2]), maptype = "terrain", source = "osm", zoom = 8)
ggmap(terrain)
Этот фрагмент кода загружает файлы форм из CBS (Центральное бюро статистики Нидерландов), а также получаеткарта Нидерландов.Чего я хотел бы добиться, так это , чтобы границы муниципалитетов отображались на карте местности .На мой взгляд, это звучит достаточно просто, поэтому я хотел бы объединить обе карты.
Для этого у меня есть несколько проблем, с которыми я столкнулся.Моя стратегия такова:
- Убедитесь, что долгота и широта обеих карт одинаковы.
- Удалите заливки (чтобы мы получили только границы).
- Наложение обоих графиков.
Первая небольшая проблема, с которой я столкнулся, - это предупреждения: «Области определены для каждого полигона», но я уже использовал подход аккуратности, и все же он показывает предупреждения.
В подходе tidy я вижу следующее сообщение «В bind_rows_ (x, .id): привязка символа и вектора фактора, приведение к вектору символа».Но, к сожалению, по моему мнению, это не показывает, какую переменную я должен преобразовать в другой тип.Какую переменную следует привести, чтобы аккуратный подход работал без предупреждений?Поскольку я хотел бы закодировать это правильно.
Первая большая проблема, с которой я столкнулся, - это преобразования долготы и широты, заметьте, что долгота и широта не верны. Они, кажется, отклоняютсянемного от того, что должно быть.
![Municipalities plot of the Netherlands](https://i.stack.imgur.com/fsZio.png)
Итак, я изучаю сюжет:
gem17_raw@proj4string
и получаю следующую информацию:
CRS arguments:
+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel
+units=m +no_defs
Итак, я проверяю, помогает ли преобразование, однако, это приводит к сильно искаженному графику, который я не могу исправить.Как я могу правильно отобразить этот график?(У меня нет конкретной проекции, которая мне бы хотелось, поэтому, возможно, с Меркатором все будет в порядке, но в настоящее время я не уверен, как выглядит мой график).
geom17_test <- spTransform(gem17_raw, CRS("+proj=longlat +datum=WGS84"))
ggplot(geom17_test) +
geom_polygon(aes(x=long, y=lat, group=group)) +
theme_minimal()
![Projection to the correct coordinates](https://i.stack.imgur.com/DD9d3.png)
Итак, решить первую задачу было бы: как правильно отобразить карту с правильными координатами широты и долготы?
Что касается второй точки, яневозможно удалить границы, так как установка fill=NA
не будет работать (т.е.:
ggplot(gem17) +
geom_polygon(aes(x=long, y=lat, group=group, fill=NA)) +
theme_minimal() + coord_fixed()
Поскольку я установил группу. Как я могу отображать только границы ?
Последняя часть будет объединять обе карты, но я застрял в первых двух пунктах.