QGIS와 함께 Natural Earth SQLite DB를 어떻게 사용합니까?


9

http://www.naturalearthdata.com/downloads/ 에서 SQLite 형식으로 Natural Earth 데이터를 다운로드했습니다 . 나는 이것이 SpatiaLite 데이터베이스라고 가정했지만 그렇지 않은 것 같습니다! QGIS가 공간 데이터베이스로 인식하지 못했습니다. OGR은 일반 SQLite 데이터베이스에 저장된 경우에도 기하학 읽기를 지원하지만 QGIS는 SpatiaLite에 OGR을 사용하지 않습니까?

SQLite 데이터베이스에는 geometry_columns 및 공간 _ref_sys 테이블이 있습니다. 전체 SpatiaLite 데이터베이스로 변환 할 수있는 방법이 있습니까?

답변:


9

NE의 sqlite 파일은 기본 공간적 형상이 아니라 FDO-OGR 형식입니다. 육체 노동을 기꺼이 원한다면 다음은 공간 데이터베이스로 변환하는 방법입니다.

먼저 새로운 빈 공간 라이트 데이터베이스 ( "nev.sqlite"라고 함)를 만든 다음 별도의 터미널 세션에서 공간을 사용하여 원래 natural_earth_vector.sqlite를 엽니 다. (최신 버전 4.1을 사용했습니다. 이전 버전에서 작동하는지 확실하지 않습니다). sqlite attach함수를 사용하여 새 nev.sqlite 테이블에 연결하고 새 데이터베이스에 원하는 테이블의 사본을 작성하십시오.

그래서:

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 ***

"VirtualFDO ...를 생성 한"모든 행은 Spatialite가 데이터를 FDO 형식으로 인식하고 GEOMETRY가 공간적 형식으로 변환 된 각각에 대해 가상 테이블을 생성했음을 나타냅니다. 나는 attach새로운 "nev"데이터베이스에 접속하고 CREATE TABLE ... AS SELECT * FROM ...진술에 관심이있는 각 계층에 대해 새로운 테이블을 만듭니다 .

이제 새로운 공간 데이터베이스로 다시 전환 합니다. RecoverGeometryColumn()모든 메타 데이터 등을 포함한 적절한 공간 데이터베이스를 얻기 위해 각 테이블에서 실행 하십시오. FDO 형식은 MULTI 및 SINGLE 지오메트리 유형을 혼합 할 수 있으므로 먼저 각 테이블에 포함 된 지오메트리 유형을 확인하고 모든 기능이 있는지 확인하십시오. 똑같다. 내가 사용 CastToMulti()과 같이, 필요한 곳에 :

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
.....

도형이 혼합되어 있으므로 모든 것을 MULTI로 설정 한 다음 RecoverGeometryColumn ()을 수행하십시오.

spatialite> UPDATE countries SET GEOMETRY=CastToMulti(GEOMETRY);
spatialite> SELECT RecoverGeometryColumn('countries','GEOMETRY',4326,'MULTIPOLYGON',2);
1
spatialite> 

그리고 당신이 필요로하는 각 테이블에 대해서도 마찬가지입니다. 이제 테이블을 QGIS에서 사용할 수 있습니다.


철저한 답변에 감사드립니다. FDO를 사용하여 일부 테이블 만 "가져온"이유를 알고 있습니까? FDO 치료를받는 128 개 테이블 중 30 개를 계산합니다. 원래 버전과 fdo 버전의 PRAGMA는 동일하므로 지오메트리 자체에 차이가 있다고 가정합니다. 그러나 geometry_columns는 모든 도형이 WKB라고 생각합니다.
Lee Hachadoorian

미카, 나는 이것을 최선의 대답으로 골랐다. 테이블을 자세히 살펴보면 데이터베이스가 VirtualFDO를 통해 사용할 수있는 테이블 중 일부와 Geometry는 있지만 SpatiaLite와 호환되지 않는 테이블 중 일부만 패키지되어 있다는 것이 이상합니다. 이 방법으로 변환하는 대신 모양 파일을 다운로드하여 SpatiaLite (PostGIS에서 이미 수행 한 파일)로 가져와야한다고 생각합니다. 그러나 이것은 여전히 ​​매우 유익한 답변이었습니다. 시간을내어 작성해 주셔서 감사합니다.
Lee Hachadoorian

공간 데이터베이스를 원하고 공간 지원이 컴파일 된 GDAL / OGR이있는 경우 ogr2ogr -f sqlite -dscopatiiteite = yes splite.db nat_earth.db가 작동합니다.

3

Add vector layer ...QGIS 2.0.1에서 데이터베이스의 데이터를 추가 할 수 있습니다 .

그러나 인내심은 많은 데이터입니다.

불행히도 Qspatialite 플러그인은 데이터 나 Spatialite 추가 대화 상자를 처리 할 수 ​​없습니다.


Andre, 정말 유용한 정보입니다. QGIS가 OGR을 사용하여 SQLite-not-SpatiaLite 데이터베이스의 데이터를 추가 할 수 있다는 것을 몰랐습니다.
Lee Hachadoorian

또한 레이어를 추가하는 두 가지 방법이있는 이유를 이해하지 못하며 한
가지만
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.