Tôi tự hỏi phương pháp lưu trữ nào sẽ dẫn đến việc đọc nhanh nhất các vectơ bản đồ để kết xuất. SHP? Bài viết? SQLite? (Chúng không thay đổi thường xuyên và tôi không cần các hàm không gian cho các vectơ này).
Tôi tự hỏi phương pháp lưu trữ nào sẽ dẫn đến việc đọc nhanh nhất các vectơ bản đồ để kết xuất. SHP? Bài viết? SQLite? (Chúng không thay đổi thường xuyên và tôi không cần các hàm không gian cho các vectơ này).
Câu trả lời:
Có một số thử nghiệm rất nhanh về shapefiles so với cơ sở dữ liệu (PostGIS) cho MapServer trong bản trình bày này (từ 2007).
Tóm tắt:
Và thời gian chi tiết, cũng có thể giúp quyết định xem định dạng lưu trữ có phải là một yếu tố quan trọng hay không.
PostGIS Shapefile
Start mapserv process 15ms 15ms
Load mapfile 3ms 3ms
Connect to DB 14ms n/a
Query 20ms n/a
Fetch 7ms n/a
Draw 11ms 28ms
Write Image 8ms 8ms
Network Delay 3ms 3ms
Luôn sử dụng FastCGI trong MapServer nếu sử dụng cơ sở dữ liệu, vì các kết nối cơ sở dữ liệu có thể được sử dụng lại, nếu không, một kết nối mới phải được tạo theo mỗi yêu cầu.
Tốc độ đọc một shapefile (và dữ liệu từ cơ sở dữ liệu) phụ thuộc vào việc triển khai mã hóa cụ thể.
Mã nguồn cho MapServer mở một shapefile có thể được nhìn thấy ở đây . Theo dõi các bình luận, bạn có thể thấy tầm quan trọng của việc có một chỉ mục. Thông thường bạn chỉ có thể đọc một tệp theo một hướng để có được một bản ghi, nhưng với một chỉ mục bạn có thể đọc theo hai hướng.
345 /* Read the .shx file to get the offsets to each record in */
346 /* the .shp file.
Một ví dụ khác về việc mở một shapefile có thể được nhìn thấy trong nguồn Python cho PyShp . Một lần nữa bạn có thể thấy cách một chỉ mục được sử dụng để tìm các hình cụ thể trực tiếp.
Các giới hạn của định dạng DBF (giới hạn về kích thước trường, không hỗ trợ null, giới hạn lưu trữ văn bản), cũng cần được xem xét khi quyết định có sử dụng cơ sở dữ liệu hay không.
Cơ sở dữ liệu cũng cung cấp các phương tiện bảo mật dữ liệu, dễ dàng tham gia và tạo các chế độ xem, ghi nhật ký và nhiều tính năng khác mà bạn sẽ không nhận được với một tệp độc lập.
Trái với những gì dariapra nói, kinh nghiệm của tôi trong việc phát triển Maperitive cho tôi biết rằng nút thắt lớn nhất là trong việc tải dữ liệu thực tế trước khi kết xuất. Tất cả phụ thuộc rất nhiều vào mức độ lớn của bộ dữ liệu được lưu trữ và mức độ lớn của bộ dữ liệu bạn đang cố gắng hiển thị trong một lần. Nếu bạn có thể tải tất cả vào bộ nhớ, thì shapefiles có lẽ tốt hơn so với sử dụng công cụ cơ sở dữ liệu.
Chương trình nào bạn sẽ sử dụng để kết xuất? Điều này có thể ảnh hưởng đến kết quả. Dù sao, có một shapefile với chỉ số không gian (ví dụ: http://mapserver.org/utilities/shptree.html ) thường được sử dụng là kỹ thuật nhanh nhất. Ngoài ra: nó phụ thuộc vào ứng dụng của bạn, nhưng lưu trữ kết quả được hiển thị của bạn thường hữu ích hơn nhiều để cải thiện hiệu suất.
Shapefile sẽ là cách nhanh nhất và có lẽ là đặt cược tốt nhất của bạn. Có chi phí hoạt động cho bất kỳ cơ sở dữ liệu SQL nào, sau đó có quản lý trả về các tập kết quả lớn (chuyển đổi từ kiểu dữ liệu cơ sở dữ liệu sang kiểu dữ liệu gốc cũng sẽ làm mọi thứ chậm lại).
Hãy thử sử dụng gói nguồn mở từ maptools.org để đọc. Các công cụ ArcGIS, mặc dù mục đích được xây dựng, nhưng có một chút chi phí để bắt đầu và rất tốn kém.
Hi vọng điêu nay co ich