Documentation Home
MySQL 8.0 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 36.1Mb
PDF (A4) - 36.2Mb
HTML Download (TGZ) - 10.0Mb
HTML Download (Zip) - 10.1Mb


このページは機械翻訳したものです。

12.17.11 空間 GeoJSON 関数

このセクションでは、GeoJSON ドキュメントと空間値の間の変換関数について説明します。 GeoJSON は、ジオメトリ/地理的特徴をエンコードするためのオープンスタンダードです。 詳細は、http://geojson.orgを参照してください。 ここで説明する関数は、GeoJSON 仕様リビジョン 1.0 に従います。

GeoJSON では、MySQL でサポートされているものと同じジオメトリデータ型または地理データ型がサポートされます。 ジオメトリオブジェクトが抽出される点を除き、フィーチャおよび FeatureCollection オブジェクトはサポートされていません。 CRS のサポートは SRID を識別する値に制限されています。

MySQL では、JSON 値に対する操作を可能にするために、ネイティブの JSON データ型および一連の SQL 関数もサポートされています。 詳細は、セクション11.5「JSON データ型」およびセクション12.18「JSON 関数」を参照してください。

  • ST_AsGeoJSON(g [, max_dec_digits [, options]])

    ジオメトリ g から GeoJSON オブジェクトを生成します。 オブジェクト文字列には、接続文字セットと照合順序があります。

    いずれかの引数が NULL の場合、戻り値は NULL です。 NULL 以外の引数が無効な場合は、エラーが発生します。

    max_dec_digits を指定すると、座標の小数点以下の桁数が制限され、出力が丸められます。 指定しない場合、この引数のデフォルトは 2 32− 1 の最大値です。 最小値は 0 です。

    options はビットマスクです (指定されている場合)。 次のテーブルに、許可されるフラグ値を示します。 ジオメトリ引数の SRID が 0 の場合は、要求するフラグ値に対しても CRS オブジェクトは生成されません。

    フラグ値 意味
    0 オプションなし。 これは、options が指定されていない場合のデフォルトです。
    1 バウンディングボックスを出力に追加します。
    2 短い形式の CRS URN を出力に追加します。 デフォルトの形式は短い形式 (EPSG:srid) です。
    4 長い形式の CRS URN (urn:ogc:def:crs:EPSG::srid) を追加します。 このフラグはフラグ 2 をオーバーライドします。 たとえば、オプション値 5 と 7 は同じことを意味します (バウンディングボックスと長い形式の CRS URN を追加します)。
    mysql> SELECT ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2);
    +-------------------------------------------------------------+
    | ST_AsGeoJSON(ST_GeomFromText('POINT(11.11111 12.22222)'),2) |
    +-------------------------------------------------------------+
    | {"type": "Point", "coordinates": [11.11, 12.22]}            |
    +-------------------------------------------------------------+
  • ST_GeomFromGeoJSON(str [, options [, srid]])

    GeoJSON オブジェクトを表す文字列 str を解析し、ジオメトリを戻します。

    いずれかの引数が NULL の場合、戻り値は NULL です。 NULL 以外の引数が無効な場合は、エラーが発生します。

    options では、座標ディメンションが 2 より大きいジオメトリを含む GeoJSON 文書の処理方法を説明します (指定されている場合)。 次のテーブルに、許可される options 値を示します。

    オプション値 意味
    1 ドキュメントを却下し、エラーを生成します。 これは、options が指定されていない場合のデフォルトです。
    2, 3, 4 ドキュメントを受け入れ、より高い座標寸法の座標を除去します。

    options の値が 2、3 および 4 の場合、現在も同じ結果になります。 座標ディメンションが 2 より大きいジオメトリが将来サポートされる場合は、これらの値によって異なる効果が生じる可能性があります。

    srid 引数を指定する場合は、32 ビットの符号なし整数である必要があります。 指定しない場合、ジオメトリの戻り値の SRID は 4326 になります。

    srid が未定義の空間参照システム (SRS) を参照すると、ER_SRS_NOT_FOUND エラーが発生します。

    地理 SRS ジオメトリ引数で、範囲外の経度または緯度を持つ引数がある場合、エラーが発生します:

    • 経度の値が (−180, 180]の範囲にない場合は、ER_LONGITUDE_OUT_OF_RANGE エラーが発生します。

    • 緯度の値が[−90, 90]の範囲にない場合は、ER_LATITUDE_OUT_OF_RANGE エラーが発生します。

    表示される範囲は度数です。 SRS で別の単位が使用されている場合、範囲ではその単位に対応する値が使用されます。 浮動小数点演算のため、正確な範囲制限はわずかに偏差します。

    GeoJSON ジオメトリ、地物および地物コレクションオブジェクトには、crs プロパティがある場合があります。 解析関数は、urn:ogc:def:crs:EPSG::srid および EPSG:srid ネームスペース内の名前付き CRS URN を解析しますが、リンクオブジェクトとして指定された CRS は解析しません。 また、urn:ogc:def:crs:OGC:1.3:CRS84 は SRID 4326 として認識されます。 オブジェクトに認識されない CRS がある場合、エラーが発生しますが、オプションの srid 引数が指定された場合、CRS は無効であっても無視されます。

    トップレベルオブジェクト SRID とは異なる SRID を指定する crs メンバーが GeoJSON 文書の下位レベルで見つかった場合、ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL エラーが発生します。

    GeoJSON 仕様で指定されているように、GeoJSON 入力 (PointLineString など) の type メンバーの解析では大/小文字が区別されます。 この指定は、MySQL では大/小文字が区別されない、他の解析の大/小文字の区別に関するサイレントです。

    この例は、単純な GeoJSON オブジェクトの解析結果を示しています。 座標の順序が使用される SRID に依存することを確認します。

    mysql> SET @json = '{ "type": "Point", "coordinates": [102.0, 0.0]}';
    mysql> SELECT ST_AsText(ST_GeomFromGeoJSON(@json));
    +--------------------------------------+
    | ST_AsText(ST_GeomFromGeoJSON(@json)) |
    +--------------------------------------+
    | POINT(0 102)                         |
    +--------------------------------------+
    mysql> SELECT ST_SRID(ST_GeomFromGeoJSON(@json));
    +------------------------------------+
    | ST_SRID(ST_GeomFromGeoJSON(@json)) |
    +------------------------------------+
    |                               4326 |
    +------------------------------------+
    mysql> SELECT ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0));
    +-------------------------------------------------+
    | ST_AsText(ST_SRID(ST_GeomFromGeoJSON(@json),0)) |
    +-------------------------------------------------+
    | POINT(102 0)                                    |
    +-------------------------------------------------+