开源Python / PostGIS原型的最佳设计


9

我正在编写通过apache交付的数据密集型Web应用程序。我的问题是考虑到存在多个选项,如何最好地安排处理。

我可以使用OpenLayers / JQuery / Javascript,PostGIS / Postgresql(带有pgsql),python / psycopg2,php。

该数据库包含约300万行,原型当前运行如下:

  • 用户在OpenLayers窗口上单击一个点

  • 坐标作为AJAX请求发送到服务器上的python函数

  • 目前,我的应用程序是无状态的

  • Python的psycopg2用于调用pgsql存储过程,并且将较大的WKT值集(和数据字段)返回给python模块

  • 数据字段用于按以下方式对python中的WKT记录进行分类:所有WKT值均分为5组之一。实际修改了大约1%的WKT值。

  • WKT的五个集合/组被缓冲以创建五个不同的多边形。我目前在数据库中调用存储过程来执行此操作。反过来,这仅使用ST_BUFFER。(我已经考虑过使用Shapely,但由于在两种情况下都使用GEOS库,因此不确定会带来性能优势。)

  • 最后,将5个WKT文本值包装在JSON字符串中,然后发送回OpenLayers以呈现为五层。

我发现瓶颈是初始空间搜索和最终缓冲阶段。

我想问题是:

有没有更好的方式安排东西?例如,是否所有数据处理都应在PostgreSQL中完成(例如,使用游标),这在维护和性能方面是否是一件好事?使用切片服务器来避免将较长的WKT字符串传递到Web客户端会更好吗?您将如何解决?


缓冲区是否总是相同的距离或基于用户输入?您是否对从python或原始表提交的数据进行缓冲的存储过程?了解您要实现的目标也很有用。
马修·斯内普

马修-我正在尝试创建行驶时间多边形。我对凹面多边形有所了解,但想以此方式进行尝试,主要是为了提高准确性。多边形是MultiLinestrings(即道路)的200m缓冲区。我目前正在考虑预先缓冲数据库中所有道路的想法,但是我仍然需要合并它们。\ n#
John Steedman

更笼统地说,我希望采用一种架构,该架构能够在快速响应的Web用户界面与相当密集的地理处理之间取得平衡:当然不如Google快,但可以按当今用户的期望来识别!这是针对一些高级用户的。
约翰·斯蒂德曼

Answers:


3

缓冲瓶颈

使用ST_Buffer时,可以通过添加较低的num_seg_quarter_circle选项来降低生成形状的复杂性。这应该减少缓冲时以及后续操作中的处理量。

从PostGIS文档中:

在此处输入图片说明

通常,如果对现有的正确索引的表运行查询,则在PostGIS中可以获得更好的性能。这使您可以轻松访问多种优化(例如群集)。考虑单独处理变化的1%,然后将两者合并。


2

对于所有Web映射应用程序,您根本不需要考虑体系结构,您希望提前进行尽可能多的处理。这意味着,如果可以的话,应该预先计算缓冲区,所有数据都应该在输出SRS中,依此类推。显然,某些数据和计算需要动态进行。

我建议,除Python外,您还应查看MapServer和Geoserver进行计算并产生输出。它们都可以产生图像图块或GeoJSON输出。这两个应用程序都可以将PostGIS用作后端。


谢谢大卫。这听起来像是一个好政策,我一直在朝自己走去。我将研究GeoServer中的图像图块。我过去使用过python / mapnik。
约翰·斯蒂德曼

我刚刚发现的另一件事是,通过存储过程返回行非常(非常非常)缓慢。
约翰·斯蒂德曼
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.