Rでシェープファイルを読み取るためにproj4stringの正しい値を選択しますか?


14

ポリゴンのシェープファイルと、(Lat、Lng)ペアとしてのポイントのリストを含む別のCSVファイルがあります。

CSVファイルの各(lat、lng)ペアをチェックして、どのポリゴンに含まれるかを確認します。

シェープファイルが投影され、projファイルは次のようになります。

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

私の計画は次のとおりです。

  1. readShapePolyR MapToolsパッケージの関数を使用してシェープファイルを読み取ります。
  2. CSVファイルからポイント座標をデータフレームに読み取り、SpatialPointsDataFrameに変換します
  3. over関数を使用して、内部にあるポリゴンを判別します。

そのためにはproj4string、ステップ1でシェープファイルをロードするときに指定し、ステップ3で関数をspTransform適用する前にover、ポイントとポリゴンが必要であるため、関数を使用してCSVファイルから座標を同じ投影システムに変換する必要があります同じ投影システムの下にある。

上に示したprojファイルの内容の正しい値は何でしょうか?


シェープファイルに投影がすでに定義されている場合は、rgdalパッケージの「readOGR」を使用します。このパッケージはGDALのラッパーであり、maptoolsのシェープファイル読み取り/書き込み機能に実際に取って代わります。この関数は、すべてのトポロジタイプを処理し、投影情報を保持します。
ジェフリーエヴァンス

readOGR関数を使用してシェイプファイルをロードしようとすると、常に「ファイルを開くことができません」エラーが発生します
ムスタファアルザント

OK、readOGRを使用してファイルを読み取ることができました。オブジェクトのsummary関数を使用するとSpatialPolygonDataFrame、正しい値が与えられましたproj4string
Moustafa Alzantot

さて、関数の使用方法に関する詳細がなければ、支援することは困難です!構文の一部は、データが存在するディレクトリであり、ファイル名に.shp拡張子は必要ありません。作業ディレクトリがシェップファイルと同じ場所に設定されている場合、readOGR(getwd()、 "YourShape")のようなものが機能するはずです。
ジェフリーエヴァンス

@JeffreyEvansに感謝します。現在は機能
ムスタファアルザント

回答:


14

proj4stringは、有効なPROJ4 crsストリングです。

シェイプファイル.prjファイルからproj4文字列またはEPSGコードを取得する方法を参照してくださいShapefile PRJからPostGIS SRIDルックアップテーブルへ?

要するに:

  • 最初のリファレンスのようにgdalinfoを使用するか、2番目のリファレンスのようにGDAL Pythonバインディングを使用できます。

または

  • 行くPrj2EPSG(標準EPSGコードに.PRJファイルからよく知られているテキストの投影情報を変換するための単純なサービス)
  • prjファイルの内容を入力してください

ここに画像の説明を入力してください

  • 結果はEPSG:27700であるため、PROJ4文字列の最初のバージョンは

    " + init = epsg:27700 "

`または

ここに画像の説明を入力してください

  • Proj4をクリックすると、完全なPROJ4文字列は次のとおりです。

    " + proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0.9996012717 + x_0 = 400000 + y_0 = -100000 + ellps = airy + datum = OSGB36 + units = m + no_defs "


10

以下は、特定の投影法のEPSGコードを取得するための非常に便利なWebサイトです。あなたの場合、投影は「EPSG:27700」です。シェープファイルに投影を定義している場合、SpatialPointsDataFrameを作成し、インポートしたシェープファイルから投影定義を使用するときに投影を割り当てることができます。rgdalパッケージの「readOGR」を使用すると、投影定義が保持されます。以下に、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))   
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.