10

種分布モデルを実行しようとしていますが、ロジスティック回帰モデルを実行するためにバックグラウンド ポイントを作成する必要があります。500 個の randomPoints を作成しましたが、それらは UTM 座標であり、緯度と経度が必要です。Rで緯度と経度に変換する方法はありますか? もしそうなら、コードを私と共有できますか? 私はRにかなり慣れていません。ありがとう!

4

1 に答える 1

24

経度/緯度が必要な場合は、その座標参照系を使用してランダム ポイントを生成する必要があります。しかし、それ以外の場合は、以下のようなことができます。

最初に座標のサンプル セットを生成します ( points)

 library(terra)
 set.seed(1)
 x <- runif(10, -10000, 10000)   
 y <- runif(10, -10000, 10000)   
 points <- cbind(x, y)

ここで、ポイントの座標参照系(CRS)がわかっていると仮定して、空間オブジェクトを作成し、その既知の CRS を割り当てることができます。私の例では、ポイントはUTM, zone 10, datum=WGS84投影にあります。

library(terra)
v <- vect(points, crs="+proj=utm +zone=10 +datum=WGS84  +units=m")
v
# class       : SpatVector 
# geometry    : points 
# dimensions  : 10, 0  (geometries, attributes)
# extent      : -8764.275, 8893.505, -6468.865, 9838.122  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=utm +zone=10 +datum=WGS84 +units=m +no_defs 

これで、これらを別の CRS に変換できます。たとえば、longitude/latitude

y <- project(v, "+proj=longlat +datum=WGS84")
y
# class       : SpatVector 
# geometry    : points 
# dimensions  : 10, 0  (geometries, attributes)
# extent      : -127.5673, -127.4091, -0.05834327, 0.08873723  (xmin, xmax, ymin, ymax)
# coord. ref. : +proj=longlat +datum=WGS84 +no_defs 
 

そして、このような座標を抽出できます

lonlat <- geom(y)[, c("x", "y")]
head(lonlat, 3)
#             x             y
#[1,] -127.5308 -0.0530354276
#[2,] -127.5117 -0.0583432750
#[3,] -127.4757  0.0337371933

もちろん逆もできます

back <- project(y, "+proj=utm +zone=10 +datum=WGS84 +units=m")

sfパッケージでも、古いパッケージでも同じことができspます。で、オブジェクトをsp作成して使用します。SpatialPointsspTransform

library(rgdal)
sputm <- SpatialPoints(points, proj4string=CRS("+proj=utm +zone=10 +datum=WGS84")) 
spgeo <- spTransform(sputm, CRS("+proj=longlat +datum=WGS84"))
lnlt <- coordinates(spgeo)
 

この例では UTM ゾーン 10 を使用しました。ただし、60 の UTM ゾーンがあり、いずれかを選択する必要があることに注意してください。それぞれが (360/60=) 6 度のストリップをカバーします。データが多くの経度にまたがる場合や UTM ゾーンをまたぐ場合は、UTM を使用しないでください。[-180, 180) の間の経度の場合、次のように必要なゾーンを計算できます

utm_zone <- function(longitude) { trunc((180 + longitude) / 6) + 1 }

longs <- c(-122,-119, -118)
utm_zone(min(longs))
# [1] 10
utm_zone(max(longs))
# [1] 11

utm_zone(max(longs))

または、このような地図を見てください

負の座標を避けるために、南半球の場所に「偽北距」を使用する際の UTM との混同のポイント。これは、要素を使用して以下に示すように、y 座標に 10,000,000 を追加することによって行われ+southます。

s <- vect(cbind(174, -44), crs="+proj=longlat +datum=WGS84")
geom(project(s, "+proj=utm +zone=59"))[, c("x", "y")]
#       x          y 
#740526.3 -4876249.1 

geom(project(s, "+proj=utm +south +zone=59"))[, c("x", "y")]
#       x         y 
#740526.3 5123750.9 

また、「PROJ4」表記を使用して CRS を定義していることにも注意してください。使用される測地系 (測地系は地表の形状のモデル) が WGS84 または NAD83 である場合、これは正常に機能します。そうでない場合は、CRS の「EPSG」コードまたは「WKT2」記述を使用する必要があります。

于 2015-05-03T19:47:50.047 に答える