2017-11-16 6 views
0

私は緯度プロットしようとしています&シェイプファイルの上に経度座標。彼らは同じ座標系(NAD27)を持っていると言われています。私はそれを研究した後に数多くの方法を試しましたが、何も完璧に機能しません。どちらか一方をマッピングしますが、両方をマッピングしません。以下はそれらを読んだ例ですが、私のCSVはspパッケージのもので、私のshpはmaptoolsパッケージのものなので、プロットを始める方法はわかりません。R地図CSV&SHP

pts <- read.csv("locations.csv") 
pts <- pts[,4:5] 
names(pts) <- c("Latitude", "Longitude") 
pts <- pts[complete.cases(pts),] 
pts <- SpatialPoints(pts) 
border <- maptools::readShapePoly("landman_one shape.shp") 

ご協力いただければ幸いです。

以下は、異なる構造です。

> str(pts) 
Formal class 'SpatialPoints' [package "sp"] with 3 slots 
    [email protected] coords  : num [1:372, 1:2] 30.9 30.9 31 31 31 ... 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:372] "1" "2" "3" "4" ... 
    .. .. ..$ : chr [1:2] "Latitude" "Longitude" 
    [email protected] bbox  : num [1:2, 1:2] 29.5 -105.2 36 -76.1 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:2] "Latitude" "Longitude" 
    .. .. ..$ : chr [1:2] "min" "max" 
    [email protected] proj4string:Formal class 'CRS' [package "sp"] with 1 slot 
    .. .. [email protected] projargs: chr NA 

> str(border) 
Formal class 'SpatialPolygonsDataFrame' [package "sp"] with 5 slots 
    [email protected] data  :'data.frame': 1 obs. of 2 variables: 
    .. ..$ Id  : int 0 
    .. ..$ PERIM_GEO: num 998432 
    .. ..- attr(*, "data_types")= chr [1:2] "N" "F" 
    [email protected] polygons :List of 1 
    .. ..$ :Formal class 'Polygons' [package "sp"] with 5 slots 
    .. .. .. [email protected] Polygons :List of 1 
    .. .. .. .. ..$ :Formal class 'Polygon' [package "sp"] with 5 slots 
    .. .. .. .. .. .. [email protected] labpt : num [1:2] 922511 545445 
    .. .. .. .. .. .. [email protected] area : num 3.45e+10 
    .. .. .. .. .. .. [email protected] hole : logi FALSE 
    .. .. .. .. .. .. [email protected] ringDir: int 1 
    .. .. .. .. .. .. [email protected] coords : num [1:252, 1:2] 954182 954073 954006 953914 953828 ... 
    .. .. .. [email protected] plotOrder: int 1 
    .. .. .. [email protected] labpt : num [1:2] 922511 545445 
    .. .. .. [email protected] ID  : chr "0" 
    .. .. .. [email protected] area  : num 3.45e+10 
    [email protected] plotOrder : int 1 
    [email protected] bbox  : num [1:2, 1:2] 819851 386743 1042230 669865 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:2] "x" "y" 
    .. .. ..$ : chr [1:2] "min" "max" 
    [email protected] proj4string:Formal class 'CRS' [package "sp"] with 1 slot 
    .. .. [email protected] projargs: chr NA 

また、私は予測にあまり慣れていないので、その点については十分に理解できます。また、同じパッケージでこれを行う方法があれば、私はそれを公開しています。

+1

あなたのデータセットへのリンクを投稿するか、Webリンクまたは特定のパッケージからのリンクを使用しますか? – Nate

+0

'maptools :: readShapePoly()'はデフォルトで投写を読み込まないので、異なる投写があるようですね。 'str(pts)'と 'str(border)'をチェックして結果を投稿してください。 – Phil

+0

Nate、私は何かをまとめようとしますが、私のデータの大半は分類されます。 – PVic

答えて

2

問題は、空間データセットに投影セットがなく、異なる座標系を使用していないことです。これは@proj4stringの行にあり、両方とも現在NAです。座標系が異なることを確認する簡単な方法は、@bboxスロット( 'バウンディングボックス')です。 ptsでは、それぞれ-180/+ 180と-90/+ 90の範囲内にあるため、経度/緯度です。一方、borderは、全く異なる単位の値を持ちます(819851 386743 1042230 669865)。これらのいずれも、NAD27の座標系にはありません。

これを解決するには、最初にシェイプファイルを読むにはrgdal::readOGR()またはsf::read_sf()を使用します。 。1が存在しているので、これは、このデータが入っているものを投影あなたを教えてください

第二に、あなたが使用することができますptsproj4string()ための投影を設定する場合は、投影におけるこれらの機能の負荷:

proj4string(pts) = CRS("+init=epsg:4326") 

両方ptsたら、 borderに投影セットがある場合は、spTransform()でもう一方の座標系に変換できます。 borderのCRS /投影がわからないので、これをWGS84(投影はpts)に変換しますが、ptsをCRSがわかるとborderと同じ投影に変換するだけです。

border = spTransform(border, CRS("+init=epsg:4326")) 

一度同じプロジェクションに入ると、一緒にプロットする必要があります。あなたの予測が以下のものと一致することを確認できます:

proj4string(border) == proj4string(pts) 
+0

私はそれらを同じシステムに乗せることができましたが、どのプロットスクリプトが機能するのでしょうか?私はそれらをspでプロットする方法を研究しようとしています。 – PVic

+0

@pvic申し訳ありませんが、プロットスクリプトはどういう意味ですか?あなたがどのようにプロットすべきなのかを知っているなら、たくさんのチュートリアルが簡単なGoogle検索でアクセスできます。 tmapには素晴らしい構文があります。 – Phil

+0

私の作図がうまくいかない原因となっていたライブラリを再読み込みしました。私はsp :: plotをadd = TRUE属性で使用してしまいました。ヘルプフィールに感謝します。 – PVic