[英]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 並檢查它們在正確的位置,然后再將其放入summarise
和st_cast
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.