首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带十进制度的st_simplify dTolerence

带十进制度的st_simplify dTolerence
EN

Stack Overflow用户
提问于 2020-02-01 00:53:02
回答 1查看 1.3K关注 0票数 5

我正在尝试通过应用st_simplify来减小sf对象的大小。CRS是4267,并尝试使用正确的dTolerance级别。我知道dTolerance的单位必须是CRS的单位,所以我从0.1开始,但我经常收到这个错误消息。

代码语言:javascript
复制
test <- st_read("comm_sf.shp") %>%
+   st_simplify(preserveTopology = T,
+               dTolerance = 0.1)
Simple feature collection with 11321 features and 21 fields
geometry type:  MULTIPOLYGON
dimension:      XY
bbox:           xmin: -124.4375 ymin: 24.5441 xmax: -66.94983 ymax: 49.00249
epsg (SRID):    4326
proj4string:    +proj=longlat +datum=WGS84 +no_defs
Warning message:
In st_simplify.sfc(st_geometry(x), preserveTopology, dTolerance) :
  st_simplify does not correctly simplify longitude/latitude data, dTolerance needs to be in decimal degrees

我尝试了设置dTolerance = 1000 (如果是以米为单位)和dTolerance = 0.1 (如果是以经度为单位),但我得到了相同的错误消息。当CRS = 4267时也会发生这种情况。我该如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-01 01:20:58

这是一个警告,而不是一个错误。但一般来说,您应该在投影坐标系上执行Douglas-Peucker -因为它使用距离作为缓冲区,而经度单位的实际大小随纬度而变化。请注意,st_simplify容差使用的单位始终与贴图单位相同。

下面是一个可重复使用的示例:

代码语言:javascript
复制
library(sf)
library(maptools)

states = st_as_sf(maps::map("state", plot = FALSE, fill = TRUE))
states_simple = st_simplify(states)
##Warning message:
##  In st_simplify.sfc(st_geometry(x), preserveTopology, dTolerance) :
##  st_simplify does not correctly simplify longitude/latitude data, dTolerance needs to be in decimal degrees

但如果我们首先变换到投影坐标系,则不会出现警告:

代码语言:javascript
复制
states = st_transform(states, 54032) #azimuthal equidistant
states_simple = st_simplify(states)

您可以在简化后很长一段时间内返回到WGS84

代码语言:javascript
复制
 states = st_transform(states, 4326) 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60008135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档