Rでの地理座標系の変換


14

地理座標系にポイントがあり、それらをスイスグリッド(CH1903 +)に変換したかった。

サンプルデータ:

 id       lon      lat
  2 7.173500 45.86880
  3 7.172540 45.86887
  4 7.171636 45.86924
  5 7.180180 45.87158
  6 7.178070 45.87014
  7 7.177229 45.86923  
  8 7.175240 45.86808
  9 7.181409 45.87177
  10 7.179299 45.87020

尊敬される結果:

id       E              N      
2     2579408.2431  1079721.1499
3     2579333.7158  1079729.1852
4     2579263.6502  1079770.1125
5     2579928.0358  1080028.4605
6     2579763.6471  1079868.9218
7     2579698.0756  1079767.9762
8     2579543.1019  1079640.6512
9     2580023.6226  1080049.2672
10    2579859.1889  1079875.2740 

3
@アーロン、私は同じ男です。そこには適切な答えがありません。手伝ってもらえますか?あなたがどれほどうるさいのか、本当に驚きました。
-Topdombili

1
@Topこれはうるさいことではなく、StackExchangeポリシーです。クロスポストは、あらゆる種類の矛盾と問題を引き起こします。(間違ったフォーラムに投稿すると、役に立つ回答が得られないこともあります。)投稿したSOバージョンを削除してください。
whuber

@ Topdombili、whuberの答えによれば、入力値はWGS84にあり、データム変換とCH1903 + / LV95グリッドへの投影が行われていることを指摘したかっただけです。
mkennedy

@mkennedyその観察をありがとう。私がしていることを説明しないで怠慢であったと仮定元(緯度、経度)座標はWGS 84(仮定は、コード内のコメントに埋め込まれていること)です。そうでない場合は、proj4string(d)それに応じて値を変更します。私の関心は、主に偽東距と北距パラメータに引かれ、たx0y0(そのようなコードの最初のコメントのように)Web上のいくつかの人気の参照が、これにより数千キロですべてのポイントを移動させる、彼らの最も重要な数字を落としているので、 :-)。
whuber

1
@whuber、痛い再:参照!WGS 84に設定された入力に関するあなたのコメントを見ましたが、Topdombiliがそれを確実に見たいと思っていました。
mkennedy

回答:


18

RGDALパッケージを使用します。どのCRSを使用するかという問題があります。RGDALはEPSGコードを認識しません。ここに示すように、パラメーターを明示的に指定する必要があります。(どうやらこれらは近似値ですが、かなり良いはずです。意図した値の約0.1 m以内にあるようです。)

# References:
# http://lists.maptools.org/pipermail/proj/2001-September/000248.html (has typos)
# http://www.remotesensing.org/geotiff/proj_list/swiss_oblique_cylindrical.html
#
# Input coordinates.
#
x <- c(7.173500, 7.172540, 7.171636, 7.180180, 7.178070, 7.177229, 7.175240, 7.181409, 7.179299)
y <- c(45.86880, 45.86887, 45.86924, 45.87158, 45.87014, 45.86923, 45.86808, 45.87177, 45.87020)
#
# Define the coordinate systems.
#
library(rgdal)
d <- data.frame(lon=x, lat=y)
coordinates(d) <- c("lon", "lat")
proj4string(d) <- CRS("+init=epsg:4326") # WGS 84
CRS.new <- CRS("+proj=somerc +lat_0=46.9524056 +lon_0=7.43958333 +ellps=bessel +x_0=2600000 +y_0=1200000 +towgs84=674.374,15.056,405.346 +units=m +k_0=1 +no_defs")
# (@mdsumner points out that
#    CRS.new <- CRS("+init=epsg:2056")
# will work, and indeed it does. See http://spatialreference.org/ref/epsg/2056/proj4/.)
d.ch1903 <- spTransform(d, CRS.new)
#
# Plot the results.
#
par(mfrow=c(1,3))
plot.default(x,y, main="Raw data", cex.axis=.95)
plot(d, axes=TRUE, main="Original lat-lon", cex.axis=.95)
plot(d.ch1903, axes=TRUE, main="Projected", cex.axis=.95)
unclass(d.ch1903)

プロット

        lon        lat  

[1] 2579408.24 1079721.15
[2] 2579333.69 1079729.18
[3]] 2579263.65 1079770.55
[4] 2579928.04 1080028.46
[5] 2579763.65 1079868.92
[6] 2579698.00 1079767.97
[7
] 2579543.10 1079640.626
[9 ] 108。、] 2579859.11 1079875.27


変換結果の精度は、小数点以下の値がない場合は低くなる可能性がありますが、尊敬される結果で利用可能な座標は10桁に最も近いため、小数点以下2桁を意味します。
-Topdombili

1
あなたのコメントがわかりません。元の(lat、lon)値が限られた精度で指定されている場合、投影された座標がどれくらい正確かを尋ねていますか?その場合、この回答が役立つことがあります。
whuber

1
rgdalはEPSG:2056、
FFIW

@mdありがとうございます!私はこれがEPSG:9814であると述べた参考文献を見つけましたが、RGDALはそれを認識しませんでした。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.