微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 R (Windows) 中使用 RPyGeo 将 sf 对象导出到 GDB?

如何解决如何在 R (Windows) 中使用 RPyGeo 将 sf 对象导出到 GDB?

我有一堆 sf 对象,我想从 R 导出到 GDB。我在 Windows 10 上运行 R 4.0.2。在这种情况下,sf 对​​象都是矢量点数据。导出到 GDB 的主要原因是保留更长的字段名称(shapefile 截断很烦人),并且因为 GDB 是我们工作流程更理想的存储位置。

是的,我知道 ArcGisBinding 包。我已经让它在测试脚本中工作,但它非常不稳定 - 经常崩溃并需要重新启动 R。这是一个问题,因为我想导出的 sf 对象是在读入已经很长的 Rmd 之后出现的,格式化和清理数据。因此,在 arc.write 没有中断之前重新运行脚本并不是一种简单的方式。我可以分解脚本,但是我仍然需要阅读一堆 shapefile。我尚未探索的一种选择是使用 reticulate 调用 python 脚本,而不是尝试在 R 中完成所有操作,但如果可能,我们正在尝试在一个地方进行分析。

我很确定我已经设法适当地设置了 RPyGeo,首先使用 reticulate 包设置了我的 python 路径。我这样做是因为 IT 限制意味着我无法在我的机器上编辑 PATH 变量。

#package calls
library(sf)
library(spData)
library(reticulate)

#set python version in reticulate
py_path <- "C:/Program Files/ArcGIS/Pro/bin/Python/envs/arcgispro-py3/python.exe"
reticulate::use_python(python = py_path,required = TRUE)

#call RPyGeo
library(RPyGeo) # for potential point export

#output gdb
out.gdb <- "C:/LOCAL_PROJECTS/Output/Output.gdb"

#RPyGeo Parameters
# Note that,in order to use RPyGeo you need a working ArcMap or ArcGIS Pro installation on your computer.

# python path - note that this will change depending on which version of Arc one is using
# py_path <- "C:/Program Files/ArcGIS/Pro/bin/Python/envs/arcgispro-py3/python.exe"

arcpy <- rpygeo_build_env(workspace = out.gdb,overwrite = TRUE,extensions = c("Spatial","DataInteroperability"),path = py_path)

我尝试了很多不同的工具来导出 sf 对象,这里使用了 RPyGeo 小插图中也使用的虚拟数据

data(nz,package = "spData")

arcpy$copy_management(in_data = nz,out_data = "nz_test")
arcpy$copy_management(in_data = nz,out_data = file.path(out.gdb,"nz"))
arcpy$FeatureClasstoGeodatabase_conversion(Input_Features = nz,Output_Geodatabase = out.gdb)
arcpy$FeatureClasstoFeatureClass_conversion(in_features = nz,out_path = out.gdb,out_name = "nz")
arcpy$QuickExport_interop(Input = nz,Output = file.path(out.gdb,"nz"))
arcpy$copyFeatures_management(in_features = nz,out_feature_class = file.path(out.gdb,out_feature_class = "nz")

每次出现错误时,例如:

Error in py_call_impl(callable,dots$args,dots$keywords) : 
  RuntimeError: Object: Error in executing tool

Detailed traceback: 
  File "C:\Program Files\ArcGIS\Pro\Resources\Arcpy\arcpy\management.py",line 3232,in copyFeatures
    raise e
  File "C:\Program Files\ArcGIS\Pro\Resources\Arcpy\arcpy\management.py",line 3229,in copyFeatures
    retval = convertArcObjectToPythonObject(gp.copyFeatures_management(*gp_fixargs((in_features,out_feature_class,config_keyword,spatial_grid_1,spatial_grid_2,spatial_grid_3),True)))
  File "C:\Program Files\ArcGIS\Pro\Resources\Arcpy\arcpy\geoprocessing\_base.py",line 511,in <lambda>
    return lambda *args: val(*gp_fixargs(args,True))

我无论如何都不是 Arcpy 的专家。我也不是跟踪包内错误的专家。我犯了一个简单的语法错误吗?还有什么我想念的吗?任何帮助将不胜感激!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。