Wählen Sie den richtigen Wert für proj4string für das Lesen von Shapefiles in R?

14

Ich habe ein Shapefile von Polygonen und eine andere CSV-Datei, die eine Liste von Punkten als (Lat, Lng) Paare enthält.

Ich möchte für jedes (lat, lng) Paar aus der CSV-Datei überprüfen, in welches Polygon es fällt.

Das Shapefile wird projiziert und die Proj-Datei sieht folgendermaßen aus:

PROJCS["Transverse_Mercator",GEOGCS["GCS_OSGB 1936",
DATUM["D_OSGB_1936",SPHEROID["Airy_1830",6377563.396,299.3249646]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",49],PARAMETER["central_meridian",-2],PARAMETER["scale_factor",0.9996012717],PARAMETER["false_easting",400000],PARAMETER["false_northing",-100000],UNIT["Meter",1]]

Mein Plan ist wie folgt:

  1. Lesen Sie das Shapefile mit der readShapePolyFunktion im R- MapToolsPaket.
  2. Lesen Sie die Punktkoordinaten aus der CSV-Datei in einen Datenrahmen und konvertieren Sie sie in SpatialPointsDataFrame
  3. Verwenden Sie die overFunktion, um zu bestimmen, in welches Polygon es fällt.

Dazu muss ich proj4stringin Schritt 1 das Laden des Shapefiles festlegen und die Koordinaten aus der CSV-Datei mithilfe spTransformder overFunktion in dasselbe Projektionssystem transformieren, bevor ich die Funktion in Schritt 3 anwende, da dies für die Punkte und Polygone erforderlich ist unter dem gleichen Projektionssystem sein.

Hast du eine Idee, wie der korrekte Wert für den oben gezeigten Inhalt der proj-Datei lauten soll?

Moustafa Alzantot
quelle
Wenn Ihre Shapefile (s) bereits die definierte Projektion haben, verwenden Sie "readOGR" im rgdal-Paket. Dieses Paket ist ein Wrapper für GDAL und ersetzt die Shapefile-Lese- / Schreibfunktionen in Maptools. Diese Funktion verarbeitet alle Topologietypen und behält die Projektionsinformationen bei.
Jeffrey Evans
Wenn ich versuche, die Formdatei mit der readOGRFunktion zu laden, erhalte ich immer den Fehler Datei kann nicht geöffnet werden
Moustafa Alzantot,
OK, jetzt konnte ich die Datei mit readOGR lesen. Mit der summaryFunktion für das SpatialPolygonDataFrameObjekt habe ich den korrekten Wert für dieproj4string
Moustafa Alzantot 27.06.13
Nun, ohne Details darüber, wie Sie die Funktion verwenden, ist es schwierig, Ihnen zu helfen! Ein Teil der Syntax ist das Verzeichnis, in dem sich die Daten befinden, und Sie benötigen die Erweiterung .shp im Dateinamen nicht. Etwas wie readOGR (getwd (), "YourShape") sollte funktionieren, wenn Sie Ihr Arbeitsverzeichnis auf den gleichen Ort eingestellt haben, an dem sich Ihre Shepfile befindet.
Jeffrey Evans
Danke @JeffreyEvans, es hat jetzt funktioniert und ich habe es benutzt, um den proj4string
Moustafa Alzantot 27.06.13

Antworten:

14

Der proj4string ist ein gültiger PROJ4- crs-String.

Siehe Wie kann ich den proj4-String oder EPSG-Code aus einer Shapefile-PRJ-Datei abrufen? und Shapefile PRJ zur PostGIS SRID Nachschlagetabelle?

Zusamenfassend:

  • Sie können gdalinfo wie in der ersten Referenz oder die GDAL-Python-Bindungen wie in der zweiten Referenz verwenden.

Oder

  • gehe zu Prj2EPSG (ein einfacher Dienst zum Konvertieren bekannter Textprojektionsinformationen aus .prj-Dateien in Standard-EPSG-Codes)
  • Geben Sie den Inhalt Ihrer prj-Datei ein

Bildbeschreibung hier eingeben

  • Das Ergebnis ist EPSG: 27700, also ist eine erste Version des PROJ4-Strings

    " + Init = epsg: 27700 "

`Oder

Bildbeschreibung hier eingeben

  • Klicken Sie auf ProJ4 und der komplette PROJ4-String lautet:

    " + Proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0,9996012717 + x_0 = 400000 + Y_0 = -100000 + ellps = + luftiges Bezugs = OSGB36 + units = m + no_defs "

Gen
quelle
10

Hier ist eine sehr praktische Website zum Abrufen des EPSG-Codes für eine bestimmte Projektion. In Ihrem Fall lautet die Projektion "EPSG: 27700". Wenn für das Shapefile Projektionen definiert sind, können Sie die Projektion beim Erstellen des SpatialPointsDataFrame zuweisen und anschließend die Projektionsdefinition aus Ihrem importierten Shapefile verwenden. Mit "readOGR" aus dem rgdal-Paket werden die Projektionsdefinitionen beibehalten. Hier ist ein Beispiel für das Zuweisen und Abrufen von Koordinatenzeichenfolgen für sp-Klassendaten.

require(sp)
require(rgdal)

# Use meuse dataset
data(meuse)

# Coerce into SpatialPointsDataframe
coordinates(meuse) <- ~x+y

# Assign projection
proj4string(meuse) <- CRS("+init=epsg:28992")

# Pull some observations and transform to Lat/Long
meuse.geo <- meuse[sample(dim(meuse)[1],10),]
  prj.LatLong <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")
    meuse.geo <- spTransform(meuse.geo, prj.LatLong)

# Pull projection string from meuse.geo and use in spTransform
#   to reproject meuse to lat/long  
( prj <- proj4string(meuse.geo) )   
meuse <- spTransform(meuse, CRS(prj))   
Jeffrey Evans
quelle