Số lượng tính năng điểm tối đa trong lớp vectơ OpenLayers


27

Theo kinh nghiệm của bạn, có bao nhiêu tính năng điểm có thể được thêm vào lớp vectơ OpenLayers (OpenLayers.Layer.Vector ("Lớp điểm")) trước khi nó chậm một cách bất thường?

Trường hợp sử dụng của tôi là để hiển thị các điểm từ bảng cơ sở dữ liệu. Người dùng có thể quyết định khung thời gian nào để hình dung. Do đó, kết quả có thể từ rất ít đến khả năng 100.000 điểm. Tôi muốn giới thiệu một giới hạn hợp lý và cảnh báo người dùng nếu truy vấn của anh ta sẽ trả lại nhiều tính năng hơn.


Có một trình duyệt tiêu chuẩn đang được sử dụng? Giới hạn có thể sẽ khác nhau tùy thuộc vào trình duyệt bạn đang sử dụng.
Derek Swingley

Chủ yếu là Firefox. Nó không phải làm việc trong các IE cũ.
underdark

1
Thay vì cảnh báo người dùng, bạn có thể chuyển từ yêu cầu dữ liệu vectơ sang trả về các điểm dưới dạng WMS / hình ảnh.
geographika

@geographika: Thông thường tôi sẽ làm điều đó. Nhưng người dùng cũng được quyết định kết nối cơ sở dữ liệu nào. Tôi phải biết tất cả các cơ sở dữ liệu có thể và có sẵn chúng thông qua WMS. Họ thậm chí không cài đặt PostGIS, tôi chỉ tìm nạp các cột lat / lon.
underdark

Câu trả lời:


38

Tôi không có câu trả lời dứt khoát cho bạn nhưng bạn tôi đặt một trang nơi bạn có thể chơi xung quanh với số điểm khác nhau trên bản đồ OL: http://derekswingley.com/lab/olpts/


5
Derek nên có huy hiệu 'Câu trả lời tuyệt vời với ví dụ thực tế' cho điều đó. Tốt để thấy sự khác biệt về điểm vượt tốc độ.
Mapperz

3
Rất thú vị! Nó làm cho tôi suy nghĩ đến Geoipsum. Ngoài ra, nó cũng có thể được sử dụng để kiểm tra hiệu suất: craigmmills.com/geoipsum (Tôi không biết có giới hạn số đa giác không)
simo

1
@ So4ne rằng trang web công cụ ứng dụng google đã chết tại một số thời điểm, mã tương tự (gần 5 tuổi) có ở đây: derekswingley.com/lab/olpts
Derek Swingley

1
@nospor Fallout từ chuyển sang https, được cập nhật và trang web đã hoạt động trở lại.
Derek Swingley

1
@DerekSwingley Tôi đã tạo các mẫu cập nhật dựa trên ý tưởng của bạn bằng cách sử dụng Leaflet, MapboxGL JS & OpenLayers 4 Medium.com/@ThomasG77/ nam Tôi đặt các khoản tín dụng cho mẫu của bạn
ThomasG77

5

Nếu màn hình hiển thị chậm vì số tính năng quá cao, điều đó có nghĩa là dữ liệu cần hiển thị không phù hợp với mức thu phóng. Thông thường, khi mật độ tính năng quá cao, màn hình không thể đọc được nữa (xem ví dụ này ). Ngay cả khi không có giới hạn xử lý và tất cả các thiết bị hiển thị đều có thể hiển thị 1000000000000 tính năng trong 0,001 giây trên màn hình nhỏ, việc hiển thị sẽ vẫn không thể thực hiện được.

Luật cơ số của Töpfer tuyên bố rằng mật độ tính năng phải duy trì dưới một ngưỡng không đổi cho dù mức độ phóng to. Một cách để giải quyết vấn đề này và điều chỉnh dữ liệu theo thang đo trực quan là biến đổi nó bằng cách sử dụng các hoạt động khái quát hóa như thế này hoặc hoạt động khác .



2
Rất đúng. Và liên quan đến Openlayers, nó sử dụng chiến lược cluster để xử lý điều đó. Xem ví dụ: openlayers.org/dev/examples/strargety-cluster.html
simo

1
Đối với ứng dụng hiện tại của tôi, tôi chỉ cần kết nối các điểm (GPS) với các đường (rãnh). Điều đó đã cải thiện đáng kể thời gian kết xuất.
underdark

3

Tôi không nghĩ rằng không thể đưa ra câu trả lời chắc chắn cho câu hỏi này. Kết xuất điểm / đa giác hoàn toàn phụ thuộc vào trình duyệt và phần cứng (CPU & bộ nhớ) không phải với OpenLayers. Tôi gặp vấn đề với Openlayers và IE6 đối với một trong các kết xuất Hồ (Đa giác). nhưng, nó được tải độc đáo trong Firefox. Và tùy chọn tốt nhất sẽ là theo dõi việc sử dụng bộ nhớ và CPU bằng Chrome hoặc một số công cụ sẽ tốt hơn.


1

Như những người khác, tôi không có câu trả lời liên quan đến câu hỏi đó, nhưng áp dụng chiến lược BBox có thể giúp bạn giữ lại những dữ liệu cần thiết vì nó chỉ hiển thị các tính năng nằm trong hộp giới hạn đã cho.


1

Trong OpenLayers 6, có trình kết xuất điểm WebGL cho phép bạn kết xuất 100 nghìn tính năng, với tính năng lọc theo thời gian. Bạn có thể muốn xem phiên bản mới nhất của hội thảo chính thức tại https://openlayers.org/workshop/en/webgl/ .

Với OpenLayers 2, mà tôi thực sự không khuyên bạn nên sử dụng nữa, mức tối đa cho tốc độ khung hình chấp nhận được sẽ chỉ là vài trăm tính năng.


0

Tôi vấp phải một trường hợp sử dụng tương tự, không chắc nó có phù hợp với các nhu cầu đã đề cập ở trên không nhưng Clusteringtrong OL 5 là những gì tôi đã áp dụng.

Phân cụm như các từ gợi ý sẽ lấy một nhóm điểm và hợp nhất chúng thành một điểm khác nhau, ví dụ: bạn có 100 điểm ở thành phố cụ thể, tất cả các điểm sẽ được hiển thị dưới dạng một điểm từ thu phóng của giả sử 4nhưng là các điểm riêng lẻ từ thu phóng của chúng ta nói 10như vậy những gì bạn có thể làm là khi thu phóng là 4bạn có thể tham gia các điểm đó làm một, điều này giúp giảm số lượng điểm được hiển thị trong một khu vực cụ thể.

Nói cách khác, giả sử bạn có 10.000 điểm được hiển thị trên bản đồ và chúng khá gần nhau, vì vậy bạn có thể tạo các cụm của chúng và giảm kết xuất và khi người dùng phóng to bạn tiếp tục phá vỡ các cụm. Điều này sẽ đảm bảo rằng bạn có ít kết xuất và hiệu suất tốt hơn.

Hiệu suất thỏa mãn. Liên kết đến các ví dụ phân cụm trên Openlayers


Bạn có thể vui lòng thêm một bản tóm tắt ngắn của trang được liên kết? Liên kết có thể bị phá vỡ theo thời gian, khiến câu trả lời của bạn trở nên vô dụng như bây giờ.
Kantan
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.