Ưu điểm của WFS so với GeoJSON / KML?


8

Tôi đang lên kế hoạch tạo một bản đồ trực tuyến với các lớp mở (2 hoặc 3) hoặc tờ rơi. Tôi phải hiển thị một số điểm / điểm đánh dấu (~ 30.000), đa giác (~ 500) và các dòng trên đầu bản đồ OSM trong một số lớp. Các điểm và đa giác đó phải chứa dữ liệu meta (ít nhất là ID) để hiển thị thông tin bổ sung của người dùng về chuột, nhấp hoặc chạm vào các sự kiện. Bây giờ tôi đang tìm cách tốt nhất để gửi dữ liệu đó đến máy khách. Toàn bộ khu vực, nơi các tính năng này được đặt, được chia thành nhiều phần và hầu hết thời gian, người dùng đang làm việc trong một phần (đọc thông tin - viết là một trường hợp rất hiếm, sẽ không được thực hiện ngay bây giờ). Nhưng các phần này được đặt cạnh nhau và hầu hết thời gian có thể nhìn thấy ít nhất 3 phần. Ngoài ra, các điểm có thể được nhóm hoặc ẩn ở mức thu phóng cao hơn.

Tôi đã nghe nói về WFS, nhưng tôi không thể thấy những lợi thế so với GeoJSON hoặc KML. Có thể chỉ cần truy xuất các tính năng trong hộp giới hạn của chế độ xem hiện tại với WFS không? Chúng tôi đã có cơ sở dữ liệu MSSQL và dịch vụ web giữa cơ sở dữ liệu và ứng dụng web và nếu nó không thực sự có lợi thế, chúng tôi không muốn thiết lập GeoServer và Postgres DB. Ngoài ra, sẽ không có vấn đề gì khi nói với dịch vụ web: Cung cấp cho tôi tất cả các tính năng của lớp L giữa X1, Y1 và X2, Y2 (như GeoJSON, KML hoặc bất cứ điều gì). Những lợi thế của WFS là gì? Con đường nào, bạn sẽ đi hay những thông tin nào liên quan đến quyết định này?


3
Bạn sẽ gặp vấn đề khi hiển thị các tính năng 30k trên bản đồ. Tôi nhận được vấn đề hiệu suất khoảng 1k. Bạn sẽ cần phải sử dụng một chiến lược cụm hoặc một cái gì đó khác.
CaptDragon

Đúng. Và tất nhiên tính năng 30k cũng vô dụng đối với người dùng.
stofl

What are the advantages of WFS?đó là một giao diện (dịch vụ) tiêu chuẩn có thể cung cấp cho bạn all features of layer L between X1,Y1 and X2,Y2 (as GeoJSON, KML or whatever).
nmtoken

Câu trả lời:


8

Hãy nhớ rằng WFS đã là một dịch vụ trả về định dạng dữ liệu của nó (hỗn hợp các tiêu chuẩn OGC). GeoJSON và KML chỉ là một định dạng dữ liệu, bạn sẽ phải xây dựng dịch vụ để trả về dữ liệu.

Vì vậy, đi kèm với WFS là các khả năng lọc nâng cao như bộ lọc tạm thời, bộ lọc không gian (giao nhau, chạm, chồng chéo ...) cũng như các toán tử so sánh và logic ... và bật và tắt. Có, bạn có thể chỉ định tải lại kết quả cho BBox cũng như người dùng điều hướng bản đồ. Đây là tất cả ra khỏi hộp . Sau đó, đây là một tiêu chuẩn được sử dụng rộng rãi mà nhiều máy chủ, máy khách và ứng dụng có thể đọc bằng cách cho phép chúng tự động truy vấn dữ liệu này như đã nói.

Vì vậy, câu hỏi bạn nên tự hỏi mình là bạn có muốn tiết lộ dữ liệu này cho các khách hàng, ứng dụng và máy chủ khác không? Dịch vụ "Cung cấp cho tôi tất cả các tính năng của lớp L giữa X1, Y1 và X2, Y2" của bạn có đủ không? Đó là tất cả những gì bạn cần? Nếu đó là tất cả những gì bạn cần thì không có lý do gì để đi với WFS. Tùy chọn GeoJSON hoặc KML có thể sẽ nhanh hơn mà không cần tất cả chi phí. Nhưng nếu bạn muốn thực hiện lọc nâng cao theo kiểu SOA trong tương lai, WFS là cách để đi.


Cảm ơn bạn. Sẽ không còn khách hàng, ứng dụng và máy chủ. Và "Hãy cho tôi tất cả .." sẽ đủ miễn là tôi có thể truy cập dữ liệu từ JavaScript để có thể sửa đổi nó (thay đổi biểu tượng nếu trạng thái của một tính năng thay đổi, làm nổi bật các tính năng được chọn, ... )
stofl

5

