Tệp sqlite từ NE có định dạng FDO-OGR, không phải là hình học không gian nguyên gốc. Nếu bạn sẵn sàng làm một số lao động thủ công, đây là một cách để chuyển đổi sang db không gian:
Đầu tiên tạo một cơ sở dữ liệu không gian trống mới, trống rỗng (tôi gọi nó là "nev.sqlite"), sau đó trong một phiên cuối cùng riêng biệt, mở tệp gốc_earth_vector.sqlite bằng spatialite. (Tôi đã sử dụng phiên bản mới hơn 4.1. Không chắc điều này có hoạt động với các phiên bản cũ hơn không). Sử dụng attach
hàm sqlite để kết nối với bảng nev.sqlite mới của bạn và tạo các bản sao của các bảng bạn muốn vào cơ sở dữ liệu mới.
Vì thế:
micha@Wheezy:~$ spatialite natural_earth_vector.sqlite
SpatiaLite version ..: 3.0.0-beta Supported Extensions:
- 'VirtualShape' [direct Shapefile access]
- 'VirtualDbf' [direct DBF access]
- 'VirtualXL' [direct XLS access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualNetwork' [Dijkstra shortest path]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'VirtualSpatialIndex' [R*Tree metahandler]
- 'VirtualFDO' [FDO-OGR interoperability]
- 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 version ......: Rel. 4.7.1, 23 September 2009
GEOS version ........: 3.3.3-CAPI-1.7.4
SQLite version ......: 3.7.13
================ FDO-OGR Spatial Metadata detected ===============
.....
created VirtualFDO table 'fdo_ne_110m_geography_regions_points'
created VirtualFDO table 'fdo_ne_110m_geography_regions_polys'
created VirtualFDO table 'fdo_ne_110m_glaciated_areas'
created VirtualFDO table 'fdo_ne_110m_lakes'
created VirtualFDO table 'fdo_ne_110m_land'
created VirtualFDO table 'fdo_ne_110m_ocean'
created VirtualFDO table 'fdo_ne_110m_rivers_lake_centerlines'
Accessing these fdo_XX tables you can take full advantage of
FDO-OGR auto-wrapping facility
This allows you to access any specific FDO-OGR Geometry as if it
where native SpatiaLite ones in a completely transparent way
==================================================================
Enter ".help" for instructions
spatialite> attach "nev.sqlite" AS nev;
spatialite>
spatialite> CREATE TABLE nev.countries AS SELECT * from fdo_ne_10m_admin_0_countries;
spatialite> CREATE TABLE nev.populated_places AS SELECT * FROM fdo_ne_10m_populated_places;
spatialite> CREATE TABLE nev.railroads AS SELECT * FROM fdo_ne_10m_railroads;
spatialite> .q
*** FDO-OGR auto-wrapping shutdown done ***
Tất cả các dòng "được tạo VirtualFDO ..." chỉ ra rằng Spatialite đã nhận ra dữ liệu dưới dạng FDO và tạo các bảng ảo cho mỗi bảng với GEOMETRY được chuyển đổi sang định dạng spatialite. Tôi attach
đến cơ sở dữ liệu "nev" mới của mình và tạo các bảng mới cho mỗi lớp mà tôi quan tâm với các CREATE TABLE ... AS SELECT * FROM ...
câu lệnh.
Bây giờ tôi chuyển trở lại cơ sở dữ liệu không gian mới . Và chạy RecoverGeometryColumn()
trên mỗi bảng để có cơ sở dữ liệu không gian phù hợp, với tất cả siêu dữ liệu, v.v ... Lưu ý rằng định dạng FDO cho phép các loại hình học MULTI và SINGLE hỗn hợp, vì vậy trước tiên tôi kiểm tra loại hình học nào mỗi bảng chứa và đảm bảo rằng tất cả các tính năng đều có giống nhau. Tôi sử dụng CastToMulti()
bất cứ khi nào cần thiết, như vậy:
micha@Wheezy:~/GIS/World/naturalearthdata.com$ spatialite nev.sqlite
SpatiaLite version ..: 4.1.1 Supported Extensions:
- 'VirtualShape' [direct Shapefile access]
- 'VirtualDbf' [direct DBF access]
- 'VirtualXL' [direct XLS access]
- 'VirtualText' [direct CSV/TXT access]
- 'VirtualNetwork' [Dijkstra shortest path]
- 'RTree' [Spatial Index - R*Tree]
- 'MbrCache' [Spatial Index - MBR cache]
- 'VirtualSpatialIndex' [R*Tree metahandler]
- 'VirtualFDO' [FDO-OGR interoperability]
- 'SpatiaLite' [Spatial SQL - OGC]
PROJ.4 version ......: Rel. 4.7.1, 23 September 2009
GEOS version ........: 3.3.3-CAPI-1.7.4
SQLite version ......: 3.7.13
Enter ".help" for instructions
SQLite version 3.7.13 2012-06-11 02:05:22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
spatialite> .tables
SpatialIndex geometry_columns_auth spatialite_history
countries populated_places sql_statements_log
geom_cols_ref_sys railroads views_geometry_columns
geometry_columns spatial_ref_sys virts_geometry_columns
spatialite>
spatialite> SELECT GeometryType(GEOMETRY) FROM countries;
POLYGON
POLYGON
MULTIPOLYGON
MULTIPOLYGON
POLYGON
MULTIPOLYGON
POLYGON
MULTIPOLYGON
MULTIPOLYGON
.....
Hình học được trộn lẫn, vì vậy hãy đặt mọi thứ MULTI, sau đó thực hiện RecoverGeometryColumn ():
spatialite> UPDATE countries SET GEOMETRY=CastToMulti(GEOMETRY);
spatialite> SELECT RecoverGeometryColumn('countries','GEOMETRY',4326,'MULTIPOLYGON',2);
1
spatialite>
Và như vậy cho mỗi bảng bạn cần. Bây giờ các bảng có sẵn trong QGIS.