【问题标题】:Convert SpatialPolygonsDataFrame to projected coordinates using spTransform使用 spTransform 将 SpatialPolygonsDataFrame 转换为投影坐标
【发布时间】:2020-06-16 12:43:59
【问题描述】:

我正在尝试进行点模式分析。为此,我必须转换 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)

Netherlands with events

但是在使用 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 类对象

有谁知道如何解决这个问题?非常感谢您!

【问题讨论】:

标签: r coordinates spatstat k-fold


【解决方案1】:

你快到了。当您调用spTransform 时,您只需要投影到另一个坐标系。您目前要求地球球体模型上的地理坐标(长,纬度)。相反,您应该要求一个平面 (x,y) 坐标系。这可能是荷兰适当区域中的 utm 坐标,或者可能有更好的选择。您的事件还需要从 (long,lat) 转换为相同的坐标系。也许您可以查看 spatstat 包的 shapefile 小插图作为示例。或查看本网站上的 spatstat 标签。我在我的手机上,我不能提供详细的帮助。 祝你好运。

如果您的活动位于名为 xydata.frame 中,您可以像这样投影到 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 

【讨论】:

  • 我还有一个关于事件转换的问题。我的事件数据是数据框的格式。 xy &lt;- as.data.frame(events) coordinates(xy) proj4string(xy) &lt;- CRS("+proj=longlat +datum=WGS84") events.utm &lt;- spTransform(xy, CRS("+proj=utm +zone=31N +datum=WGS84")) 但是它不允许我使用函数 proj4strong 来转换数据框的坐标。你知道如何解决这个问题吗?
  • 我已经编辑了我的答案,以举例说明如何使用 sp 执行此操作(许多人开始使用 sf 代替 R 中的空间数据)。
  • 太棒了。您可以考虑通过单击旁边的复选标记将答案标记为已接受,这样以后的用户就不会显示为未回答。
猜你喜欢
  • 2022-01-28
  • 1970-01-01
  • 2010-11-12
  • 2017-09-30
  • 1970-01-01
  • 2011-01-29
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多