30.000 điểm dữ liệu có thể được phục vụ hợp lý bằng cách sử dụng openlayers?


8

Tôi đang cố gắng giải quyết vấn đề về web GIS và cần tìm ra chiến lược tốt nhất. Tôi có một bản đồ với 30.000 ô trên đó tạo thành một mạng lưới cho tỉnh bang Alberta. Tôi có một danh sách các điểm dữ liệu cho mỗi ô - khoảng 50 trường chỉ báo và giá trị cho mỗi ô. Ví dụ: một giá trị có thể là dân số của con người, vì vậy mỗi ô sẽ có một giá trị cho dân số của con người cho ô đó. Tôi muốn tạo một bản đồ tương tác có thể hiển thị các giá trị đó một cách trực quan bằng các ô vuông cho các ô hoặc một kiểu nhìn bản đồ nhiệt pha trộn. Ngoài ra, tôi muốn có thể thực hiện các phép tính gộp trên tất cả các điểm dữ liệu và sử dụng các phép tính đó để tạo các bản đồ bổ sung. Cân nhắc các tính toán, có khoảng 300.000 hoán vị trên bản đồ. Trên hết, nó cũng là tạm thời; Có 16 lát thời gian khác nhau.

Chiến lược của tôi cho đến nay:

1) Về phía máy chủ, tính toán các giá trị ô một cách linh hoạt trong thời gian chạy và gửi các giá trị đến máy khách (tất cả 30.000 trong số chúng). Điều này chuyển thành khoảng một giá trị cho mỗi ô vuông 3x3 trong hình ảnh 525px x 525px trên màn hình.

2) Về phía máy khách với các lớp mở, sử dụng png 1px có thể thay đổi kích thước và điều chỉnh giá trị alpha khi cần để hiển thị độ dốc màu khác nhau tương ứng với giá trị dữ liệu cho mỗi ô. Png sẽ được thay đổi kích thước khi bản đồ phóng to hoặc thu nhỏ. Về mặt lý thuyết, chúng sẽ được định vị chính xác để tạo thành vùng phủ chăn của bản đồ dưới dạng hình vuông hoặc bằng cách khác sử dụng phương pháp bản đồ nhiệt, chúng sẽ chồng lên nhau đủ để tạo thành vùng phủ chăn.

Câu hỏi:

Có hợp lý khi tính toán các giá trị ô đó một cách linh hoạt trên máy chủ và sau đó gửi đến giao diện OpenLayers trong thời gian thực không? Tôi tự tin rằng máy chủ có thể thực hiện các phép tính, nhưng OpenLayers có thể hiển thị hợp lý 30.000 điểm dữ liệu tại một thời điểm trên bản đồ không? Có hợp lý để mong đợi có thể tạo ra một phạm vi bảo hiểm bằng cách sử dụng dữ liệu điểm? Tôi đoán rằng tôi đang cố gắng tạo ra một bản đồ vectơ tương đương với 30.000 hình dạng cho phạm vi bao phủ 100% của bản đồ, nhưng sử dụng dữ liệu điểm để đơn giản hóa nó.

Các chiến lược thay thế trong tâm trí của tôi là:

a) để tạo các bản đồ trong thời gian thực trên máy chủ và gửi dưới dạng các lớp rasterized đến máy khách

b) để tạo ra tất cả các hoán vị trước thời hạn và lưu trữ chúng trên máy chủ dưới dạng bản đồ rasterized

Có suy nghĩ gì không? Là cách tiếp cận của tôi tắt và sủa sai cây? Bất kỳ lời khuyên về một phương pháp tốt hơn?

Tôi chắc chắn đánh giá cao bất kỳ suy nghĩ về vấn đề này! Nếu bạn quan tâm, tôi thậm chí có thể tìm cách ký hợp đồng với một nhà phát triển để giúp đỡ nó.

Cám ơn rất nhiều!

Nô-ê


Tôi đang nghiên cứu thêm và tôi có thể đang thực hiện sai tuyến đường hoàn toàn ... còn việc sử dụng Biến đổi kết xuất với GeoServer ... thì GeoServer có thể tạo ra một biến đổi nhanh như thế nào với 30.000 điểm dữ liệu?
Nô-ê Purves-Smith

Sử dụng cụm trong Openlayers
Mapperz

Cảm ơn vì nhận xét Mapperz ... thật không may, phân cụm không thực sự giải quyết những gì chúng ta cần.
Nô-ê Purves-Smith

Câu trả lời:


13

Câu hỏi này đã được hỏi một số lần. 30k điểm, thẳng lên, sẽ không hoạt động trên bản đồ OL. Hoặc thậm chí trên bản đồ Flash / Silverlight.

Thứ tự số lượng lớn (thô!) Cần nhớ - 100 điểm trên bản đồ JS (openlayers), 1.000 điểm trong Bản đồ Flash (ví dụ ArcGIS Flash hoặc Silverlight), 10.000 điểm trên ứng dụng máy tính để bàn (ArcGIS Desktop) là hiệu suất tốt của bạn cấp độ. Đây là những điểm "thực tế", không bị ẩn hoặc làm giả như được nêu dưới đây.

