このセクションでは、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::
) を追加します。 このフラグはフラグ 2 をオーバーライドします。 たとえば、オプション値 5 と 7 は同じことを意味します (バウンディングボックスと長い形式の CRS URN を追加します)。srid
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:
ネームスペース内の名前付き CRS URN を解析しますが、リンクオブジェクトとして指定された CRS は解析しません。 また、srid
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 入力 (
Point
、LineString
など) の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) | +-------------------------------------------------+