【问题标题】:Intersection and difference of PostGIS data using R使用 R 的 PostGIS 数据的交集和差异
【发布时间】:2022-02-01 20:48:05
【问题描述】:

我是PostgreSQLPostGIS(一般数据库)的绝对初学者,但在R 有相当好的工作经验。我有两个来自两个不同来源的印度脆弱地区的多面数据集——一个大约 12gb,它的格式是.gdb(我们称之为mygdb),另一个是大约 2gb 的 shapefile(我们称之为@ 987654327@)。我想比较两组漏洞图,并使用图之间的交集 (I)、差异 (D) 和并集 (U) 生成一些适合状态的度量。 我想利用PostGIS 功能(通过R),因为R(崩溃!)和qgis(太慢)对此都没有效率。首先,我已将两个数据集上传到我的 PostGIS 数据库中。我在R 中使用了ogr2ogr 来上传mygdb。但我有点卡在这一点上。我的想法是按状态拆分两个多边形文件,然后应用其他函数来获取 I、U 和 D。从我的搜索中,我想我可以使用 sf 函数,如 st_splitst_intersectst_differencest_union。但是,即使在拆分后,我想文件大小仍然太大而无法处理,所以我的问题是

  1. 我的方法是最好的前进方式吗?
  2. 如何在不将数据库中的数据导入 R 的情况下使用 sf::st_ 函数(例如 st_splitst_intersection

以前的相关问题有一些有用的答案,例如this one。但是我发现很难将来自不同链接的步骤放在一起,并且任何对虚拟示例的帮助都会很棒。非常感谢。

【问题讨论】:

  • 看起来您的数据是矢量数据。如果您已将其加载到安装了 postgis 的 postrgres,它们可能会被拆分为不同的表(点、线、多边形),其中有几行对应于特征。将它们逐部分加载到 R 进行比较应该没有问题。是的,sf() 库将是不错的选择。一般来说,st_ 函数对应 Postgis 中的ST_ 函数。
  • 谢谢。您介意提供一个示例代码,例如使用 st_intersection 而不在本地导入输入吗?

标签: r postgresql postgis sf


【解决方案1】:

也许您可以尝试将其加载为星星代理。它不会将文件加载到内存中,而是直接将其应用到硬盘驱动器。

https://r-spatial.github.io/stars/articles/stars2.html

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

不回答严格意义上的问题,但是为了响应评论中的请求,ST_Intersection 的 postgresql/postgis 查询示例。基于postgresql数据库中的OSM数据,使用osm2pgsql导入:

WITH 
  highway AS (
    select osm_id, way from planet_osm_line where osm_id = 332054927), 
  dln AS (
    select osm_id, way from planet_osm_polygon where "boundary" = 'administrative' 
    and "admin_level" = '4' and "ref" = 'DS')
SELECT ST_Intersection(dln.way, highway.way) FROM highway, dln

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多