Преобразование SpatialPolygonsDataFrame в координаты проекции с помощью spTransform - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь провести анализ точечного рисунка. Для этого мне нужно преобразовать SpatialPolygonsDataFrame, чтобы он содержал проецируемые координаты вместо изогнутых координат. Однако я продолжаю получать ту же ошибку:

Ошибка в as.owin.SpatialPolygons (Netherlands_flat): только проецируемые координаты могут быть преобразованы в объекты класса spatstat

это данные, которые я использовал для границы :

download.file("http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_1_states_provinces.zip",destfile="ne_10m_admin_1_states_provinces.zip")
unzip("ne_10m_admin_1_states_provinces.zip",exdir="NaturalEarth")
border <- shapefile("NaturalEarth/ne_10m_admin_1_states_provinces.shp")

#extract the border of the Netherlands 
Netherlands <- border[paste(border$iso_a2)=="NL",]

Я могу построить сюжет Нидерланды с событиями.

#Plot 
plot(babesia$Longitude, babesia$Latitude, pch="+",cex=0.5, xlim=c(3.360782, 7.227095), ylim = c(50.723492, 53.554584))
plot(Netherlands, add = T)

Нидерланды с событиями

Но при использовании Пакет Spatstat Я постоянно сталкиваюсь с этой ошибкой.

Я пробовал этот код для преобразования координат

coord_netherlands <- coordinates(Netherlands)
proj4string(Netherlands)
summary(Netherlands)

Netherlands_flat <- spTransform(coord_netherlands, CRS("+proj=longlat +datum=WGS84 +no_defs"))
Netherlands <- as.owin(Netherlands_flat)

Ошибка в as.owin.SpatialPolygons (Netherlands_flat): только проецируемые координаты могут быть преобразованы в объекты класса spatstat

Кто-нибудь знает, как это решить? Заранее большое спасибо!

1 Ответ

0 голосов
/ 16 июня 2020

Вы почти у цели. Вам просто нужно проецировать в другую систему координат, когда вы вызываете spTransform. В настоящее время вы запрашиваете географические c координаты на сферической модели Земли (долгота, широта). Вместо этого вам следует попросить плоскую систему координат (x, y). Это могут быть координаты utm в зоне, подходящей для Нидерландов, или может быть лучшая альтернатива. Ваши события также должны быть преобразованы из (долгота, широта) в ту же систему координат. Может быть, вы можете в качестве примера посмотреть на виньетку с шейп-файлом пакета spatstat. Или посмотрите на этом сайте под тегом spatstat. Я разговариваю по телефону, я не могу оказать подробную помощь. Удачи.

Если ваши события находятся в data.frame, называемом xy, вы можете проецировать его в зону UTM 31N следующим образом:

xy <- data.frame(lon = 1:2, lat = 1:2)
coordinates(xy) <- ~lon+lat
proj4string(xy) <- CRS("+proj=longlat +datum=WGS84")
xy
# SpatialPoints:
#      lon lat
# [1,]   1   1
# [2,]   2   2
# Coordinate Reference System (CRS) arguments: +proj=longlat +datum=WGS84
# +ellps=WGS84 +towgs84=0,0,0 
events.utm <- spTransform(xy, CRS("+proj=utm +zone=31N +datum=WGS84"))
events.utm
# SpatialPoints:
#           lon      lat
# [1,] 277438.3 110598.0
# [2,] 388786.7 221094.9
# Coordinate Reference System (CRS) arguments: +proj=utm +zone=31N
# +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...