无法在R

时间:2017-05-08 19:04:53

标签: r rgdal spatial-data-frame spatial-data

我有两个空间对象,一个是空间多边形对象,另一个是我转变为空间点对象的.csv文件。第一个是智利政府为其中一个公社提供的官方形状文件,另一个是通过HERE API地理编码创建的,同一公社的街道地址。

首先我从{

加载readOGR的空间多边形对象
quilpue <- readOGR( dsn= getwd() , layer="quilpue-rgdal", 
                encoding = "UTF-8") 

然后我将.csv文件加载到R中,并使用coordinates()包中的sp函数将其转换为空间点对象。

pointsCoords<- read.csv("../quilpueR/quilpueLayer.csv", header = TRUE)
coordinates(pointsCoords) <- ~Longitude+Latitude

然后我检查了每个物体的投影。

proj4string(quilpue) 
proj4string(pointsCoords)
分别为

"+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0"NA

适用于pointsCoords的唯一预测是CRS("+init=epsg:3857")。 因此,我将该投影指定给quilpue

proj4string(pointsCoords) <- CRS("+init=epsg:3857")
quilpue_prj <- spTransform(quilpue, CRSobj = CRS(proj4string(pointsCoords)))

尽管如此,当我使用extent()包中的raster()检查两个对象的扩展名时,它们不会重叠。

extent(quilpue_prj)
class       : Extent 
xmin        : -7957703 
xmax        : -7946463 
ymin        : -3907594 
ymax        : -3898059 

extent(pointsCoords)
class       : Extent 
xmin        : -71498550 
xmax        : -71334950 
ymin        : -33133030 
ymax        : -32769810 

因此,当我尝试将它们一起绘制时,它们不会重叠。我只得到我选择绘制的第一个物体的情节。

plot(quilpue_prj)
plot(pointsCoords, add = TRUE) 

要检查shapefile或.csv文件是否存在问题,我在Maptitude另一个GIS软件上打开了它,并设法自动覆盖它们。我希望能够在R中做同样的事。

2 个答案:

答案 0 :(得分:0)

我设法解决问题,但我实际上并不理解为什么会有效。加载.csv文件并使用

appiumservice.getUrl().toString()

创建空间点对象,我使用coordinates(pointsCoords) <- ~Longitude+Latitude 包中的projection()函数为其指定投影:

raster

然后,我将空间多边形对象projection(pointsCoords) = "+init=epsg:4326" 的投影转换为quilpue,然后转换为"+init=epsg:3857"

"+init=epsg:4326"

使用quilpue <- spTransform(quilpue, CRSobj = CRS("+init=epsg:3857")) quilpue <- spTransform(quilpue, CRSobj = CRS("+init=epsg:4326")) 我检查每个空间对象的范围:

bbox()

注意它们非常相似,而bbox(pointsCoords) min max Longitude -71498550 -71334950 Latitude -33133030 -32769810 bbox(quilpue) min max x -71.48526 -71.38429 y -33.09254 -33.02075 包含在pointsCoords中。唯一需要注意的是quilpue quilpue在前两位数后面有coords,所以我使用"."gsub添加到"."coords

pointsCoords

并将修改后的dfcoords <- as.data.frame(pointsCoords@coords) dfcoords$Longitude <- as.numeric(gsub("([[:digit:]]{6,6})$", ".\\1", dfcoords$Longitude)) dfcoords$Latitude <- as.numeric(gsub("([[:digit:]]{6,6})$", ".\\1", dfcoords$Latitude)) coordinates(dfcoords) <- ~Longitude+Latitude 分配给原始版本。

coords

然后我可以使用pointsCoords@coords <- dfcoords@coords 并绘制空间对象。

over()

enter image description here

答案 1 :(得分:0)

我认为你已经做了一些不必要的步骤来回答你的问题。

为了将它们绘制在一起,它们只需要在同一个CRS中:

library(rgdal)    

quilpue <- spTransform(quilpue, CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0")) #or any CRS you wish to use

pointsCoords <- spTransform(pointsCoords, CRS("+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"")) #or any CRS you wish to use

plot(quilpue)
plot(pointsCoords, add = T)

另一个有用的方法是检查功能的范围,以确保它们对齐。有时,相关功能会出现在同一个CRS中,但由于处理或许多转换,它们最终会出现一个棘手的问题。检查一下:

extent(quilpue)
extent(pointsCoords)