簡體   English   中英

R:將使用緯度/經度定義的 sf 多邊形轉換為 UTM

[英]R: Convert sf polygon defined using lat/long to UTM

我有以下多邊形,使用緯度/經度定義:

## Define latitude/longitude
lats <- c(64.25086, 64.24937, 63.24105, 63.22868)
lons <- c(-140.9985, -136.9171, -137.0050, -141.0260)
df <- data.frame(lon = lons, lat = lats)


polygon <- df %>% 
  ## EPSG 3578; Yukon Albers projection
  st_as_sf(coords = c('lon', 'lat'), crs = 3578) %>%
  summarise(geometry = st_combine(geometry)) %>%
  st_cast('POLYGON')

當我使用 Tmap 在 map 上 plot 時,它出現在不列顛哥倫比亞省海岸外的太平洋中,而不是育空地區中部:

library(sf)
library(sp)
library(tmap)
library(dplyr)
library(magrittr)
library(leaflet)

m <- tm_shape(data$study_boundary) + tm_borders(col = 'black',
                                                lwd = 5,
                                                zindex = 1000)

m

我猜問題出在使用緯度/經度而不是 UTM,因為我使用 UTM 定義了其他多邊形,這些多邊形確實出現在它們(以及上面定義的多邊形)應該出現的位置。 我發現其他幾篇文章使用 spTransform 以其他方式(UTM 到 lat/long),但我無法使用 spTransform 將 go lat/long 轉換為 UTM。 我嘗試了下面的代碼:

poly_utm <- st_transform(polygon, crs = "+proj=utm+7")

但這也沒有用。

謝謝!

這(我通過移除管道改進了這一點):

st_as_sf(df, coords = c('lon', 'lat'), crs = 3578)

使用數據框中的數字作為坐標創建空間點數據框,並將 3578 的 crs 代碼作為 label 來表示這些數字所代表的內容。 它不會改變數字。

看起來這些數字實際上是經緯度坐標,這意味着它們可能是 crs 代碼 4326,用於 GPS 的經緯度系統,也稱為 WGS 84。但它可能不是。 但可能是。 做檢查。 所以無論如何,你應該這樣做:

df_unprojected = st_as_sf(df, coords = c('lon', 'lat'), crs = 4326)
df_projected = st_transform(df_unprojected, 3578)

st_transform function 實際更改坐標號並將新的 CRS 代碼分配給空間數據元數據。 那應該給你一組點,然后你可以 plot 並檢查它們在正確的位置,然后再將其放入summarisest_cast

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM