2017-05-08 189 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

相關問題