Làm cách nào để kết nối OpenLayers với dữ liệu PostGIS?


10

Tôi đã đọc trong OpenLayers cách tải các tệp vectơ KML, GeoJSON, v.v. trong OpenLayers. Nhưng làm thế nào tôi có thể kết nối với dữ liệu PostGIS. Nếu không, tại sao tôi nên tải dữ liệu của mình lên PostGIS sau đó thay vì trực tiếp đưa dữ liệu của mình bằng WebService. Tôi có thiếu thứ gì không?

Và tôi muốn tải dữ liệu vectơ này để người ta có thể thấy các thuộc tính bằng cách nhấp vào các tính năng. Tôi cần PostGIS vì trong tương lai tôi muốn kích hoạt truy vấn. Tôi nghĩ rằng nó chỉ có thể bằng cách duy trì một cơ sở dữ liệu như PostGIS. Nhưng làm thế nào để sử dụng OpenLayers?

Tôi đã đọc Hướng dẫn cho người mới bắt đầu OpenLayers, nhưng không nơi nào nó được đề cập. Hãy giúp tôi!!

Câu trả lời:


26

Thật không may, bạn không thể kết nối một trang web trực tiếp với cơ sở dữ liệu vì những lo ngại về bảo mật, thông thường bạn cần một số phần mềm trung gian để kết hợp cả hai lại với nhau.

Vì vậy, với ví dụ của bạn và nếu bạn muốn gắn bó với phần mềm Nguồn mở, bạn có thể dễ dàng sử dụng GeoServer làm máy chủ địa lý để phục vụ dữ liệu của bạn từ cơ sở dữ liệu PostGIS đến trang web HTML OpenLayers của bạn.

Tại sao điều này tốt là GeoServer sẽ phục vụ dữ liệu theo cách tiêu chuẩn, OGC Web Map Server (WMS) hoặc Web Feature Service (WFS) và cả hai đều được OpenLayers và nhiều API khác (ESRI, Leaflet, v.v.) hiểu Phần mềm GIS (ESRI, MapInfo, QGIS, uDig, v.v.)

Vì vậy, tôi sẽ xem xét tài liệu GeoServer bắt đầu hướng dẫn bạn cách kết nối GeoServer với PostGIS và sau đó phân phát dữ liệu.

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

Nếu bạn chưa quen với những loại điều này, không có nơi nào tốt hơn để bắt đầu hơn các hướng dẫn OpenGeo

http://workairs.opengeo.org/

Tôi chắc chắn sẽ gắn bó với dữ liệu của bạn trong PostGIS nếu

a) bạn có nhiều dữ liệu b) bạn muốn chạy truy vấn (giống như bạn) và c) nếu nhiều người sẽ sử dụng ứng dụng của bạn

Nếu bạn định chạy truy vấn, tôi sẽ xem Dịch vụ xử lý web (WPS), đây vẫn là "mới" nhưng chúng được hỗ trợ trong GeoServer.

Tuy nhiên, nếu bạn có một lượng dữ liệu nhỏ và có thể chạy trước các truy vấn và sau đó chỉ cần sử dụng OpenLayers để hiển thị thì bạn nên sử dụng GeoJSON từ một tệp phẳng hoặc thậm chí nhìn vào TopoJSON đang được phổ biến với thư viện javascript D3 - xem tại đây http://bost.ocks.org/mike/map/ Hướng dẫn của Mike Bostock là tuyệt vời.

Mong rằng sẽ giúp


14

Một cách để kết nối cả hai sẽ là với GeoJSON. Dưới đây là một truy vấn mẫu của cơ sở dữ liệu PostGIS:

SELECT population,ST_AsGeoJSON(geom) FROM censusblocks

Khi bạn nhận được kết quả truy vấn của mình, bạn có thể làm một cái gì đó như thế này:

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

featurecollectionKết quả truy vấn PostGIS của bạn ở đâu ;

Mặc dù vậy, hãy lưu ý rằng nếu GeoJSON của bạn rất phức tạp thì có thể có vấn đề tải / kết xuất.

Xem nguồn ví dụ OpenLayers này để biết thêm thông tin về kỹ thuật này


3

Tôi sử dụng PostGis cùng với Openlayers 3/4 mà không có GeoServer. Cách tôi chọn là lấy Geojson từ cơ sở dữ liệu Postgis thông qua chức năng tôi gọi, trả về dữ liệu và kiểu dáng theo cách cài đặt của tôi.

Trong Javascript, tôi xác định dữ liệu và kiểu dáng => Hàm Javascript gọi tập lệnh php thông qua GET để truy xuất dữ liệu từ Postgis => chức năng tạo kiểu dữ liệu để hiển thị trong Openlayers 3. Có thể thấy toàn bộ tập lệnh trong Có cách dễ dàng để sử dụng Postgis-Geojson trong Openlayers 3?

Có vẻ như cách này không an toàn, vì GET-String có thể bị thao túng, nhưng tôi sử dụng một cuộc gọi qua https và tập lệnh php-script bên máy chủ nếu SESSION được đặt. Vì vậy, các tập lệnh không thể được thực thi mà không đăng nhập. Chúng tôi sử dụng tập lệnh này trong một nhóm rất nhỏ, nhưng nó có thể không phải là một cách tốt trong một môi trường, nơi có nhiều người đang truy cập dữ liệu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.