2017-05-08 179 views
0

我有两个空间对象,一个是空间多边形对象,另一个是.csv文件,我转变为空间点对象。第一个是来自智利政府的一个官方形状文件,另一个是通过与HERE API进行地理编码创建的,同一公社的街道地址。无法绘制R中具有相同CRS的两个空间对象

首先我装空间多边形对象与readOGR从:

quilpue <- readOGR(dsn= getwd() , layer="quilpue-rgdal", 
       encoding = "UTF-8") 

然后我加载.csv文件为R,并且将它转换成一个空间点与来自spcoordinates()功能对象。

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))) 

尽管如此,当我从raster()包检查这两个对象的延伸与extent(),它们不重叠。

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) 

要检查是否有与shape文件有问题,或.csv文件,我开上都Maptitude另一个GIS软件和IT管理,自动包裹。我想能够在R做同样的事情。

回答

0

我设法解决这个问题,但我实际上并不明白它为什么起作用。加载.csv文件和使用

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。唯一需要注意的是,quilpuecoords在前两位数字后有一个".",所以我用gsub"."加到pointsCoords中的coords

dfcoords <- as.data.frame([email protected]) 
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分配给原来的。

[email protected] <- [email protected] 

然后我能够使用over()并绘制空间对象。

df_over <- over(quilpue_prj, pointsCoords) 
plot(quilpue) 
plot(pointsCoords, add = TRUE) 

enter image description here

相关问题