![](/img/trans.png)
[英]Transform a sfc_LINESTRING geometry to sfc_MULTIPOLYGON
[英]Convert foreign object to an sfc object [sfc_MULTIPOLYGON, sfc_POLYGON]
從 SQL 服務器返回空間查詢時,我得到一個數據框,其中“形狀”列是“字符”object,我無法將其轉換為 sfg object。
library(DBI)
library(odbc)
library(sf)
query_sf.AsText <- "Select CLASEUSO, Shape.STAsText() AS Shape FROM my_Table where REGION IN ('Region_mh', 'Region_no', 'Region_in')"
query_sf.AsBinary <- "Select CLASEUSO, Shape.STAsBinary() AS Shape FROM my_Table where REGION IN ('Region_mh', 'Region_no', 'Region_in')"
df_text <- st_read(odbc_con, query = query_sf.AsText)
> Warning message:
> In st_read.DBIObject(odbc_con, query = query_sf) :
> Could not find a simple features geometry column. Will return a `data.frame`.
df_binary <- st_read(odbc_con, query = query_sf.AsBinary)
ex_text <- df_text[1:3, ]
ex_binary <- df_binary[1:3, ]
str(ex_text)
> 'data.frame': 3 obs. of 2 variables:
> CLASEUSO: chr "Vegetacion Nativa" "Vegetacion Nativa" "Vegetacion Nativa"
> Shape : chr "POLYGON ((-5865371.0349 -2234709.5711000003, -5865383.0660999995 -2234694.5898, -5865392.442 -2234690.814500000"| __truncated__ "POLYGON ((-5866433.0649 -2236171.0835000016, -5866431.4669 -2236170.9224999994, -5866431.1 -2236170.8986000009,"| __truncated__ "POLYGON ((-5864979.8155000005 -2236093.0526, -5865013.8751 -2236072.0670999996, -5865019.1833 -2236072.01419999"| __truncated__
STAsBinary 不返回小數分隔符。
str(ex_binary)
> Classes ‘sf’ and 'data.frame': 3 obs. of 2 variables:
> CLASEUSO: chr "Vegetacion Nativa" "Vegetacion Nativa" "Vegetacion Nativa"
> Shape :sfc_POLYGON of length 3; first list element: List of 1
> num [1:184, 1:2] -5865371 -5865383 -5865392 -5865396 -5865401 ...
> attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
> attr(*, "sf_column")= chr "Shape"
> attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA
> attr(*, "names")= chr "CLASEUSO"
將文本 class 列轉換為 <"XY" "POLYGON" "sfg"> object 無效。
ex_text$Shape <- st_as_sfc(ex_text$Shape)
sf_tbl_text = st_as_sf(ex_text)
st_crs(sf_tbl_text) = 4326
sf_tbl_text %>% mapview::mapview()
獲取 sf 數據框的最佳方法是什么?
此外,查詢 STAsText() 太耗時了。
您從數據庫返回的文本似乎遵循WKT 格式,因此不一定是錯誤的。 它可以使用標准sf:st_as_sf()
工作流來處理,將{sf}
指向 wkt 列。
缺少的一條信息是關於坐標參考系統的信息,應該在其中解釋多邊形。 根據數字范圍和我的直覺,我會嘗試 Web Mercator / EPSG:3857,但請記住,這只是一個猜測。 您感興趣的地區是巴西南部嗎?
library(sf)
library(dplyr)
raw_data <- data.frame(
claus0= c("Vegetacion Nativa", "Vegetacion Nativa"),
Shape = c("POLYGON ((-5865371.0349 -2234709.5711000003, -5865383.0660999995 -2234694.5898, -5865392.442 -2234690.814500000))",
"POLYGON ((-5866433.0649 -2236171.0835000016, -5866431.4669 -2236170.9224999994, -5866431.1 -2236170.8986000009))"))
clean_data <- raw_data %>%
st_as_sf(wkt = "Shape", crs = 3857)
mapview::mapview(clean_data) # this not be entirely correct, as the polygons were truncated...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.