Rでのspオブジェクトの投影


35

さまざまなCRS(主にWGS84 lat / lon)に多数のシェープファイルがあり、それらを共通の投影(Albers Equal Area Conicなど)に変換したいのですが、問題が改善したら、別の質問で選択する際に助けを求めることがあります-defined)。

私はRで空間統計を行うために数ヶ月を費やしましたが、それは5年前です。私の人生では、ある投影法から別の投影法にspオブジェクト(例えばSpatialPolygonsDataFrame)を変換する方法を思い出せません。

サンプルコード:

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry"), verbose=TRUE, proj4string=P4S.latlon) 
# Shapefile available at 
#   http://www.dartmouthatlas.org/downloads/geography/hrr_bdry.zip 
#   but you must rename all the filenames to have the same 
#   capitalization for it to work in R

これSpatialPolygonsDataFrameで適切な投影情報を取得できましたが、それを目的の投影に変換したいと思います。このために、やや直感的ではない名前の関数があったことを思い出しますが、それが何であるかを思い出せません。

CRSを変更するだけでなく、一致するように座標を変更することに注意してください( "reproject"、 "transform"など)。

編集

このシェープファイル用に迷惑なことにメキシコに配置されているAK / HIを除く:

library(taRifx.geo)
hrr.shp <- 
  subset(hrr.shp, !(grepl( "AK-" , hrr.shp@data$HRRCITY ) |
                                     grepl( "HI-" , hrr.shp@data$HRRCITY )) )
proj4string(hrr.shp) <- P4S.latlon

proj4パッケージを使用した投影に関する以前の回答はこちら。ただし、SpatialPolygonsDataFrameでこれを試したことはありません。
シンバマング

実際、proj4はSpatialオブジェクトでは機能しないように見えますが、以下の回答を参照してください。
シンバマング

2
常に空間タスクビューがあります:cran.r-project.org/web/views/Spatial.htmlおよび空間データに関する私のメモ[恥知らずのプラグ]:maths.lancs.ac.uk/~rowlings/Teaching/UseR2012
Spacedman

回答:


44

spTransform()rgdal のメソッドを使用できます。例を使用して、カンザスのオブジェクトをNAD83に変換できます(26978):

library(rgdal)
library(maptools)

P4S.latlon <- CRS("+proj=longlat +datum=WGS84")
hrr.shp <- readShapePoly("HRR_Bdry", verbose=TRUE, proj4string=P4S.latlon)
plot(hrr.shp)

未投影

hrr.shp.2 <- spTransform(hrr.shp, CRS("+init=epsg:26978"))
plot(hrr.shp.2)

投影された

新しいプロジェクションに保存するには:

writePolyShape(hrr.shp.2, "HRR_Bdry_NAD83")

編集:または、@ Spacedmanの提案に従って(CRS情報を含む.prjファイルを書き込みます):

writeOGR(hrr.shp.2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver="ESRI Shapefile")

投影するCRSが不明な場合は、次の投稿を参照してください。

また、データにCRSがない場合にCRSを定義/割り当てたい場合は、以下を参照してください。


10
writePolyShapeは.prjファイルを書き込まないことに注意してください!Rで空間オブジェクトのCRSを設定するために.prjファイルを読み書きする場合は、rgdalからwriteOGRを使用する必要があります(そしてreadOGRを使用してシェープファイルを読み取ります)。
スペースドマン

はるかに良い(それに応じて編集)-ありがとう。.prjファイルが作成されることに気付いていませんでした!ちなみに、ページ上の素晴らしいチートシート。
シンバマング

1
メキシコでの投影がアラスカとハワイの差し込み図の外観にどのように影響するかは奇妙です:-)。
whuber

@whuber-うーん、はい...誰かが私の投稿を編集しましたが、実際のマップにはそのような不適切なインセットが表示されていませんでした...
シンバマング

@Simbamangu申し訳ありませんが、グラフの追加に役立てようとしたときに、この.shpファイルにインセットがかなり不適切に含まれていたことを忘れてしまいました!
アリB.フリードマン

8

SF-パッケージが導入されて以来(ビネットを見ていSF1SF2SF3SF4および移行ガイドここにあなたが使用することができます)st_transform()あなたのベクターデータを再再投影のために:

require(sf)

hrr_sf = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 4326) # has +proj=longlat +datum=WGS84
plot(hrr_sf)

hrr_sf2 = st_transform(hrr_sf, "+init=epsg:26978") # 1st option sp::CRS() not working/ needed
hrr_sf2 = st_transform(hrr_sf, 26978) # 2nd option - EPSG code as an integer
plot(hrr_sf2)

# don't think about doing this:
hrr_sf3 = st_read('HRR_Bdry.shp', stringsAsFactors = FALSE,
    crs = 26978)

# Output layer
st_write(hrr_sf2, dsn = getwd(), layer = "HRR_Bdry_NAD83", driver = "ESRI Shapefile")

sfは将来spに置き換わり、spに比べてそのシンプルさと速度のおかげでいくつかの利点があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.