0

Spatialite plugin trong Sqlite lưu dữ liệu bản đồ bài 1

I.Tổng quát

SpatiaLite là một thư viện mã nguồn mở nhằm mở rộng lõi SQLite cơ bản để hỗ trợ khả năng SQL không gian chính thức đầy đủ.

SQLite là bản chất đơn giản và lighweight:

  • một thư viện ligthweight đơn thực hiện các công cụ SQL đầy đủ.
  • SQL thực hiện tiêu chuẩn: gần như hoàn toàn SQL-92.
  • không có khách hàng / máy chủ phức tạp kiến ​​trúc.
  • toàn bộ cơ sở dữ liệu đơn giản chỉ tương ứng với một tập tin khối đơn [không có giới hạn kích thước].
  • DB-file có thể được trao đổi một cách an toàn trên các nền tảng khác nhau, bởi vì cấu trúc nội bộ là phổ cầm tay.
  • không cần cài đặt, không cần cấu hình.

SpatiaLite được suôn sẻ tích hợp vào SQLite như vậy để triển khai đầy đủ và mạnh mẽ không gian DBMS [chủ yếu là OGC-SFS phù]. Tất cả điều này bảo quản đầy đủ sự nhẹ nhàng và đơn giản đặc trưng của SQLite chính nó. Đó không phải là tất cả: SpatiaLite hỗ trợ truy cập SQL trực tiếp đến một số thường được sử dụng bên ngoài datasources , điều này bao gồm:

  • ESRI Shapefiles .

  • DBF Archive Files.

  • TXT / CSV cấu trúc tập tin văn bản.

  • Bảng tính [định dạng .xls]. Và SpatiaLite tích cực hỗ trợ nhiều ký hiệu tiêu chuẩn thay thế Hình học:

  • WKT [Vâng biết Text] và WKB [Vâng biết Binary].

  • PostGIS riêng EWKT và EWKB [Mở rộng WKT / WKB].

  • GML [GML, cả v2 và v3].

  • KML [Keyhole Markup Language, được sử dụng bởi Google Maps và Google Earth].

  • GeoJSON [Hình học Java Script Object Notation].

  • SVG [Scalable Vector Graphics]. Kết luận: sử dụng SQLite + SpatiaLite bạn có thể triển khai một DBMS không gian thay thế tương đương với PostgreSQL + PostGIS. Sự khác biệt chính giữa chúng không có trong powerness, nhưng chủ yếu là dựa trên kiến trúc:

  • PostgrSQL + PostGIS hỗ trợ đầy đủ kiến trúc client / server. Điều này cũng phù hợp với cơ sở hạ tầng dữ liệu không gian phức tạp và tinh vi, nhưng chắc chắn bao hàm một mức độ nhất định của sự phức tạp.

  • SQLite + SpatiaLite hỗ trợ nhiều hơn nữa kiến trúc cá nhân đơn giản nhất. Điều này là phù hợp nhất cho máy tính để bàn, độc lập, hoạt động cá nhân.

Lựa chọn một hay khác chỉ đơn giản phụ thuộc vào yêu cầu cụ thể của bạn:

  • không ai là tốt hơn so với một trong những khác: họ chỉ đơn giản là được tối ưu hóa cho envoronments khác nhau.
  • cả hai chúng gần như có thể hỗ trợ khả năng xử lý dữ liệu không gian tương tự.
  • cảm thấy tự do để lựa chọn một trong những phù hợp nhất cho phù hợp với mục tiêu hiệu quả của bạn.

II.Xây dựng thư viện.

Xây dựng và lắp đặt các thư viện SpatiaLite là đơn giản:

./configure 
make 
make install

Xin lưu ý: SpatiaLite phụ thuộc vào các thư viện mã nguồn mở sau đây:

  • GNU iconv
  • hỗ trợ bảng mã miền địa phương charset
  • GEOS
  • cơ Geometry
  • PROJ.4
  • không gian hệ thống tham chiếu xử lý [phối hợp tái chiếu]
  • FreeXL
  • hỗ trợ đầu vào bảng tính [định dạng .xls]