Trước hết, tôi khuyên bạn nên đọc thông số kỹ thuật . Điểm chuyên nghiệp lớn nhất của WFS là đây là cách chính thức và được chuẩn hóa để truy cập dữ liệu vectơ. Điều đó có nghĩa là khi bạn sử dụng WFS, bạn không phải phát minh lại bánh xe (ví dụ: điều gì sẽ xảy ra khi hai người chỉnh sửa cùng một tính năng?). Việc chia sẻ dữ liệu qua WFS cũng dễ dàng hơn nhiều so với sử dụng GeoJSON hoặc KML (một lần nữa, bạn không phải viết một hàm trả về dữ liệu mà người dùng yêu cầu vì nó đã là một phần của thông số WFS).

Nếu bạn sắp phục vụ các lớp để truy cập chỉ đọc, tại sao bạn không dùng WMS? Nó sẽ hoàn toàn OK cho mục đích của bạn.

Nếu bạn có thêm bất kỳ câu hỏi nào, vui lòng hỏi, tôi đang ở giữa quyết định vấn đề nan giải này và tôi luôn cảm thấy dễ chịu khi đọc ý kiến ​​của người khác.


Chúng tôi đã có một máy khách windows với bản đồ và nhiều thao tác đã được thực hiện trong các thủ tục được lưu trữ trong cơ sở dữ liệu. "WMS": Tôi sẽ cần truy cập các tính năng bằng JavaScript sau (thay đổi biểu tượng tùy thuộc vào trạng thái, tô sáng). Điều đó sẽ làm việc với một lớp vector WMS?
stofl

2
Hãy nhớ rằng, WMS KHÔNG phải là một lớp vectơ. Nó lưu trữ hình ảnh raster tĩnh mà một khi đã tải không thể thay đổi. Những gì bạn có thể làm là yêu cầu lại hình ảnh khi nhấp vào nút hoặc hộp kiểm thay đổi sự kiện và tải chúng với một phong cách khác.
Michal Zimmermann

WMS có thể trả về hình ảnh SVG. Đó sẽ là một lớp vector trong mắt tôi. Và những hình ảnh SVG này có thể truy cập và chỉnh sửa được, tất nhiên - nhưng tôi chỉ nghi ngờ ở mức độ rất thấp ...
stofl

4

WFS cung cấp cho khách hàng của bạn (OpenLayers) tùy chọn để thực hiện các cuộc gọi của mình bằng các Chiến lược khác nhau cho các Cuộc gọi WFS:

BBOX: reads new features when the viewport invalidates some bounds.
Cluster: for vector feature clustering.
Filter: for limiting features that get added to a layer by evaluating a filter.  The strategy maintains a cache of all features until removeFeatures is called on the layer
Fixed: requests features once and never requests new data
Paging: vector feature paging
Refresh: refreshes the layer.  By default the strategy waits for a call to refresh before refreshing.  By configuring the strategy with the interval option, refreshing can take place automatically
Save: commits newly created or modified features.  By default the strategy waits for a call to save before persisting changes.  By configuring the strategy with the auto option, changes can be saved automatically

Chiến lược BBOX thường được sử dụng. Lớp Vector sẽ chỉ yêu cầu các tính năng từ WFS trong chế độ xem và khi chế độ xem được thay đổi, các tính năng bổ sung sẽ được tự động tải trong suốt.

Như CaptDragon đã nói và tôi đã đề cập trong câu hỏi trước đây của bạn, số lượng các tính năng sẽ giết chết OpenLayers, rất có thể, hoặc làm cho trải nghiệm người dùng không thể đo lường được.

Bạn có thể nhét dữ liệu của mình vào cơ sở dữ liệu MSSQL, sau đó viết thói quen Phía máy chủ để trả lại dữ liệu qua các cuộc gọi Ajax và tự cập nhật các lớp. Khách hàng của bạn cung cấp các giới hạn Viewport trong Cuộc gọi Ajax. Cơ sở dữ liệu phải được nhận thức không gian để làm việc này.

WMS sẽ tạo các ô từ cùng một nguồn dữ liệu. Ưu điểm là triển khai rất nhanh, kiểu dáng phía máy chủ và không tải dữ liệu xuống máy khách để hiển thị, ngoại trừ các ô xếp. Bạn cũng có thể sử dụng WFS với WMS để nhận thông tin tính năng khi người dùng nhấp vào một điểm.

Cũng có thể phục vụ dữ liệu từ tệp hình dạng thay vì cơ sở dữ liệu trong tất cả các kịch bản này.


Bạn có thể giải thích ngắn gọn cho tôi, "sử dụng WFS với WMS" sẽ diễn ra như thế nào không? Các ô được trả về bởi WMS sẽ nhận thức được các điểm hoặc lợi ích của việc sử dụng WMS ở đây là gì?
stofl

Bạn thực sự cần phải ngồi xuống và xem qua tất cả các ví dụ về OpenLayers để bạn hiểu những gì nó có thể làm. Cụ thể, WFS Demo tại đây!
Mark Cupitt

Tôi đã thấy ví dụ đó và ngay bây giờ tôi đã nhìn sâu hơn vào nó. Điều duy nhất, điều khiển WFS OpenLayers sử dụng WMS trong bản demo đó là, để lấy URL từ lớp WMS. Vì vậy, tôi vẫn không thể thấy lợi ích của WMS ở đây.
stofl
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.