我正在尝试将具有高分辨率(25米)和分类数据(1到13)的森林覆盖栅格重新采样为RasterLayer具有较低分辨率(~1 km)的新光栅.我的想法是将森林覆盖数据与其他低分辨率栅格数据结合起来:
我试过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.
第二种策略是使用,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)我正在尝试使用sqlalchemy和geoalchemy2在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_Contains和ST_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)
我失败的地方?
我有一个数据框(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,还是应该创建一个对行进行迭代的函数,以检查是否var1有in字典列表?
谢谢!
我目前正在使用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) python ×2
r ×2
furrr ×1
geoalchemy2 ×1
gis ×1
pandas ×1
postgis ×1
postgresql ×1
r-future ×1
raster ×1
resolution ×1