Các thư viện có hai hương vị khác nhau:

  • libspatialite chuẩn, thư viện kinh điển: cách tốt nhất và an toàn nhất để triển khai SpatiaLite. điều này rõ ràng phụ thuộc vào bên ngoài libsqlite: đảm bảo sự gắn kết đầy đủ giữa các thư viện. nhiệt liệt reccomended, chủ yếu là trên các hệ thống Unix.
  • libspatialite-hợp nhất Toàn bộ thư viện được hợp nhất vào một tập tin khối duy nhất và bao gồm một nội tin bản sao của libsqlite . Sử dụng hỗn tạp của thư viện có thể đơn giản hóa mạnh mẽ bất kỳ quá trình cài đặt sau đây, và độc đáo hỗ trợ tĩnh liên kết . Dù sao, bạn một cách an toàn có thể áp dụng hợp nhất approch chỉ để ứng dụng tự đứng. Cố gắng sử dụng các amalgated thư viện trên các khuôn khổ phức tạp hoặc kết nối dữ liệu / cam kết ràng buộc ngôn ngữ có thể dễ dàng gây ra xung đột nghiêm trọng.

III.triển khai

Bạn có thể triển khai SpatiaLite trong hai cách thay thế:

  • bạn có thể tải các thư viện SpatiaLite như một động mở rộng để SQLite. Điều này cho phép SQLite để hỗ trợ SQL dữ liệu không gian [Geometry] và SQL không gian chức năng. Theorically, bất kỳ công cụ hoặc ngôn ngữ kết nối chung hỗ trợ SQLite có thể hỗ trợ này mở rộng cơ chế; thật đáng buồn , đôi khi tính năng này được cố ý vô hiệu hóa.

Làm thế nào để tải SpatiaLite như một phần mở rộng năng động để SQLite:

Select  load_extension ( 'spatialite_dynamic_library_name');
  • bạn có thể trực tiếp liên kết các thư viện SpatiaLite cho bất kỳ ứng dụng của riêng bạn. Điều này cho phép bạn gửi một hoàn thành, mạnh mẽ, tự chứa công cụ SQL không gian trực tiếp hỗ trợ các ứng dụng của bạn. Và công cụ SQL không gian đó không yêu cầu bất kỳ cài đặt hay cấu hình gì cả. Đó không phải là tất cả: liên kết các SpatiaLite để ++ code C / C của riêng của bạn, bạn không chỉ đơn giản là hạn chế sử dụng SQL: áp dụng phương pháp này bạn có thể trực tiếp truy cập vào API C hoàn thành.

Liên kết SpatiaLite đến mã riêng của bạn thường là đơn giản:

gcc -o my_program.c my_program -lspatialite

Trên một số hệ thống, bạn có thể phải cung cấp một bố trí hơi phức tạp hơn:

gcc -I / usr / local / include my_program.c -o my_program \ 
  -L / usr / local / lib -lpsatialite -lsqlite -lgeos_c -lgeos \ 
  -lproj -lfreexl -liconv -lm -lstdc ++

SpatiaLite cũng cung cấp hỗ trợ pkg-config, vì vậy bạn cũng có thể làm

gcc -I / usr / local / include my_program.c -o my_program \ 
  'pkg-config --libs spatialite`

IV. Khởi tạo và sử dụng spatialite

Trong ví dụ này chúng ta sẽ tạo ra từ đầu một cơ sở dữ liệu rỗng hoàn toàn mới và sau đó cho ăn nó với các shapefile của chúng tôi. Tạo một cơ sở dữ liệu SQLite mới thực sự là đơn giản, bạn chỉ cần có để bắt đầu một phiên SQLite mới:

spatialite my_new_db.sqlite

Khi SQLite bắt đầu một phiên làm việc mới, nếu db mà bạn yêu cầu không tồn tại, nó sẽ tạo ra một cái mới.

SpatiaLite version ..: 2.2 Supported Extensions:
    - 'VirtualShape' [direct Shapefile access]
    - 'VirtualText [direct CSV/TXT access]
    - 'RTree' [Spatial Index - R*Tree]
    - 'MbrCache' [Spatial Index - MBR cache]
    - 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 version ......: Rel. 4.6.1, 21 August 2008
GEOS version ........: 3.0.0-CAPI-1.4.1
SQLite version ......: 3.6.2
Enter ".help" for instructions
spatialite>

