Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー 空間データサポート » 空間データの使用 » チュートリアル:空間機能の実験

 

レッスン 3:ESRI シェイプファイルデータのロード

このレッスンでは、ESRI シェイプファイル内のカラムを特定し、その情報を使用して、データをロードするテーブルを作成する方法を説明します。

 ♦ ESRI シェイプファイルからデータベースへの空間データのロード
  1. 空間データは特定の空間参照系に関連付けられているため、データベースにデータをロードする場合、同じ空間参照系、または少なくとも等価な定義を持つ空間参照系にロードする必要があります。ESRI シェイプファイルの空間参照系情報を確認するには、プロジェクトファイル c:\temp\massdata\tl_2009_25_zcta5.prj をテキストエディターで開きます。このファイルには、この手順に必要な空間参照系情報が含まれています。

    GEOGCS["「GCS_North_American_1983」", DATUM["D_North_American_1983",
    SPHEROID["GRS_1980",6378137,298.257222101]], 
    PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]

    文字列 「GCS_North_American_1983」 は、データに関連付けられている空間参照系の名前です。

  2. ST_SPATIAL_REFERENCE_SYSTEMS ビューに問い合わせてみると (SELECT * FROM ST_SPATIAL_REFERENCE_SYSTEMS WHERE srs_name='GCS_North_American_1983';)、この名前は定義済みの SRS のリストにはありません。ただし、同じ定義の空間参照系を問い合わせて、代わりにそれを使用できます。

    SELECT *
    FROM ST_SPATIAL_REFERENCE_SYSTEMS
    WHERE definition LIKE '%1983%' 
    AND definition LIKE 'GEOGCS%';

    このクエリは、 1 つの同じ定義を持つ SRID 「4269」 の空間参照系 NAD83 を返します。これがシェイプファイルからデータをロードするために割り当てる SRID です。

  3. Interactive SQL で、次の文を実行して、Massdata というテーブルを作成し、シェイプファイルをテーブルにロードして、データに SRID 4269 を割り当てます。ロードには数分かかることがあります。

    CALL st_geometry_load_shapefile ( 'c:\\temp\\massdata\\tl_2009_25_zcta5.shp', 
    4269, 
    'Massdata' );

    を参照してください。

    注意

    [インポートウィザード]でも、シェイプファイルからのデータのロードがサポートされています。インポートウィザード (Interactive SQL) でのデータのインポートを参照してください。

  4. Interactive SQL で、テーブルをクエリし、シェイプファイルにあったデータを表示します。

    SELECT * FROM Massdata;

    結果の各ローは、郵便番号区域のデータを表します。

    geometry カラムには、多角形 (1 つの領域) または複数多角形 (複数の隣接しない領域) として、郵便番号区域のシェイプ情報が保持されています。

  5. ZCTA5CE カラムには郵便番号が格納されています。このカラムをチュートリアルの後半で簡単に参照できるようにするため、Intaractive SQL で ALTER TABLE 文を実行して、カラム名をZIP に変更します。:

    ALTER TABLE Massdata
    RENAME ZCTA5CE TO ZIP; 
  6. 2 つのカラム INTPTLON と INTPTLAT は、郵便番号区域の中心ポイントの X 座標と Y 座標を表しています。Interactive SQL で次の ALTER TABLE 文を実行して、ST_Point タイプの CentePoint というカラムを作成し、それぞれの X と Y を CenterPoint の値にします。

    ALTER TABLE Massdata
    ADD CenterPoint AS ST_Point(SRID=4269)
    COMPUTE( new ST_Point( CAST( INTPTLON AS DOUBLE ), CAST( INTPTLAT AS DOUBLE ), 4269 ) );

    これで、Massdata.CenterPoint の ST_Point 値が、Massdata.geometry に格納された郵便番号区域の中心ポイントを表すようになりました。

  7. 個別のジオメトリ (郵便番号区域) をシェイプとして表示するには、Massdata.geometry の最初の値以外をダブルクリックし、[カラムの値] ウィンドウの [空間プレビュー] タブをクリックします。

    値が大きすぎるというエラー、または結果にプライマリキーを含めることを推奨するというエラーを受け取った場合、Interactive SQL で表示するために値がトランケートされたことが原因です。これを解決するには、クエリを変更して、結果にプライマリキーカラムが含まれるようにするか、Interactive SQL の [トランケーションの長さ] 設定を調整します。Interactive SQL でジオメトリを表示するために、ジオメトリを問い合わせるたびにプライマリキーを含める必要をなくしたい場合は、設定の変更をおすすめします。

    Interactive SQL の [トランケーションの長さ] 設定を変更するには、[ツール] » [オプション] » [SQL Anywhere] をクリックし、[トランケーションの長さ] を 100000 などの大きい値に設定します。

  8. データセット全体を 1 つのシェイプとして表示するには、[ツール] » [空間ビューアー] をクリックして、SQL Anywhere の [空間ビューアー] を開き、Interactive SQL で次のクエリを実行します。

    SELECT geometry FROM Massdata
    UNION ALL SELECT CenterPoint FROM Massdata;
    マサチューセッツ州が、郵便番号区域をそれぞれ表す色付きの多角形の集まりとして表示されます。各多角形の中の点は中心点をマークしています。
  9. レッスン 4:空間データのクエリに進みます。