SpatiaLite を使ってみる

Windows で SpatiaLite を使用する方法について解説する.

ESRI Shape サンプルファイルの入手

以下の手順で, http://download.geofabrik.de/ から ESRI Shape ファイルをダウンロードする.

  1. http://download.geofabrik.de/ を開く
  2. Antarctica の右横の「.shp.zip」をクリック.
  3. antarctica-latest-free.shp.zip のダウンロードが始まるので確認する.
  4. ダウンロードしたファイルを展開(解凍)する.
  5. 展開(解凍)してできたファイルを確認する.

SpatiaLiteのインストール

  1. The Gaia-SINS federated projects の Web ページ」を開く

    http://www.gaia-gis.it/gaia-sins/index.html

  2. MS Windows binariescurrent stable version をクリック

    x86 (32 bit), amd64 (64 bit) が選べる.どちらを選んだかは覚えておくこと.

    以下,amd64 (64-bit) を選んだとして説明を続ける.

  3. 画面が変わる.「spatialite_gui ...」をクリック.
  4. ファイルのダウンロードが始まる
  5. ダウンロードしたファイルを解凍すると spatialite_gui.exe ができるので確認する.
  6. 確認のため,spatialite_gui.exe を実行してみる.
  7. 新しい画面が開くので確認する.

    以下の手順で動作確認する.

    1. 先ほどダウンロードした ESRI Shape ファイルを使う.
    2. Load Shapefile」をクリック
    3. 先ほどダウンロードした ESRI Shapefile を選ぶ.
    4. 文字コードとして「UTF_8」を選び,「OK」をクリック.
    5. データが読み込まれる
    6. 画面が変わるので確認.
    7. 「gis.osm_natural_a_free_1」のようなテーブルがあるので, 右クリックメニューで,「Edit table rows」を選ぶ.
    8. テーブルの中身が表示される.(表示されたらOK)
    ogr2ogr sample.shp sample.json
    
    ogr2ogr -f "ESRI Shapefile" dst.shp src.shp -dialect SQLITE -sql "select simplify(geometry, 0.001) from org"
    
  8. mod_spatialite.dllとmod_spatialite.soの確認
  9. システム環境変数 Path
  10. SQLite 3の入手
  11. プログラム例(Ubuntu 上)

    SQLite3コマンド

    SELECT load_extension('/usr/local/lib/mod_spatialite.so');
    SELECT InitSpatialMetaData();
    

    Python

    import sqlite3
    import os
    
    # mod_spatialiteのあるフォルダをPATHに加える
    os.environ["PATH"] = os.environ["PATH"] + ';C:\\tool\\spatialite\\mod_spatialite-4.2.0-win-x86'
    
    cnn = sqlite3.connect('database/gyouseikuiki.sqlite')
    # mod_spatialiteの読み込み
    cnn.enable_load_extension(True)
    cnn.execute("SELECT load_extension('./mod_spatialite-4.2.0-win-x86/mod_spatialite.dll');")
    
    sql = """
    SELECT N03_001, N03_002, N03_003, N03_004, N03_007, AsGeoJson(Geometry)
    FROM "N03-14_140401"
    WHERE MBRContains("N03-14_140401".Geometry,GeomFromText('POINT(139.692101 35.689634 )'))
    """
    
    ret = cnn.execute(sql)
    for r in ret:
        print('----------------------------')
        print(r[0].encode('utf_8') )
        print(r[1].encode('utf_8') )
        print(r[2].encode('utf_8') )
        print(r[3].encode('utf_8') )
        print(r[4].encode('utf_8') )
        print(r[5].encode('utf_8') )
    

    SpatiaLite 4.2.0 SQL functions reference list

    http://www.gaia-gis.it/gaia-sins/spatialite-sql-4.2.0.html

    The SpatiaLite Cookbook

    http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/index.html