如何管理具有不同投影的PostGIS Raster数据?


10

我需要存储和管理考古地球物理数据,这些数据以矩形样本阵列(栅格图像)的形式收集。

  • 每个栅格通常将进行20x20或30x30浮点采样,通常以1m的间隔采样。
  • 调查将在给定位置包含一个或多个这些图像。
  • 有可能在不同的国家或地区使用不同的预测进行两次不同的调查,但是每项调查将使用一个且仅一个预测。
  • 永远不会一起查看它们,每个调查通常都会独立进行。
  • 只能通过自定义的前端访问数据,因此不会有用户通过它psql或类似方法直接控制它。
  • 每个样本都需要在收集时进行存储,因此我无法将其重新投影到常见的CRS(例如Web Mercator)中,因为一个样本最终可能会覆盖比原始投影更大或更小的区域,因此需要进行分析在数据上。

如何最好地将数据存储在PostGIS Raster数据库中?我提出的选择是:

  1. 忽略SRID约束并将所有数据存储在一个表中,编写我的前端代码来以一致的方式处理数据。
  2. 将所有数据存储在一个表中,并将SRID约束重写为SRID和测量ID的组合。
  3. 通过表继承,为每个新的SRID创建一个新表。
  4. 通过表继承,为每个调查创建一个新表。

1和2破坏了PostGIS的一些不错的自动化部分,但是将它们隐藏在前端代码中。但是查询可能需要更长的时间。

3和4可能会导致表格爆炸,从而使管理FK约束等工作变得更加困难。

实际上,每个调查的栅格数量在1到100甚至更多之间,调查的数量很可能会达到数百个。但是,不同预测的数量很可能仍然很低,这有利于3。

Answers:


7

我给了您一个问题一个想法,并最终得出结论,我会将每个调查存储到自己的数据库中

注意:数据库是指按照此处给出的postgres术语单个postgres数据库集群中创建的数据库,而不是具有自己的用户,template1等的完全独立的postgres进程。

尽管这听起来有些过头,但实际上它具有以下优点:

  • 可管理性:每个调查只有一个带有栅格的栅格表,它使您可以尽可能遵守Postgis的数据管理标准(即:不打乱raster_columns表或FK或约束。所有postgis函数仍按预期运行)

  • 简单性:只要您采用并实施一个一致的命名策略,例如:以srvy_ name调用每个数据库 ,然后为所有栅格表和列重用相同的名称(即Surveydata)。如果您如此热衷(我知道我会;-),您还可以向每个数据库添加一个元数据表,以描述该数据库中存储的数据类型,上次更新时间等。使用这种一致的命名来编写脚本/查询数据库结构将很容易(也很愉快)。

  • 只要每个调查使用自己的标准,它就可以按照您的要求工作

  • 可扩展性:之所以能够扩展,是因为您可以将数据库(通过在不同的表空间上分配数据库)移动到不同的轴(或磁盘,池,lun,取决于存储供应商)上,以便可以并行化I / O。将表从同一数据库移出到不同磁盘会更加困难

  • 安全性:您可以通过利用数据库安全性(作为应用程序上方的附加层)为不同的调查授予不同的权限

  • 已测试:有报告称postgres在单个实例上处理数千个数据库,请参阅作为参考

  • [这必须进行测试,我知道它适用于几何体,不适合栅格]您仍然可以通过创建如下视图来一次查询(并变换)所有栅格:

create or replace view v_all_surveys_as_wgs84 as select ST_Transform(raster, 4326) as raster_wgs84 from srvy_number1.rasterdata union all select ST_Transform(raster, 4326) as raster_wgs84 from srvy_number2.rasterdata [...]

一个可能的反对意见是此设置很复杂,但我会反驳说,一旦建立了第一个数据库,它就非常容易复制,如果适当的命名策略到位,则可以通过脚本对其进行完全管理。


谢谢unicoletti,我非常喜欢这个主意!我可能要做的是将每个调查放在单独的模式中而不是每个数据库中,因为最终的计划是让不同的客户将他们的调查存储在中央服务器上,因此我可以为每个客户建立一个单独的数据库。但是,无论哪种方式,它肯定都比不上列约束!我不确定数据库数量是否有实际限制,但是它仅受文件系统限制的限制。
MerseyViking 2011年

谢谢!我的意思是数据库=模式而不是数据库=实例。这些条款有些歧义,我将澄清答案。
unicoletti

我还添加了有关使用表空间将数据分区到不同磁盘上的提示。
unicoletti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.