Tôi có thể tạo kiểu tùy chỉnh trên GeoServer không


8

Tôi muốn sử dụng máy chủ GeoServer WMS để tạo kiểu tùy chỉnh. Giả sử tôi có một khu vực là đa giác trong một shapefile, nhưng tôi không có nhiệt độ của khu vực này như một thuộc tính. Từ một dịch vụ web, tôi thu thập các điểm nhiệt độ trong khu vực đó. Bây giờ tôi muốn GeoServer tô màu khu vực này theo các điểm nhiệt độ động này.

Đây là một ví dụ:

Bản đồ nhiệt độ

Nếu có thể, tôi thậm chí muốn đặt các đường viền này lên hình ảnh và một số giải thích về màu sắc ở phía bên phải. Làm cách nào tôi có thể gửi các điểm nhiệt độ này đến WMS GeoServer. Và tôi có thể thực hiện một số màu tùy chỉnh theo các thông số động này không?

Tôi không biết làm thế nào để chuyển đổi các dữ liệu điểm này thành màu khu vực.

Câu hỏi tiếp theo của tôi là tương tự nhưng không có điểm, tôi có thể tô màu một đa giác với các thuộc tính động không có trên shapefile.

Dưới đây là một ví dụ tôi muốn tô màu các đa giác này theo loại sản phẩm của họ, nhưng như câu hỏi trước đó, các loại sản phẩm này được thu thập một cách linh hoạt.

nhập mô tả hình ảnh ở đây

Tôi hy vọng những điều này là có thể.


Tùy chọn thứ hai sẽ hoạt động nếu bạn gán các đa giác một cách chính xác - điều này nên được thực hiện trên cơ sở dữ liệu. Việc sử dụng SLD (Bộ mô tả lớp theo kiểu) như ví dụ ở đây - blog.geoserver.org/2010/04/09/sld-cookbook
Mapperz

vấn đề là, tôi không có quyền truy cập ghi vào db. vì vậy tôi không thể thêm một thuộc tính mới cho các loại sản phẩm vào bảng. thực tế có rất nhiều thuộc tính mà tôi thu thập một cách linh hoạt không có trên bảng gốc. Vì vậy, việc tạo một cột mới cho mỗi cột không phải là một lựa chọn tôi đoán. Có một cách năng động? hoặc nếu điều này là không thể, tôi có cần sử dụng các thư viện bên ngoài cho hoạt động này không? như sharpmap hay v.v?
bahadir

có một bảng phân tầng mà bạn có quyền truy cập đọc / ghi. Nếu không tạo databae của riêng bạn (đề xuất postgis / postgres) thì bạn có quyền kiểm soát.
Mapperz

Câu trả lời:


4

Về câu hỏi thứ hai của bạn :

Một SLD có thể được tạo động, có nghĩa là nó có thể tạo kiểu bản đồ bằng dữ liệu động. Để làm việc này, bạn sẽ cần biết ID của đa giác bạn đang cố gắng tạo kiểu và bạn cũng cần thay đổi / mở rộng dịch vụ web của mình.

Có dịch vụ web của bạn tạo SLD nhanh chóng thay vì chỉ trả lại dữ liệu. Điều này đủ đơn giản bằng cách sử dụng .NET, Java, PHP, vv SLD bạn tạo sẽ có một quy tắc cho mỗi dải màu bạn muốn hiển thị. Mỗi quy tắc sẽ xác định các đa giác mà màu áp dụng cho ID của chúng. Mỗi khối bộ lọc của quy tắc sẽ chứa PropertyIsEqualTo 1 OR PropertyIsEqualTo 2 OR .... Mỗi quy tắc định kiểu đa giác của nó với bất kỳ màu nào bạn đã chọn để thể hiện giá trị. Sau đó, bạn có hai tùy chọn để yêu cầu GeoServer sử dụng SLD động của bạn.

  1. Nếu GeoServer có quyền truy cập HTTP vào dịch vụ web của bạn, bạn có thể chuyển URL được mã hóa, ví dụ (JS) 'http://geoserver/wms?request=GetMap...&sld=' + encodeURIComponent('http://web-service/generateSLD?and=any-parameters-that-influence-sld-generation'). Khi GeoServer nhận được yêu cầu WMS, nó sẽ giải mã các tham số và truy vấn URL này cho SLD. Từ quan điểm của GeoServer, điều này không khác gì truy vấn SLD tĩnh được giữ trên một máy chủ tệp.
  2. Nếu GeoServer không thể truy cập dịch vụ web của bạn, trước tiên khách hàng của bạn phải yêu cầu dịch vụ web cho SLD động, sau đó chuyển SLD sang GeoServer trong tham số sld_body của yêu cầu WMS. Coi chừng mọi giới hạn về độ dài URL được áp đặt bởi khách hàng của bạn (ví dụ: trình duyệt) hoặc máy chủ web của bạn

Cả hai cách tiếp cận đều có thể được kiểm tra bằng SLD tĩnh mà bạn tạo để thử nghiệm, vì vậy bạn biết mức độ thành công này trước khi nỗ lực cho dịch vụ web của mình. Cả hai cách tiếp cận đều có thể được sử dụng để yêu cầu GeoServer cho đồ họa huyền thoại, sau đó sẽ biểu thị cùng một quy tắc (tuy nhiên nếu bạn sử dụng tùy chọn 1 thì có thể dữ liệu được sử dụng để tạo SLD của bạn đã thay đổi sau khi tạo bản đồ).

Tôi nghĩ rằng đây là lựa chọn tốt nhất của bạn cho câu hỏi 2.

