Моя общая цель - объединить несколько файлов формы (полигоны речных суббассейнов из большого речного бассейна) в один файл и построить карту.Этот новый объединенный файл будет позже объединен с переменными данными, например (количество осадков) и графиком по aes()
.
Моя проблема:
ggplot()+geom_sf()
отображает правильные формы многоугольников, но не имеет правильных координат на осях - он не использует значениядано в столбце геометрии по осям.
Мои мысли о том, что не так, но я не уверен, как исправить:
- Файл формы, считанный в, имеет геометрию в 'long '' lat '(
crs= 4326
), но crs говорит, что координаты находятся в UTM Zone 48N WGS84 (crs=32648
).Если я пытаюсь принудительно установить crs на 4326, значения координат меняются, как если бы формула преобразования пыталась их исправить. geom_sf
и coord_sf
делают что-то, чего я не понимаю!
.
library(sp)
library(raster)
library(ggplot2)
library(sf)
library(ggsf)
library(rgdal)
library(plyr)
library(dplyr)
library(purrr)
setwd("/Users/.../Sub_Basin_Outlines_withSdata/")
list.files('/Users/.../Sub_Basin_Outlines_withSdata/', pattern='\\.shp$')
Чтение отдельных файлов многоугольников из папки,Объедините с ID.
bangsai <- st_read("./without_S_data/", "Nam Bang Sai")
BasinID <- "BGS"
bangsai <- cbind(bangsai,BasinID)
ing <- st_read("./without_S_data/", "Nam Ing Outline")
BasinID <- "ING"
Два отдельных файла формы импортируются как простые функции, см. Изображение кода R
Объедините отдельные файлы формы многоугольника суббассейна водин шейп-файл с несколькими объектами.
all_sub_basins <- rbind(bangsai,ing)
Изображение показывает значения координат многоугольников / объектов в all_sub_basins$geometry
.Они в длинном латинском формате, но proj4sting
предлагает UTM?
Изобразить all_sub_basins
шейп-файл простого объекта в ggplot
subbasins <- ggplot()+
geom_sf(data=all_sub_basins, colour="red", fill=NA)
subbasins
Результат составлен правильнофайл формы с несколькими объектами (в этом изображении больше полигонов, чем описано выше).Однако оси неверны (бессмысленные значения) и не отображают те же значения, что и в геометрическом поле.
Если я добавлю coord_sf
и подтвердю crs:
subbasins <- ggplot() +
geom_sf(data=all_sub_basins, colour="red", fill=NA)
coord_sf(datum=st_crs(32648), xlim = c(94,110), ylim = c(9,34))
subbasins
ТогдаЯ получаю правильные значения осей, но не как координаты с N и E .Кажется, что геометрия не распознается как координаты, просто как вынужденные числа?
Я не возражаю, если координаты UTM Zone 48N или lat long.Могу ли я исправить это любым из этих способов?Если да, то как мне этого добиться?
- Измените файл формы файла crs, не изменяя значения в столбце геометрии, чтобы
geom_sf
знал, чтобы построить правильный текст осей. - Извлеките геометрию из файла формы в файл с двумя столбцами .csv с длинными и длинными столбцами.Конвертируйте csv в sf и создайте мой собственный файл формы с правильными crs.
- В крайнем случае, оставьте график как есть и замените текст новых осей вручную.
Любая помощь очень ценится!