Choisir la valeur correcte pour proj4string pour la lecture du fichier de formes dans R?


14

J'ai un fichier de formes de polygones et un autre fichier CSV qui contient une liste de points sous forme de paires (Lat, Lng) ..

Je veux vérifier pour chaque paire (lat, lng) du fichier CSV dans quel polygone se situe-t-il.

Le fichier de formes est projeté et le fichier proj se lit comme suit:

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

Mon plan est le suivant:

  1. Lisez le fichier de formes à l'aide de la readShapePolyfonction du MapToolspackage R.
  2. Lire les coordonnées des points du fichier CSV dans une trame de données et les convertir en SpatialPointsDataFrame
  3. Utilisez la overfonction pour déterminer dans quel polygone il se trouve.

Pour ce faire, je dois spécifier le proj4stringpendant le chargement du fichier de formes à l'étape 1 et également transformer les coordonnées du fichier CSV dans le même système de projection à l'aide de la spTransformfonction avant d'appliquer la overfonction à l'étape 3 car cela nécessite que les points et les polygones doivent être sous le même système de projection.

Une idée de la valeur correcte du contenu du fichier proj indiqué ci-dessus?


Si vos fichiers de formes ont déjà la projection définie, utilisez "readOGR" dans le paquetage rgdal. Ce paquet est un wrapper pour GDAL et remplace vraiment la fonctionnalité de lecture / écriture de fichiers de formes dans maptools. Cette fonction gère tous les types de topologie et conserve les informations de projection.
Jeffrey Evans

Lorsque j'essaie de charger le fichier de forme à l'aide de la readOGRfonction, j'obtiens toujours une erreur d' ouverture de fichier
impossible

OK, maintenant j'ai pu lire le fichier en utilisant readOGR .. en utilisant la summaryfonction pour l' SpatialPolygonDataFrameobjet m'a donné la valeur correcte pour leproj4string
Moustafa Alzantot

Eh bien, sans détails sur la façon dont vous utilisez la fonction, il est difficile de vous aider! Une partie de la syntaxe est le répertoire dans lequel les données résident et vous n'avez pas besoin de l'extension .shp dans le nom de fichier. Quelque chose comme readOGR (getwd (), "YourShape") devrait fonctionner si votre répertoire de travail est défini au même endroit que votre fichier Shep.
Jeffrey Evans

Merci @JeffreyEvans, cela a fonctionné maintenant et je l'ai utilisé pour obtenir le proj4string
Moustafa Alzantot

Réponses:


14

La chaîne proj4 est une chaîne crs PROJ4 valide .

voir Comment puis-je obtenir la chaîne proj4 ou le code EPSG à partir d'un fichier shapefile .prj? et Shapefile PRJ à la table de recherche PostGIS SRID?

en bref:

  • Vous pouvez utiliser gdalinfo comme dans la première référence ou les liaisons GDAL Python comme dans la deuxième référence.

Ou

  • allez à Prj2EPSG (un service simple pour convertir des informations de projection de texte bien connues à partir de fichiers .prj en codes EPSG standard)
  • Entrez le contenu de votre fichier prj

entrez la description de l'image ici

  • le résultat est EPSG: 27700 donc une première version de la chaîne PROJ4 est

    " + init = epsg: 27700 "

`Ou

entrez la description de l'image ici

  • cliquez sur Proj4 et la chaîne complète de PROJ4 est:

    " + proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0.9996012717 + x_0 = 400000 + y_0 = -100000 + ellps = aéré + datum = OSGB36 + unités = m + no_defs "


10

Voici un site Web très pratique pour récupérer le code EPSG pour une projection donnée. Dans votre cas, la projection est "EPSG: 27700". Si des projections sont définies pour le fichier de formes, vous pouvez affecter la projection lorsque vous créez le SpatialPointsDataFrame, puis utiliser la définition de projection de votre fichier de formes importé. L'utilisation de "readOGR" à partir du package rgdal conservera les définitions de projection. Voici un exemple d'affectation et d'extraction de chaînes de coordonnées sur des données de classe sp.

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))   
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.