TL;DR:我不认为有一个开箱即用的解决方案(使用collective.geo.*
)已经做到了这一点。
正如评论中提到的,Plone 本身根本不处理地理空间数据,它就是collective.geo.geographer
这样做的。更具体地说,它将对象的GeoreferencingAnnotator
坐标保存IGeoreferenceable
到它们的注释中(并从那里加载它们)。
因此,仅强制 Plone 将其内容存储在关系数据库中,例如使用RelStorage
不会帮助您 - Plone 或 RelStorage 不了解地理空间数据,并且会像其他任何注释一样存储这些注释。
但是,编写自己的适配器将地理配准数据写入 PostGIS 数据库而不是注释,使用上下文的UUID将数据链接到对象,并可能存储一些额外的元数据,如标题或网址。此地理配准数据可以与您的实际内容完全分开 - 无需将所有 Plone 内容放入 PostgreSQL 数据库中。IWriteGeoreferenced
另一种方法可能是为 编写事件处理程序ObjectGeoreferencedEvent
,并将地理配准数据发布到 PostGIS DB(除了将其存储在实际对象的注释中)。由于您只想从桌面 GIS 以只读方式访问它,因此您不必担心双向同步该数据。
最后但并非最不重要的一点是,我强烈建议查看collective.geo
邮件列表- 那里的人通常反应迅速且乐于助人,我可以想象其他人已经有相同的用例。