2010-10-02 30 views
9

Tôi đang tìm gợi ý cho cơ sở dữ liệu lý tưởng hoặc cấu trúc dữ liệu để lưu trữ bản đồ. Về cơ bản, bản đồ bao gồm "cách" mà cũng giống như đường giao thông, đường dẫn, vv Cách chứa nút (trong đó có một vĩ độ và kinh độ phối hợp, và đôi khi độ cao.)Cơ sở dữ liệu lý tưởng cho dữ liệu địa lý (bản đồ)

Bất kỳ cơ sở dữ liệu như vậy hoặc cấu trúc:

  1. sẽ có thể xác định tất cả các nút trong một hộp bounding một cách nhanh chóng (mili giây)

  2. tùy chọn, không nên đáng kể làm chậm khi một số lượng lớn các nút đang ở trong một khung giới hạn so với một số ít các nút, hoặc nếu hộp giới hạn lớn

  3. sẽ có thể tìm thấy các nút kết nối trực tiếp: ví dụ: nút nối hai cách

  4. có thể được đọc chỉ

  5. nên nhỏ gọn (tránh lãng phí thời gian) - Tôi đang tìm cách để phù hợp với một bản đồ của Vương quốc Anh vào ít hơn 1 GB. Tôi có một nav nav làm điều này với khoảng 800 MB không gian trên một thẻ SD.

Tôi đã suy nghĩ ban đầu về cây quad để lưu trữ các cách. Nhưng việc triển khai nhanh là khó khăn và chúng không hoạt động đối với các nút riêng lẻ; tất cả các nút được đặt trong bbox nhỏ nhất có thể.

(Tôi đang cố tình sử dụng các thuật ngữ tương tự của Open ở dạng sơ đồ vì tôi có kế hoạch để sử dụng dữ liệu đó.)

+0

Tôi bắt đầu một bounty về câu hỏi này. –

Trả lời

4

tôi khuyên bạn nên có PostGIS 1.5 sử dụng địa lý loại như nó phù hợp với những gì bạn muốn, tuy nhiên mối quan tâm duy nhất của tôi với việc sử dụng một cái gì đó như thế này trên một nhúng thiết bị sẽ sử dụng bộ nhớ.

Tôi đã xây dựng một cái gì đó mơ hồ liên quan bằng cách sử dụng cơ sở dữ liệu không phải GIS (firebird) trong Java và hiệu suất là đủ để lấy điểm trong một hộp giới hạn (mặc dù yêu cầu SQL ưa thích mà không phải là trường hợp với PostGIS) .

+0

PostGIS có vẻ thú vị. Cảm ơn con trỏ. –

0

Tôi không chắc chắn về không gian, nhưng bạn có thể muốn xem xét sử dụng bất kỳ phần mở rộng Geo cho các máy chủ cơ sở dữ liệu phổ biến (nếu có thể). Chúng thường cung cấp tính năng lập chỉ mục địa lý nhanh, đóng hộp dựa trên (trả lời cho 1 và 2) nhiều quy trình địa lý để tính toán (trả lời cho 3, intersect(way1,way2)).

Ngoài ra, câu hỏi của bạn là một trận đấu tốt hơn cho http://gis.stackexchange.com

+0

Tôi nghĩ rằng đó là một câu hỏi lập trình bởi vì việc thực hiện cũng không kém phần quan trọng. Tôi đã xem xét việc sử dụng SQLite3 vì nó có phần mở rộng R * Tree, nhưng điều đó quá chậm. –

+0

Vâng, đề xuất của một phần sản phẩm sẽ được phục vụ tốt hơn trên trang web khác. Phần thuật toán có lẽ cũng sẽ được phục vụ rất tốt ở đó. Bạn đã thử bất kỳ cơ sở dữ liệu nào khác chưa? –

+0

Không - tôi chưa có. SQLite3 khá nhanh - khoảng 40ms để lấy tất cả các nút trong một hộp 100m x 100m. Tôi không tưởng tượng hầu hết các cơ sở dữ liệu nhận được nhiều hơn thế này, vì vậy tôi đang tìm cách tốt hơn để tiếp cận vấn đề, chẳng hạn như một cấu trúc dữ liệu hoặc thuật toán khác. –

1

Cơ sở dữ liệu tốt nhất mà tôi biết về dữ liệu địa lý là PostgreSQL với các phần mở rộng địa lý, nhưng tôi không biết về tốc độ. Tôi biết rằng OSM sử dụng điều này, nhưng họ có quyền truy cập vào một cơ sở hạ tầng máy tính khổng lồ là nhanh. Tôi cũng biết rằng họ có một số yêu cầu cho những người có thể viết các chương trình nhanh hơn cho họ.

