Cấu trúc dữ liệu lý tưởng để lưu trữ dữ liệu bản đồ?


12

Tôi đã được hỏi điều này trong một bài kiểm tra phỏng vấn. Tôi đã làm tốt bài kiểm tra nhưng không biết đủ để trả lời câu hỏi này. Tôi tò mò muốn biết những cấu trúc dữ liệu nào tôi có thể sử dụng để truy vấn dữ liệu một cách nhanh chóng.

Về cơ bản, ý tưởng là sẽ có các đoạn đường (đường, tạo thành các điểm) được lưu trữ trong một số loại cấu trúc dữ liệu. Cần nhanh chóng truy vấn đoạn đường (hoặc điểm) nào trong một khoảng cách nhất định từ một điểm (bán kính).


Để thực sự tìm hiểu thêm, tôi sẽ đọc trên: cgal.org , sau đó xem các dự án này: cgal.org/projects.html#gis , tìm một dự án giống với những gì bạn muốn và sau đó nghiên cứu cách sử dụng API và cuối cùng là trang điểm API.
Công việc

Câu trả lời:


16

Cách điển hình để lưu trữ dữ liệu địa lý là với cấu trúc dữ liệu không gian như cây R (hoặc một số biến thể, chẳng hạn như cây R +, cây R *, v.v.) Đây là cách các loại dữ liệu địa lý thường được triển khai trong khả năng của GIS RDBMS. (Tôi biết cả SQL Server 2008 và PostGIS của Microsoft đều sử dụng cây R cho các loại địa lý.) Chúng đáp ứng tất cả các yêu cầu cơ bản mà bạn đã mô tả và hỗ trợ tầm thường cho giao lộ, vị trí, khoảng cách và các loại truy vấn khác.

Tùy thuộc vào loại dữ liệu, bạn cũng có thể tìm thấy những thứ như cây kD, cây bốn lá, quãng tám, phân cấp âm lượng giới hạn (bao gồm cả cây hộp giới hạn theo trục), v.v. Điều này thực sự phổ biến hơn nhiều trong các trò chơi 3D, vì kích thước và hình dạng của một đối tượng có liên quan nhiều hơn đến các truy vấn giao nhau. Chúng ít được sử dụng cho GIS hơn cây R.


0

Các loại hoạt động khác nhau trên dữ liệu bản đồ sẽ yêu cầu các định dạng lưu trữ khác nhau để có kết quả tối ưu. Hãy xem xét, ví dụ, ba nhiệm vụ sau:

  1. Cho một điểm, tìm đường gần điểm đó
  2. Với một khu vực địa lý có kích thước nhất định, hãy tìm tất cả các con đường nằm trong khu vực đó.
  3. Đưa ra hai con đường, tìm con đường ngắn nhất giữa chúng.

Sự khác biệt về yêu cầu đủ lớn đến mức trừ khi người ta cần điều chỉnh các thay đổi "trực tiếp" trên bản đồ, người ta có thể sẽ tốt hơn với việc lưu trữ ba bản sao dữ liệu riêng biệt - mỗi bản được tối ưu hóa cho một trong các nhiệm vụ trên - hơn là thử để đưa ra một định dạng có thể xử lý tốt cả ba nhiệm vụ.

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.