如何为PostGIS数据库创建一个简单的前端?


21

我的组织收集了许多环境监测数据(物流,水化学等),其中大多数当前存储在Excel中。我想将所有内容都放入数据库(可能是PostGIS)中,但是我需要不了解数据库基础原理(没有SQL或类似语言)的人们可以访问这些数据。

我想为我的数据库提供某种简单的前端,用户可以在其中选择感兴趣的监测站,变量类型(例如,硝酸盐浓度)和时间间隔。然后,数据库将以csv格式返回请求的数据,用户可以将其下载到他们的计算机。在理想的情况下,前端将显示所有监控站的可单击地图,但是如果比较容易,则可以从可用站点的下拉列表开始。我想这个前端可能是一个网站,但不一定如此。

请问这有多困难,我有什么选择?我无论如何都不是数据库专家,但是我在Desktop GIS方面有扎实的背景,并且我很高兴编写简单的Python脚本并使用PostGIS,SpatiaLite和ESRI Personal地理数据库。我从未做过任何Web开发或Web GIS,但我渴望学习。

昨天我花了一部分时间探索一些出色的OpenGeo教程。这种方法看起来很有希望,至少现在我可以看到如何将数据显示在网站上。对我而言,最不明显的是我如何让用户查询数据库并获得结果。

我的问题:对于这样的项目,我应该考虑什么样的软件结构?例如

PostGIS + GeoServer + Something else?

我应该研究哪些其他选择?

一开始会首选一个简单但实​​用的解决方案:如果我可以组装一个基本原型,则可以用它来证明花更多的时间学习如何“正确”做事是合理的。开源也是一项要求,因为在没有证明自己有任何好处之前,我没有任何预算。

非常感谢!


2
如果省略了地图,则只需使用Apache和PHP即可完成所有这些工作。您只需要为PHP脚本创建一个输入表单即可从PostGIS获取数据。(您可以用Python代替PHP。)...但是,这对于GIS.SE来说不是问题
Underdark

非常感谢所有回复的人!这些都是有用的答案,您已经给我很多东西可以跟进。我想“接受”所有这些,但是我已经将@canisrufus的要点给予了支持,因为我发现他的最后一段非常有用,而且以前也没有遇到过web.py。GeoDango看起来也很棒。干杯!
JamesS 2011年

@jamesS我打算扩大我的最后一段,但是似乎没有正当理由。如果您有任何疑问,或者想要更长的关于如何设置的独白,可以在这里与我聊天。
canisrufus 2011年

@JamesS在这方面有什么进展吗?工作在同一托皮斯,我刚开始开发Django项目
卢卡Moiana

嗨@Luca Moiana 作为原型,我使用web.py,Apache和PostGIS遵循了下面接受的答案中的建议(但我的网站最后没有包含地图)。几年后,我们采用了CUAHSI水文信息系统,这很棒。它需要一些设置,但是提供了用于存储,搜索,探索,分析和可视化环境数据的多种工具。
JamesS 2015年

Answers:


13

如果您已经了解Python和SQL的使用方法,那么使用python网络框架构建网站就不会太困难。我想到了两个简单的-cherry.py和web.py。我认为,学习围绕Django对象关系映射器的方法可能比它值得的工作更多。

Python有一个名为psycopg2的库(http://initd.org/psycopg/,以及一个教程:http : //wiki.postgresql.org/wiki/Psycopg2_Tutorial),可让您轻松地对PostGRESQL / PostGIS运行查询。它还有一个CSV模块(http://docs.python.org/library/csv.html),通过该查询可以轻松创建CSV。

正如其他人所说,在前端创建地图会增加大量的复杂性。您将需要诸如OpenLayers之类的东西来显示地图,并需要诸如MapServer或GeoServer之类的东西来从数据库(或其他数据源)创建地图图像。第二步可能会更好。

目前,“所有”似乎只需要一个网页:一种可以让您选择所需查询参数的表单。他们单击“提交”,将查询参数发送到服务器(Apache是​​一个不错的选择),然后服务器运行您的脚本,该脚本查询数据库,创建适当的CSV文件并将其返回到浏览器。像py一样容易;)


2
您不需要MapServer / GeoServer来创建图像。您可以直接从PostGIS获取数据,并将其作为矢量数据显示在地图上。但是,根据数据的复杂性,您可能要传输大量数据。这取决于实际情况。同样,将它们显示为矢量数据使您可以选择单击对象以显示/编辑其数据。
Mr_Chimp

@mr_chimp哦,这很重要。我一直关心的是背景层,但是人们只能使用Google Maps或OSM等。实际上,我倾向于认为矢量层通常是一个更好的解决方案(对于用户),但是正如您指出的那样,它存在局限性。当然,最简单的传递矢量的方法是让MapServer或GeoServer这样的矢量提供矢量;)
canisrufus 2011年

与往常一样,这是为作业使用正确工具的一种情况。由于JamesS已经拥有PostGIS数据库,因此他也可以直接从那里获取数据。除非我忘记了什么,否则设置MapServer /其他都只是一个额外的步骤(尽管通常当然这是最快的方法)。
Mr_Chimp

8

地理Django

它非常容易设置,并具有一些基本功能。它是Python,所以至少您对这种语言很熟悉。对于您的需求而言,这可能是过分的。但是,如果您想扩展站点,则可以使用成熟的框架进行构建。


5

如果您不想/不需要创建地图。您需要的只是Web服务器和编程语言(我更喜欢Apache,因为它易于使用和设置,但是还有其他选择),然后是带有PostGIS或其他数据库的Postgres。

如果您的excel文件格式正确,则将数据导入数据库应该很简单。您可以编写一个可以生成INSERT语句的脚本。您描述的查询听起来也很容易管理。

如果/当您要执行映射部分时,Apache,GeoServer和OpenLayers将是一个简单且免费的解决方案。GeoServer(如您所知)可以轻松地将PostGIS用于WMS或其他输出格式。您要做的就是添加连接到PostGIS的商店,然后从PostGIS中的表中添加图层。

您可以查看的其他免费映射工具是Mapserver和MapGuide。MapGuide Open Source做一些很酷的事情,但是它更加复杂,并且文档稍有落后。

MySQL还具有Spatial扩展,但没有PostGIS拥有的许多空间特征和功能。

如果您熟悉python,我会看看GeoDjango ...我个人对此并不了解,但我听说过


4

在我最近的计算机科学硕士学位中,您可以找到Web地图应用程序设计和开发问题的概述,以及基于Google Maps和时空数据库PostgreSQL / PostGIS的环境Web地图应用程序的完整文档化源代码,以及:设计和原型解决使用开源技术的时空环境矢量数据管理,分析和交付的发展总框架和案例研究的重点是地下水管理的沿海地区

可以从http://www.giscience.it/it/pdf/DissertationMscComputerScience_CrestazEzio_Supervisors.pdf下载该论文

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.