Tôi sẽ nói rằng Quadtree là một lựa chọn thực sự tốt để xử lý dữ liệu địa lý, có vẻ như bạn cho phép các ô vuông quá nhỏ so với những gì tôi có thể nói. Bạn có thể làm cho ranh giới mềm hơn (cho phép một nút nằm trong hai lá của Quadtree) và thêm một số lượng tối thiểu các nút trên mỗi lá. Giả sử rằng bất kỳ lá nào không được phép chứa ít hơn 64 nút và không quá 1024.

Việc sắp xếp đặc biệt quan trọng đối với tốc độ ở đây, một đề xuất sẽ là sắp xếp åreas sẽ có nhiều khả năng được truy cập hơn. Nói rằng 70% của tất cả các yêu cầu sẽ được xung quanh London, sau đó nó sẽ là nhanh nhất để có dữ liệu này vào đầu của tập tin để giảm bớt thời gian tìm kiếm.

+0

Cảm ơn đề xuất của bạn, +1. –

+0

Np, tôi đã suy nghĩ về một dịch vụ dựa trên dữ liệu OSM - nhưng tôi hiện đang thiếu khả năng lưu trữ và nền kinh tế cho điều đó. – Frank

5

PostGIS có thể là lựa chọn tốt nhất. Lưu ý: PostGIS PostgreSQL với tiện ích mở rộng địa lý. Bạn nghĩa đen cài đặt postgres, và sau đó chạy các kịch bản khác nhau mà thêm vào các chức năng địa lý và các loại.

Xem OpenStreetMap information about PostGIS. bạn có thể tải các tập tin hành tinh/hành tinh OpenStreetMap, vào PostGIS bằng cách sử dụng osm2pgsql, và đây là những gì được thực hiện trên máy chủ lát OpenStreetMap, nơi trình kết xuất đồ họa Mapnik chạy. Tuy nhiên ...

Ngoài ra còn có lược đồ cơ sở dữ liệu thô hơn cho dữ liệu OpenStreetMap (bảng gọi là "nút" và "cách" v.v.) Đây là những gì chính Máy chủ cơ sở dữ liệu OpenStreetMap sử dụng để lưu trữ dữ liệu địa lý và cho phép chỉnh sửa qua API. Điều này không quá thông minh khi nói đến việc lập chỉ mục không gian, v.v. nhưng tốt đẹp và đơn giản. Bạn có thể tạo cơ sở dữ liệu ở định dạng này bằng cách cài đặt OpenStreetMap API/website ruby on rails code. Đây là cách đáng tin cậy nhất để thiết lập phiên bản cập nhật của database schema (được xác định bởi the rails migrations). Sau đó bạn có thể chạy công cụ osmosis để điền cơ sở dữ liệu.

1

PostGIS không phải là cơ sở dữ liệu duy nhất hỗ trợ dữ liệu không gian địa lý, nhưng điểm giá là rất tốt đẹp. Khó đánh bại "miễn phí". Tuy nhiên, có một số tùy chọn miễn phí khác và một số độc giả có thể đã có một hệ thống cơ sở dữ liệu quan hệ khác và muốn tận dụng kiến ​​thức chuyên môn đó thay vì phải học PostGIS. Bất kỳ cơ sở dữ liệu nào hỗ trợ các đặc tả của Open Geographical Consortium (OGC hoặc OpenGeo) sẽ đủ cho kịch bản mà bạn mô tả.

Và giống như câu châm ngôn từ thế giới nhiếp ảnh - "Máy ảnh tốt nhất là chiếc bạn có với bạn" - đôi khi cơ sở dữ liệu không gian lý tưởng là cơ sở dữ liệu bạn đã có và biết cách sử dụng.

Vì vậy, đây là một danh sách tất cả các tùy chọn tôi biết:

RDBMS không gian - tùy chọn miễn phí có sẵn

  • Oracle (với không gian hoặc Locator) (miễn phí tùy chọn: Oracle XE + Locator)
  • MS SQL server (2008 hoặc mới hơn) (miễn phí tùy chọn: SQL server Express)
  • PostGIS

RDBMS không gian - không có tùy chọn miễn phí

  • DB2 (với Spatial Extender)
  • Informix (với không gian Blade)

ít hơn lý tưởng không gian RDBMS

  • MySQL Spatial (bộ chức năng rất hạn chế)

không gian "mở rộng-Ware"

  • ArcSDE (bạn thêm nó vào một RDBMS hiện có)
Các vấn đề liên quan