Về câu hỏi đầu tiên của bạn :

Các điểm nhiệt độ luôn đại diện cho cùng một vị trí? Nếu có, bạn có thể tìm hiểu trước những đa giác mà các điểm nhiệt độ nằm trong không? Nếu có, bạn chỉ có thể sử dụng lại cách tiếp cận được nêu ở trên, với tập lệnh thế hệ SLD của bạn dịch các điểm thành ID đa giác.

EDIT Tôi chỉ thấy điều này được tham chiếu trong một câu hỏi khác: http://pypi.python.org/pypi/python-sld/


cảm ơn, và cho câu hỏi đầu tiên của tôi, tôi đã tìm ra plugin bản đồ axit cho máy chủ địa lý, bạn có bất kỳ kinh nghiệm nào về plugin đó không?
bahadir

tiếc là không, nhưng nó có ghi "bạn có thể sử dụng lớp điểm WMS để tạo bản đồ AMS". Điều này nói với tôi rằng bạn không chỉ cần cài đặt một plugin trên GeoServer mà còn GeoServer cũng cần truy cập vào dữ liệu điểm của bạn để cung cấp nó dưới dạng một lớp. Từ câu hỏi của bạn, tôi giả sử bạn không có khả năng thay đổi cấu hình GeoServer.
tomfumb

Trên thực tế, tôi không có quyền truy cập vào cơ sở dữ liệu. tôi có thể thay đổi cấu hình máy chủ địa lý. Nhưng ngay cả với bản đồ axit, tôi đoán tôi cần thêm một bảng vào db cho dữ liệu điểm. chưa có cách nào năng động
bahadir

bạn có một tùy chọn khác nhưng có thể không dễ dàng - nếu bạn có thể định cấu hình GeoServer, điều đó có nghĩa là bạn có thể tạo một cửa hàng mới đọc từ WFS. Một lần nữa, điều này yêu cầu GeoServer có quyền truy cập HTTP vào dịch vụ web của bạn, nhưng sau đó bạn có thể cung cấp WFS của riêng bạn đại diện cho các điểm dữ liệu của bạn. Tùy thuộc vào số lượng điểm phải chuyển, điều này có thể khá chậm. Ngoài ra, nếu bạn không có máy chủ bản đồ về phía mình, điều này có thể có nghĩa là mã hóa các phản hồi GML theo cách thủ công không dễ chịu.
tomfumb

và nếu tôi có thể truy cập cơ sở dữ liệu, tôi có cần thu thập dữ liệu từ các dịch vụ web, chèn vào db và làm cho máy chủ địa lý rút dữ liệu mới được chèn từ cơ sở dữ liệu không?
bahadir

1

Câu trả lời ngắn gọn là - vâng, nó rất có thể! Thực tế có nhiều cách bạn có thể giải quyết vấn đề này. Đây là một cách như vậy tôi có thể nghĩ ra.

Có 2 phần câu hỏi của bạn ở đây.

1) Thể hiện dữ liệu tĩnh và động đến từ các nguồn bên ngoài trong GeoServer.

Tạo một nhóm lớp nói "Bản đồ khu vực" với 2 lớp. Lớp 1 (Tĩnh) là "Bản đồ khu vực - được cung cấp từ Cơ sở dữ liệu chỉ đọc hoặc Lớp 2 của bạn (Động) là" Thời tiết "- có thể được cung cấp dữ liệu động thông qua xếp tầng WMS. URL tầng của WMS thực sự có thể được lặp lại đến GeoServer của bạn và bạn có thể phục vụ nhiệt độ hoặc các thuộc tính động khác bằng cách gọi các dịch vụ từ xa bằng bất kỳ giao thức nào bạn sử dụng - REST, SOAP, TCP, v.v.

Bằng cách này, bạn có thể thêm các thuộc tính cho các lớp một cách linh hoạt trong tương lai mà không cần thêm công cụ vào DB.

2) Thực hiện kiểu dáng tùy chỉnh ** Đặt cược tốt nhất của bạn ở đây là sử dụng ** Bộ mô tả lớp kiểu (SLD) . Có rất nhiều tài liệu về cách tạo kiểu bằng SLD. Nó rất mạnh mẽ! Bạn có thể kiểm soát kiểu dáng bằng cách sử dụng màu sắc, mức thu phóng, ngưỡng giá trị (> 40C là màu đỏ,> 35 là màu cam) và có các quy tắc dựa trên các giá trị từ nhiều thuộc tính và nhãn. Kiểu dáng có sẵn cho hầu hết các dạng hình học - điểm, đường, khu vực, v.v. Bạn có thể sử dụng các trình soạn thảo kiểu như Atlas hoặc trình chỉnh sửa đi kèm với OpenGeo - GeoExplorer, để kiểm tra các điều kiện dữ liệu khác nhau.

Cái hay của cách tiếp cận này là bạn có thể điều khiển kiểu dáng của Layer1 và Layer2 độc lập với nhau. Bạn có thể thực hiện các huyền thoại trong UI (JavaScript) của mình, bên ngoài GeoServer. GeoServer sẽ hợp nhất tất cả các quy tắc tạo kiểu để tạo lớp phủ chính xác. Tùy thuộc vào hiệu suất mà bạn nhận được từ lớp của mình và Tạo kiểu, bạn cũng có thể xem xét thêm giải pháp bộ đệm ẩn như GeoWebCache hoặc HTTP Cache như Varnish.

Chúc mừng

Ramesh


cảm ơn, nhưng tôi không có cơ hội tạo các bảng hoặc lớp mới trong máy chủ địa lý.
bahadir
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.