如何将OpenLayers连接到PostGIS数据?


10

我已经在OpenLayers中阅读了如何在OpenLayers中加载KML,GeoJSON等矢量文件。但是如何连接到PostGIS数据。如果不是,为什么我应该将数据上传到PostGIS,而不是直接使用WebServices放置数据。我有什么想念的吗?

我想加载此矢量数据,以便可以通过单击要素来查看属性。我需要PostGIS,因为将来我想启用查询。我认为只有维护像PostGIS这样的数据库才有可能。但是如何使用OpenLayers?

我已经阅读了《 OpenLayers入门指南》,但是没有提到任何地方。请帮忙!!

Answers:


26

不幸的是,出于安全考虑,您无法将网页直接连接到数据库,通常您需要一些中间件才能将两者结合在一起。

因此,在您的示例中,如果您想使用开源软件,则可以轻松地将GeoServer用作地理服务器,以将数据从PostGIS数据库提供到OpenLayers HTML网页。

这样做的好处是,GeoServer将以标准方式(OGC Web地图服务器(WMS)或Web功能服务(WFS))来提供数据,而OpenLayers和许多其他API(ESRI,Leaflet等)和其他桌面都可以理解这两者GIS软件(ESRI,MapInfo,QGIS,uDig等)

因此,我将查看GeoServer文档入门,该文档将引导您逐步了解如何将GeoServer连接到PostGIS,然后提供数据。

http://docs.geoserver.org/stable/zh-CN/user/gettingstarted/index.html

如果您不熟悉这些类型的东西,那么没有比OpenGeo教程更好的起点了。

http://workshops.opengeo.org/

如果可以的话,我绝对会坚持将您的数据保存在PostGIS中

a)您有很多数据b)您想运行查询(像您一样),以及c)如果有很多人要使用您的应用程序

如果您要运行查询,我将查看Web处理服务(WPS),它们仍然是“新的”,但GeoServer支持这些功能。

但是,如果您的数据量很少并且可以预先运行查询,然后仅使用OpenLayers进行显示,则您应该坚持使用平面文件中的GeoJSON甚至查看TopoJSON,它已在D3 javascript库中广受欢迎-看到这里http://bost.ocks.org/mike/map/ Mike Bostock的教程很棒。

希望能有所帮助


14

连接两者的一种方法是使用GeoJSON。这是PostGIS数据库的示例查询:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

获得查询结果后,您可以执行以下操作:

       var geojson_format = new OpenLayers.Format.GeoJSON();
       var vector_layer = new OpenLayers.Layer.Vector(); 
       map.addLayer(vector_layer);
       vector_layer.addFeatures(geojson_format.read(featurecollection));

featurecollection您的PostGIS查询结果在哪里;

但请注意,如果您的GeoJSON非常复杂,则可能会出现加载/渲染问题。

有关此技术的更多信息,请参见此OpenLayers示例的源代码。


3

我在没有GeoServer的情况下将PostGis与Openlayers 3/4一起使用。我选择的方式是通过调用的函数从Postgis数据库中获取geojson,该函数将返回数据并根据我的设置设置其样式。

在Javascript中我定义了数据和造型=> JavaScript的功能,通过GET调用PHP脚本从POSTGIS =>功能风格retrive数据的数据中的OpenLayers 3.全sripts渲染中可以看到有一个简单的方法在Openlayers 3中使用Postgis-geojson?

似乎这种方法并不安全,因为可以操纵GET-Strings,但是我使用通过https进行的调用,并且服务器端php-script检查是否设置了SESSION。因此,如果没有bee登录,就无法执行脚本。我们在非常小的小组中使用此脚本,但是在许多人正在访问数据的环境中,这可能不是一个好方法。

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.