phiên SQLite bắt đầu, và hiện đang kết nối với cơ sở dữ liệu my_new_db.sqlite; bạn gõ các lệnh sau để thiết lập các tùy chọn khác nhau để định dạng đầu ra:

spatialite> .nullvalue NULL
spatialite> .headers trên
spatialite> cột .mode
spatialite>

Đó là luôn luôn những thứ cùng một tiêu chuẩn, bạn đã biết ... Bây giờ thử: spatialite> .tables spatialite>

Chỉ thị .tables gây SQLite để liệt kê tất cả các bảng chứa trong cơ sở dữ liệu hiện hành. Như bạn có thể thấy, đây là một thương hiệu cơ sở dữ liệu mới, và không chứa bất kỳ chưa bàn. Bạn có thể kiểm tra quá (sử dụng một cửa sổ khác nhau), mà sau khi thực hiện .tables một tập tin có tên my_new_db.sqlite vừa được tạo ra trong thư mục hiện tại của bạn. Bây giờ bạn có thể thử để cư cơ sở dữ liệu này nhập khẩu các shapefile tạo ra trước đó:

spatialite> .loadshp shape_regions NewRegions CP1252
=========
Loading shapefile at 'shape_regions' into SQLite table 'NewRegions'

BEGIN;
CREATE TABLE NewRegions (
PK_UID INTEGER PRIMARY KEY AUTOINCREMENT,
PK_UID_X0 INTEGER NOT NULL,
Name TEXT NOT NULL,
Geometry BLOB NOT NULL);
INSERT INTO NewRegions (
PK_UID,PK_UID_X0,Name,Geometry)
VALUES (1,1,'VENETO',
GeomFromWkb(X'01030000000100000006000000ECE8268020FA2641139C...', -1));
...
COMMIT;

Inserted 109 rows into 'NewRegions' from SHAPEFILE

spatialite> lệnh vĩ mô SpatiaLite .loadshp nhập khẩu toàn bộ một shapefile tạo một bảng cơ sở dữ liệu mới. SpatiaLite xử lý lệnh đối số vĩ mô như họ nơi đối số shell:

  • Lập luận # 1 là tên đường dẫn của shapefile phải nhập khẩu. Thông báo quan trọng: bạn phải xác định con đường này không gắn thêm bất kỳ .shp, .shx hoặc hậu tố .dbf
  • Lập luận # 2 xác định tên bảng được tạo ra. Bảng này phải không tồn tại trước khi tải shapefile
  • Lập luận # 3 đưa ra các charset_name sử dụng để mã hóa các giá trị thuộc tính chữ số của shapefile. Bạn có nhớ không? Chúng tôi sử dụng CP1252 của Windows Latin-1 khi xuất khẩu shapefile.
  • Lập luận # 4 [tùy chọn] khi quy định bộ giá trị SRID yêu cầu. Trong các ví dụ này, chúng tôi đã không chỉ định nó, vì vậy mặc định -1 đã được mặc nhiên thừa nhận.
  • Lập luận # [tùy chọn] 5 khi định chọn tên cột hình học. Trong các ví dụ này, chúng tôi đã không chỉ định nó, vì vậy mặc định Hình học đã được mặc nhiên thừa nhận. Hãy để chúng tôi nhanh chóng xác định một số điểm thú vị:
  • CREATE TABLE câu lệnh SQL được sử dụng để tạo ra một bảng mới và xác định các cột của nó.
  • INSERT INTO là một câu lệnh SQL được sử dụng để tạo ra các hàng mới trong một bảng.
  • ANALYZE và VACUUM SQL lệnh cho SQLite để tổ chức lại và tái cấu trúc cơ sở dữ liệu. Nó luôn luôn là một ý tưởng rất tốt để thực hiện chúng mỗi khi bạn chèn thêm hoặc xóa một lượng lớn dữ liệu, để duy trì db của bạn trong một nhà nước thực hiện tốt.
  • BEGIN và COMMIT câu lệnh SQL định nghĩa một giao dịch; một giao dịch duy nhất được thiết kế để xác định một hoạt động nguyên tử. nghĩa là toàn bộ giao dịch sẽ thành công hay thất bại, nếu có điều gì sai vì lý do nào, db của chúng tôi sẽ không thay đổi.

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí