Các tùy chọn để hiển thị các trình quét PostGIS trong OpenLayers


12

Câu hỏi này tương tự như câu hỏi trước đó về việc hiển thị dữ liệu vectơ trong bản đồ web. Tôi muốn có một giao diện web cơ bản sử dụng OpenLayers và có thể hiển thị dữ liệu raster hiện có trong PostGIS, sử dụng sơ đồ cơ sở như google. Tôi đã cài đặt PostGIS2.0 với thư viện raster và xem từ tài liệu có một số tùy chọn để xuất dữ liệu, chẳng hạn như JPEG, GeoTIFF và PNG. Là một định dạng đề nghị để sử dụng?

Để hiển thị dữ liệu vectơ, tôi hiện đang sử dụng javascript để gửi tọa độ từ trình duyệt của người dùng đến máy chủ của mình và sau đó thực hiện truy vấn bằng PHP / SQL trên PostGIS. Các kết quả sau đó được trả về dưới dạng GeoJSON có thể được phủ lên trên sơ đồ cơ sở. Tôi đã tự hỏi nếu một cách tiếp cận tương tự có thể được áp dụng bằng cách sử dụng raster nhưng tôi không biết định dạng raster nào là tốt nhất hoặc nếu có bất kỳ ràng buộc nào khác tôi nên xem xét.

Tôi đã thấy rất nhiều tài liệu tham khảo về GeoServer nhưng tôi không chắc liệu nó có cần thiết cho dự án này không (tôi không hoàn toàn chắc chắn khi nào nên sử dụng GeoServer hay không).

Câu trả lời:


13

Trình quét hình ảnh , vì vậy định dạng tốt nhất sẽ là định dạng hình ảnh (png / jpg / etc). Geojson là một định dạng tốt cho các vectơ . Bạn sẽ không bao giờ nhìn thấy, hình ảnh hồ sơ facebook của bạn sẽ được vận chuyển trở lại như json thuần túy. Tất nhiên, trả lại một url cho một hình ảnh như json là rất rất khác nhau :)

Theo như jpeg vs png so với bất kỳ cuộc thảo luận định dạng hình ảnh nào khác, có rất nhiều ý kiến ​​khác nhau về nó . Những gì nó sôi nổi là một số định dạng hình ảnh là lossless trong khi những định dạng khác là lossy . Quyết định của bạn phụ thuộc vào những gì bạn sẽ làm với dữ liệu. Để phân tích, bạn có thể không chịu đựng được sự mất mát, nhưng để hiển thị mọi thứ trên web, bạn sẽ làm.

PostGIS 2.0 có thể tạo hình ảnh không? Chắc chắn rồi. Nhìn vào phần đầu ra Raster.

Đây có phải là một ý tưởng tốt? Nó thực sự thực sự thực sự phụ thuộc vào những gì bạn đang làm. Đôi khi việc tạo hình ảnh có thể mất nhiều thời gian thực sự rất dài và bạn muốn lưu trữ chúng để tránh phải trả giá khi tạo chúng mỗi khi bạn yêu cầu chúng thông qua môi trường web. "Bộ nhớ đệm" duy nhất bạn có thể làm ở phía PostGIS là lưu kết quả vào một bảng khác và sau đó truy vấn bảng thay thế khi bạn cần. Geoserver có toàn bộ cơ sở hạ tầng ( GeoWebCache ) để thực hiện việc này.

Bạn cần geoserver, có lẽ không - nhưng nó làm cho cuộc sống dễ dàng hơn nhiều khi bạn có middleware này đó cho thấy nhiều tất cả các dữ liệu của bạn sử dụng các dịch vụ web OGC , làm bộ nhớ đệm , phong cách của vectơ và rasters điều cả một bó hơn .


Tôi hiểu cách tạo hình ảnh bằng PostGIS - điều tôi đang cố gắng hiểu là cách tốt nhất để tải nó vào Openlayers. Ví dụ: nếu tôi sử dụng ST_AsPNG () - tôi vẫn sẽ cần xác định tọa độ trên và dưới nơi hình ảnh này được định vị. Tôi nghĩ rằng có thể có một cách gọn gàng trả lại một hình ảnh độc lập mà tôi có thể tải trực tiếp vào các lớp mở (ngoài việc sử dụng máy chủ địa lý).
djq

Có, bạn có thể tải nó trực tiếp đến các trình mở từ st_aspng, nhưng nó sẽ yêu cầu thêm công việc. Sau đó, bạn phải theo dõi hộp thư và đặc biệt khi bạn tải nó dev.openlayers.org/apidocs/files/OpenLayers/Layer/Image-js.html Hãy tin tôi, đó là tuyến đường dài. Bạn nên để geoserver hoặc mapserver làm điều này. Họ trả lại cho bạn WMS / WMTS và bạn sử dụng hai dòng mã để thêm nó vào trình mở.
Ragi Yaser Burhum

4

Mapserver có hỗ trợ cho các trình raster postgis và hướng dẫn cho một thiết lập cơ bản được đưa ra ở đây (mục 9,9).

Trong trường hợp của bạn, bạn sẽ thiết lập Mapserver hoạt động như một máy chủ WMS để nó trả về các trình quét Postgis như các lớp WMS bình thường. Sau đó, việc thêm các lớp vào bản đồ OpenLayers của bạn bằng cách sử dụng một đối tượng lớp WMS là gần như không đáng kể .

Loại giải pháp này có lẽ là lựa chọn tốt nhất của bạn bởi vì tất cả đều dựa trên phần mềm OpenSource, đây là một ngăn xếp đã được chứng minh và không yêu cầu phần mềm trung gian mở rộng. Tất cả các nhu cầu của máy chủ bản đồ là một máy chủ web (apache mà bạn có thể đã sử dụng cho php là ok) có thể chạy các tập lệnh cgi. Nếu hiệu suất không phải là vấn đề quan trọng thì bạn có thể tránh sử dụng bộ đệm (ô vuông) và chỉ cần có máy chủ ánh xạ kết xuất các lớp một cách nhanh chóng.

Nếu bạn muốn lưu trữ các ô để giảm thiểu tải máy chủ và cải thiện thời gian phản hồi, hãy cân nhắc sử dụng mapcache hoặc tilecache . Mapcache là một dự án em gái của Mapserver, nhưng sẽ vượt trội hơn tất cả các bộ nhớ cache khác vì nó chạy như một mô-đun apache.

Đối với người dùng Ubuntu, cách dễ nhất để cài đặt các phụ thuộc của Mapserver là thêm Ubuntu GIS PPA vào hệ thống của bạn.


Mapserver chắc chắn là một sự thay thế tuyệt vời từ GeoServer (tôi sử dụng nó cho một số dự án khác). Nói chung, tôi chọn máy chủ địa lý cho khách hàng của mình vì nó có giao diện dễ sử dụng. Tuy nhiên, tôi muốn chỉ ra rằng việc phục vụ bộ đệm gạch đang phục vụ nội dung tĩnh và mọi giải pháp dựa trên nginx (hoặc bất kỳ máy chủ không chặn nào khác) sẽ nhanh hơn nhiều so với bất kỳ giải pháp apache nào - trong chế độ phân luồng hoặc xử lý theo luồng.
Ragi Yaser Burhum

Cảm ơn @unicoletti. Tôi có thể sử dụng Mapserver nếu tôi muốn tạo raster dựa trên truy vấn của người dùng không? Ví dụ: nếu tôi cho phép người dùng chỉ định bất kỳ khu vực nào (trong một ranh giới nhất định) thì nó có cho phép tôi thực hiện truy vấn không gian của khu vực đó không?
djq

@celenius Mapserver và GeoServer đều sẽ cho phép bạn làm điều đó.
Ragi Yaser Burhum

1
@RagiYaserBurhum Tôi so sánh mapcache với các bộ đệm khác. Gạch tĩnh không nghiêm túc nói một bộ đệm.
unicoletti

0

Tất cả phụ thuộc vào. Kích thước hình ảnh, bộ nhớ đệm, thư viện có sẵn (ví dụ một số trình điều khiển jp2k độc quyền).

Đây là một liên kết đến một pdf , Geoserver tuyệt vời trên steroid. Điều này sẽ đưa bạn qua các định dạng khác nhau, ưu và nhược điểm của chúng và một số thiết lập cơ bản.

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.