2017-05-08 8 views
0

Ich habe zwei räumliche Objekte, eines ist ein räumliches Polygon-Objekt und das andere ist eine CSV-Datei, die ich in ein räumliches Punkte-Objekt verwandelt. Die erste ist eine offizielle Formdatei von der chilenischen Regierung für eine ihrer Gemeinden, die andere wurde durch Geocoding mit der HERE API, Straßenadressen der gleichen Gemeinde erstellt.nicht möglich, zwei räumliche Objekte mit identischen CRS in R

zuerst geladen I das räumliche Polygonobjekt mit readOGR aus dem:

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

dann die CSV-Datei in R I geladen, und konvertierte sie in einen Raumpunkt Objekt mit der coordinates() Funktion aus dem sp Paket.

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

Dann überprüfte ich die Projektion jedes Objekts.

proj4string(quilpue) 
proj4string(pointsCoords) 

"+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0" und NA sind. Die einzige Projektion, die für pointsCoords funktioniert, war CRS("+init=epsg:3857"). Daher zugeordnet ich diese Projektion zu quilpue

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

Dennoch, wenn ich die Verlängerung der beiden Objekte mit extent() von raster() Paket überprüfen, sie überlappen sich nicht.

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 

Daher, wenn ich versuche, sie zusammen zu plotten, überlappen sie nicht. Ich erhalte nur die Zeichnung des ersten Objekts, das ich zeichnen möchte.

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

Um zu überprüfen, ob es ein Problem mit der Shape-Datei war, oder CSV-Datei, öffnete ich sowohl auf Maptitude andere GIS-Software, und sie verwalten sie automatisch zu überlagern. Ich würde gerne in der Lage sein, dasselbe in R. zu tun.

Antwort

0

Ich schaffe es, das Problem zu lösen, aber ich verstehe nicht wirklich, warum es funktioniert hat. Nachdem die CSV-Datei geladen und

coordinates(pointsCoords) <- ~Longitude+Latitude 

die räumlichen Punkte-Objekt zu erstellen, I verwendet, um die Funktion aus projection()raster Paket es einen Vorsprung zuzuordnen Verwendung:

projection(pointsCoords) = "+init=epsg:4326" 

Dann transformiert die Projektion von I das räumliche Polygonobjekt quilpue, erste bis "+init=epsg:3857" und dann "+init=epsg:4326":

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

quilpue <- spTransform(quilpue, 
         CRSobj = CRS("+init=epsg:4326")) 

Mit bbox() prüfe ich den Bereich jedes räumlichen Objekt:

bbox(pointsCoords) 

      min  max 
Longitude -71498550 -71334950 
Latitude -33133030 -32769810 

bbox(quilpue) 

    min  max 
x -71.48526 -71.38429 
y -33.09254 -33.02075 

Und bemerken, dass sie sehr ähnlich waren, und dass pointsCoords wurde innerhalb quilpue enthalten.Die einzige Einschränkung war, dass quilpuecoords hatte eine "." nach den ersten zwei Ziffern, so dass ich gsub"." zu coords in pointsCoords hinzufügen.

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 

und weisen Sie die modifizierte coords zu den ursprünglichen.

[email protected] <- [email protected] 

Dann war ich in der Lage over() und plotten die räumlichen Objekte zu verwenden.

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

enter image description here

Verwandte Themen