OpenLayers'ı PostGIS verilerine nasıl bağlarım?


10

OpenLayers OpenLayers KML, GeoJSON vb vektör dosyalarını yüklemek için nasıl okudum. Ancak PostGIS verilerine nasıl bağlanabilirim? Değilse, verilerimi doğrudan Web Hizmetleri kullanarak koymak yerine neden PostGIS'e yüklemeliyim. Bir şey mi kaçırıyorum?

Ve bu vektör verilerini yüklemek istiyorum, böylece özellikleri tıklatarak özellikleri görebiliyorsunuz. PostGIS'e ihtiyacım var çünkü gelecekte sorguları etkinleştirmek istiyorum. Bence bu sadece PostGIS gibi bir veritabanını koruyarak mümkün. Peki OpenLayers nasıl kullanılır?

OpenLayers Başlangıç ​​Kılavuzu'nu okudum, ancak hiçbir yerde bahsedilmedi. Lütfen yardım et!!

Yanıtlar:


26

Ne yazık ki, güvenlik endişeleri nedeniyle bir web sayfasını doğrudan veritabanına bağlayamazsınız, normalde ikisine birlikte katılmak için bazı ara katman yazılımlarına ihtiyacınız vardır.

Örneğiniz için ve Açık Kaynak yazılımına bağlı kalmak istiyorsanız, verilerinizi PostGIS veritabanınızdan OpenLayers HTML web sayfanıza sunmak için GeoServer'ı coğrafi sunucunuz olarak kolayca kullanabilirsiniz.

Neden bu kadar iyi GeoServer, verileri standart bir şekilde sunacak, OGC Web Harita Sunucusu (WMS) veya Web Özellik Hizmeti (WFS) ve her ikisi de OpenLayers ve diğer birçok API (ESRI olanlar, Broşür vb.) Ve diğer Masaüstü Bilgisayarlar tarafından anlaşılıyor. CBS yazılımı (ESRI, MapInfo, QGIS, uDig vb.)

Bu yüzden GeoServer'ı PostGIS'e nasıl bağlayacağınız ve daha sonra verileri sunacağınız konusunda sizi yönlendiren GeoServer belgelerine başlayacağım.

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

Bu tür şeyler için yeniyseniz, başlamak için OpenGeo öğreticilerinden daha iyi bir yer yoktur.

http://workshops.opengeo.org/

Kesinlikle verilerinizin PostGIS'te olmasına bağlı kalacağım

a) çok fazla veriniz var b) sorguları (istediğiniz gibi) çalıştırmak istiyorsunuz ve c) çok sayıda kullanıcı uygulamanızı kullanacaksa

Sorguları çalıştıracaksanız, Web İşleme Hizmetleri'ne (WPS) bakarsınız, bunlar hala "yeni" dir, ancak bunlar GeoServer'da desteklenir.

Bununla birlikte, az miktarda veriye sahipseniz ve sorguları önceden çalıştırabilir ve sonra görüntülemek için OpenLayers'ı kullanabilirsiniz, o zaman GeoJSON'u düz bir dosyadan kullanmaya devam etmeli veya hatta D3 javascript kütüphanesi ile popülerlik kazanan TopoJSON'a bakmalısınız - buraya bakın http://bost.ocks.org/mike/map/ Mike Bostock'un öğreticisi harika.

umarım yardımcı olur


14

Bu ikisini bağlamanın bir yolu GeoJSON'dur. PostGIS veritabanının örnek bir sorgusu:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Sorgu sonuçlarınızı aldıktan sonra böyle bir şey yapabilirsiniz:

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

featurecollectionPostGIS sorgu sonucunuz nerede ;

Yine de GeoJSON'unuz çok karmaşıksa yükleme / oluşturma sorunları olabileceğini unutmayın.

Bu teknik hakkında daha fazla bilgi için bu OpenLayers örneğinin kaynağına bakın


3

GeoServer olmadan PostGis'i Openlayers 3/4 ile birlikte kullanıyorum. Seçtiğim yol, aradığım bir işlev aracılığıyla bir Postgis veritabanından geojson'u almaktır, bu da ayarlarıma göre verileri ve stilleri döndürür.

Javascript veri tanımlamak ve = = Javascript-fonksiyonu Postgis => fonksiyon stilleri verileri Openlayers 3 render verileri almak için GET üzerinden bir php-script çağırır . 3'de Postgis-geojson kullanılır?

GET-Dizeleri manipüle edilebilir, çünkü bu şekilde güvenli değil gibi görünüyor, ama ben https üzerinden bir çağrı kullanın ve serverside php-script bir OTURUM ayarlanmış olup olmadığını denetler. Yani betikler oturum açmadan çalıştırılamaz. Bunu çok küçük bir grupta kullanıyoruz, ancak pek çok kişinin verilere eriştiği bir ortamda iyi bir yol olmayabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.