Como conectar o OpenLayers aos dados PostGIS?

10

Eu li no OpenLayers como carregar arquivos vetoriais KML, GeoJSON etc. no OpenLayers. Mas como posso me conectar aos dados PostGIS. Caso contrário, por que devo enviar meus dados para o PostGIS e não colocá-los diretamente usando WebServices? Estou faltando alguma coisa?

E eu quero carregar esses dados vetoriais para que você possa ver os atributos clicando nos recursos. Preciso do PostGIS porque, no futuro, quero ativar as consultas. Eu acho que só é possível mantendo um banco de dados como o PostGIS. Mas como usar o OpenLayers?

Eu li o OpenLayers Beginner's Guide, mas em nenhum lugar é mencionado. Por favor ajude!!

GP92
fonte

Respostas:

26

Infelizmente, você não pode conectar uma página da web diretamente a um banco de dados por questões de segurança; normalmente, você precisa de um middleware para unir os dois.

Portanto, para o seu exemplo e se você preferir o software de código aberto, poderá usar facilmente o GeoServer como servidor geográfico para servir seus dados do banco de dados PostGIS para a página HTML do OpenLayers.

Por que isso é bom é que o GeoServer servirá os dados de maneira padrão, o OGC Web Map Server (WMS) ou o Web Feature Service (WFS) e ambos são entendidos pelo OpenLayers e muitas outras APIs (ESRI, Leaflet etc.) e outros computadores Software GIS (ESRI, MapInfo, QGIS, uDig etc)

Então, eu observaria a documentação do GeoServer, que mostra como conectar o GeoServer ao PostGIS e depois fornecer os dados.

http://docs.geoserver.org/stable/en/user/gettingstarted/index.html

Se você é novo nesse tipo de coisa, não há melhor lugar para começar do que os tutoriais do OpenGeo

http://workshops.opengeo.org/

Eu definitivamente ficaria com seus dados no PostGIS se

a) você tem muitos dados b) deseja executar consultas (como você faz) ec) se muitas pessoas vão usar seu aplicativo

Se você deseja executar consultas, eu consultaria o Web Processing Services (WPS), estes ainda são "novos", mas são suportados no GeoServer.

No entanto, se você possui uma pequena quantidade de dados e pode executar as consultas previamente e usar o OpenLayers para exibir, você deve usar o GeoJSON a partir de um arquivo simples ou até mesmo o TopoJSON, que está ganhando muita popularidade com a biblioteca javascript D3 - veja aqui http://bost.ocks.org/mike/map/ O tutorial de Mike Bostock é ótimo.

espero que ajude

tjmgis
fonte
14

Uma maneira de conectar os dois seria com o GeoJSON. Aqui está um exemplo de consulta de um banco de dados PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Depois de obter os resultados da consulta, você pode fazer algo assim:

       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));

Onde featurecollectionestá o resultado da sua consulta PostGIS;

No entanto, esteja ciente de que, se o seu GeoJSON for muito complexo, poderá haver problemas de carregamento / renderização.

Veja a fonte deste exemplo do OpenLayers para obter mais informações sobre esta técnica

Taylor H.
fonte
3

Eu uso PostGis junto com Openlayers 3/4 sem GeoServer. A maneira que escolho é obter o geojson a partir de um banco de dados Postgis por meio de uma função que chamo, que retorna os dados e estilos de acordo com minhas configurações.

Em Javascript, eu defino os dados e o estilo = = A função Javascript chama um script php via GET para recuperar dados do Postgis => estilos da função que os dados serão renderizados no Openlayers 3. Todos os sripts podem ser vistos em Existe uma maneira fácil de usar Postgis-geojson em Openlayers 3?

Parece que esse caminho não é seguro, porque GET-Strings poderia ser manipulado, mas eu uso uma chamada via https e o php-script do lado do servidor verifica se uma SESSION está configurada. Portanto, os scripts não podem ser executados sem estar logado. Usamos isso em um grupo muito pequeno, mas pode não ser uma boa maneira em um ambiente onde muitas pessoas estão acessando os dados.

geom
fonte