3

こんにちは、CRS Australian Geodetic Datum 66/84 (簡潔にするためにAGD66
) にある多数の経度/緯度座標があります。これらの座標を AGD66 から WGS84 に変更したいのは、それらの間に約 200m の違いがあり、WGS84 に他の座標とレイヤーがあるためです。私はこれをやろうとしました:

lon        lat
147.1428   -43.49083

library(rgdal)
pts<-read.table(file.choose(),header=TRUE,sep=',')  
# I first project the pts in their original CRS
pts66<-project(cbind(pts$lon,pts$lat), "+init=epsg:4202")
# Then to transform it to WGS84
pts84 = spTransform(pts66,CRS("+init=epsg:3033"))

Error in function (classes, fdef, mtable)  : 
unable to find an inherited method for function "spTransform", for signature "matrix", "CRS"

このエラーが発生する理由を知っている人、またはこれらの座標を AGD66 から WGS84 に変更する方法について提案がある人はいますか? 事前にご協力いただきありがとうございます。

乾杯、
アダム

4

1 に答える 1

6

不正解の一部を削除しました

関数 project() はデータム変換を実行できないため、問題が発生している可能性があり、間違っていると思います。

問題は、WGS84 で longlat との間でのみ project() できることです。そのため、project の最初の使用は正しくありません。これが正しいと推測すると、AGD66 の座標があるため、最初にその投影法を割り当ててから変換する必要があります。project() で測地変換を行うことはできませんが、spTransform() では可能です。

これが必要だと思います:

pts = read.table(text = "lon        lat
147.1428   -43.49083", header = TRUE)

## assign original coordinate system
pts66 = SpatialPoints(cbind(pts$lon,pts$lat), CRS("+init=epsg:4202"))

## Then to transform it to WGS84
pts84 = spTransform(pts66, CRS("+init=epsg:3033"))


pts66
SpatialPoints:
     coords.x1 coords.x2
[1,]  147.1428 -43.49083
Coordinate Reference System (CRS) arguments: +init=epsg:4202 +proj=longlat +ellps=aust_SA
+no_defs 

pts84
SpatialPoints:
     coords.x1 coords.x2
[1,]  11126605   2971806
Coordinate Reference System (CRS) arguments: +init=epsg:3033 +proj=lcc +lat_1=-68.5     +lat_2=-74.5
+lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs
+towgs84=0,0,0 

これは、pts66 が元の値から変更されていないことを意味しますが、次のステップでそれらをターゲット (Lambert Conformal Conic btw) に変換するためのメタデータが正しいことを意味します。何が必要かを理解するには、もう少し調査が必要な場合があります。

CRS("+init=epsg:4202")
CRS arguments:
+init=epsg:4202 +proj=longlat +ellps=aust_SA +no_defs 

CRS("+init=epsg:3033")

CRS arguments:
+init=epsg:3033 +proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50
+lon_0=70 +x_0=6000000 +y_0=6000000 +ellps=WGS84 +datum=WGS84 +units=m
+no_defs +towgs84=0,0,0 

元の project() は、WGS84 の longlat から AGD66 の longlat に誤って変換しようとしていましたが、その関数はそれを行うことができないため、混乱を招くだけです。データムは投影ではなく、投影の定義の重要な部分であり、この意味で、「AGD66 のロングラット」は「WGS84 のランベルト正角円錐曲線」と同様に投影です。

于 2012-04-02T11:29:18.153 に答える