小编top*_*cat的帖子

重新采样栅格

我正在尝试将具有高分辨率(25米)和分类数据(1到13)的森林覆盖栅格重新采样为RasterLayer具有较低分辨率(~1 km)的新光栅.我的想法是将森林覆盖数据与其他低分辨率栅格数据结合起来:

  1. 我试过raster::resample(),但由于数据是绝对的,我丢失了很多信息:

    summary(as.factor(df$loss_year_mosaic_30m))
      0       1   2   3  4   5   6   7  8   9   10  11   12  13
    3777691  65  101 50 151 145 159 295 291 134 102 126 104  91 
    
    Run Code Online (Sandbox Code Playgroud)

    如您所见,新栅格具有所需的分辨率,但也有很多零.我认为这是正常的,因为我使用了'ngb'选项resample.

  2. 第二种策略是使用,raster::aggregate()但我发现难以定义因子整数,因为分辨率的变化不是直截了当的(如分辨率的两倍或相似).

    我的高分辨率栅格具有以下分辨率,我希望它将其聚合0.008333333, 0.008333333 (x, y)到相同程度的分辨率.

    loss_year
    class       : RasterLayer 
    dimensions  : 70503, 59566, 4199581698  (nrow, ncol, ncell)
    resolution  : 0.00025, 0.00025  (x, y)
    extent      : -81.73875, -66.84725, -4.2285, 13.39725  (xmin, xmax, ymin, ymax)
    coord. ref. : +proj=longlat …
    Run Code Online (Sandbox Code Playgroud)

gis r resolution raster

5
推荐指数
2
解决办法
6649
查看次数

错误空间子集和PostGIS数据库

我正在尝试使用sqlalchemygeoalchemy2在Python 3.5上进行空间操作.我有一个点作为geom属性的表.我已阅读该表并按照文档说明操作:

metadata = MetaData()
table = Table('table', 
                 metadata, autoload=True,
                 schema = "schema",
                 autoload_with=engine)
print(table.columns)
Run Code Online (Sandbox Code Playgroud)

这正确地返回了我的表的列的名称.现在,我想创建数据的空间子集,仅选择POLYGON对象内的点.我尝试过ST_ContainsST_Intersection:

# Create session for queries
Session = sessionmaker(bind=engine)
session = Session()

#SELECT * FROM table:
q = session.query(table).filter(table.c.geom.ST_Intersects(func.GeomFromEWKT(<POLYGON>)))
Run Code Online (Sandbox Code Playgroud)

POLYGON是具有定义的WKT几何SRID=4326.我已经尝试过使用相同多边形的不同形式,但没有一个有效.执行查询时,以下错误返回:

(psycopg2.InternalError) geometry contains non-closed rings
HINT:  "...140.965576171875 -11.11288507032144))" <-- parse error at position 166 within geometry
Run Code Online (Sandbox Code Playgroud)

我失败的地方?

python postgresql postgis geoalchemy2

5
推荐指数
1
解决办法
145
查看次数

映射熊猫中的字典值

我有一个数据框(df),其中包含以下内容:

 var1
a 1 
a 1 
b 2  
b 3 
c 3 
d 5 
Run Code Online (Sandbox Code Playgroud)

和字典:

dict_cat = {
'x' = ['a', 'b', 'c'],
'y' = 'd' }
Run Code Online (Sandbox Code Playgroud)

我想创建一个新列cat,该列根据var1值使用dict键值:

 var1 cat
a 1 x 
a 1 x
b 2 x
b 3 x
c 3 x
d 5 y
Run Code Online (Sandbox Code Playgroud)

我尝试map使用:将变量指定为dict df['cat'] = df['var1'].map(dict_cat),但是由于值在列表内,因此Python无法识别值,而我只能获取NaN值。有一种使用的方法map,还是应该创建一个对行进行迭代的函数,以检查是否var1in字典列表?

谢谢!

python pandas

2
推荐指数
1
解决办法
2229
查看次数

如何正确使用 R future (furrr) 包中的集群计划

我目前正在使用furrr我的模型创建更有组织的执行。我使用 adata.frame以有序的方式将参数传递给函数,然后使用 afurrr::future_map()将函数映射到所有参数。在我的本地计算机 (OSX) 上使用顺序和多核 future 时,该函数可以完美运行。

现在,我想测试我的代码,创建我自己的 AWS 实例集群(正如此处所示)。

我使用链接的文章代码创建了一个函数:

make_cluster_ec2  <- function(public_ip){
  ssh_private_key_file  <-  Sys.getenv('PEM_PATH')
  github_pac  <-  Sys.getenv('PAC')

  cl_multi <- future::makeClusterPSOCK(
  workers = public_ip,
  user = "ubuntu",
  rshopts = c(
    "-o", "StrictHostKeyChecking=no",
    "-o", "IdentitiesOnly=yes",
    "-i", ssh_private_key_file
  ),
  rscript_args = c(
    "-e", shQuote("local({p <- Sys.getenv('R_LIBS_USER'); dir.create(p, recursive = TRUE, showWarnings = FALSE); .libPaths(p)})"),
    "-e", shQuote("install.packages('devtools')"),
    "-e", shQuote(glue::glue("devtools::install_github('user/repo', auth_token = '{github_pac}')"))
  ),
  dryrun = FALSE)

  return(cl_multi)

}
Run Code Online (Sandbox Code Playgroud)

然后,我创建集群对象,然后检查它是否连接到正确的实例

public_ids <- c('public_ip_1', 'public_ip_2') …
Run Code Online (Sandbox Code Playgroud)

parallel-processing r r-future furrr

1
推荐指数
1
解决办法
1361
查看次数