Không chỉ vậy, thật không hay khi tương tác với 30k điểm. Làm cách nào để tôi truy cập điểm đánh dấu "cái đó" phía sau điểm đánh dấu khác?

Bạn có 2 lựa chọn:

1) Tạo raster, như bạn đã đề cập, trên máy chủ. Phục vụ dịch vụ WMS và khi người dùng của bạn nhấp / di chuyển qua một điểm, hãy quay lại máy chủ để lấy dữ liệu

2) Giảm # điểm bạn hiển thị. Chủ yếu thông qua phân cụm SERVER-SIDE và cũng thông qua việc cắt xén hộp giới hạn. Phân cụm phía khách hàng là "ok" và "dễ thương" nhưng sẽ không giúp bạn ở 30k điểm. Nó sẽ chậm thôi. Vì vậy, bạn thiết lập lớp của mình với chiến lược bbox và OL sẽ thực hiện các cuộc gọi đến máy chủ trên pan / zoom cho bạn và bạn trả lại một tập hợp dữ liệu mới được cắt bớt đến điểm mà bạn trả về dưới 100-300 điểm.


Đánh tôi đi Số 1 được mở rộng trong câu trả lời của tôi.
Michael Markieta

Cảm ơn vì câu trả lời. Tôi không nghĩ rằng tôi đã giải thích vấn đề rất tốt, nhưng tôi cũng nghĩ rằng tôi đang xem xét giải pháp sai. Tôi nghĩ rằng việc tạo một raster trên máy chủ chắc chắn là cách thích hợp để đi bây giờ mà tôi đã xem xét thêm về nó. Bạn có thể nói tôi là người mới ở đây không!
Nô-ê Purves-Smith

@ Không - không vấn đề gì. Bạn đang đi đúng hướng :) WMS là cách tốt hơn để tìm kiếm nhiều dữ liệu trừ khi bạn có thể ngưng tụ dữ liệu đó.
Vadim

Câu trả lời tốt đẹp. Giải pháp của tôi tương tự như đề xuất số 2 của bạn và có thể hỗ trợ tập dữ liệu gồm một triệu điểm dữ liệu.
cjstehno

6

Từ quan điểm UI và UX, 30.000 điểm riêng lẻ trên bản đồ không chính xác là đại diện tốt nhất cho dữ liệu của bạn.

Bạn cũng có thể chọn sử dụng lưới UTF8 trên đầu dữ liệu điểm rasterized của mình. Tuy nhiên, độ phân giải của lưới của bạn và số lượng điểm chắc chắn sẽ khiến việc chọn dữ liệu trở nên rất khó đoán và không phải là UX tốt nhất. http://mapbox.com/developers/utfgrid/

Một sự kết hợp của các cụm OL với lưới UTF8 sẽ rất thú vị. Điều này có thể được thực hiện bằng cách phân cụm dữ liệu kích thước máy chủ trả về các cụm raster hơn sau đó có thể được chọn thông qua việc sử dụng UTF8 Grids. Sự lựa chọn thao tác của bạn qua điểm này có thể là phóng to hơn nữa (như trong các phương pháp phân cụm vectơ phía máy khách cổ điển như trong OL). Bạn cũng có thể muốn xử lý một số dữ liệu như tính giá trị trung bình bên trong cụm đó và trình bày dữ liệu đó cho người dùng.


2

Như đã đề cập 30.000 tính năng thông qua OL là một ý tưởng thực sự tồi tệ. Tôi đã quản lý 10.000 điểm bằng cách sử dụng kết xuất canvas trong Chrome và điều đó đã hoạt động tốt, nhưng việc chuyển sang điểm đánh dấu đồ họa (.png) khiến nó thu thập dữ liệu.

Tôi chỉ muốn cung cấp một đề nghị cho phương pháp tiếp cận phía máy chủ của bạn. Rõ ràng bạn không thể tạo trước tất cả 300.000 hoán vị và phạm vi của bạn chắc chắn sẽ tăng lên. Nếu bạn muốn sử dụng WMS với SLD, bạn có thể sử dụng phương pháp sau để tạo bất kỳ bản đồ nào.

Máy khách (ví dụ OpenLayers) thực hiện yêu cầu hình ảnh WMS đến máy chủ. URL cho yêu cầu bao gồm một tham số ...&SLD=http://app-server/sld?time=2010&measure=population...- ở đây, tham số SLD là một URL (sẽ phải được mã hóa URL) để tạo SLD một cách nhanh chóng. Khi máy chủ WMS nhận được yêu cầu của bạn, nó truy vấn máy chủ ứng dụng của bạn để tìm SLD duy nhất và nhận được phản hồi XML. Sau đó, nó tạo ra bất kỳ hoán vị người dùng của bạn yêu cầu.

Tôi đã thực hiện điều này với GeoServer cho WMS và PHP tạo SLD và hiệu suất vẫn ổn (nhưng sau đó tôi không có lý do gì không nên, tình huống của bạn có thể khác).

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.