mysql:16513
From: SAKAI Kei <SAKAI Kei <sakaik@xxxxxxxxxx>>
Date: Mon, 18 Feb 2019 16:50:45 +0900
Subject: [mysql 16513] Re: [mysql 16511] 関数Polygon(ls1,ls2,...)が動きません
坂井です。
POLYGON
関数、そのように線の断片を与えると結合してくれるようなものではなく(そういう関数もほしいのですが=LineMerge()みたいに=まだ見あたらないですね)、
閉じた LineString 、つまり、単なるポリゴンの縁取り部分の線を、中身の詰まったPOLYGON にしてくれるものだと思います。
なので、
SELECT ST_AsText(
POLYGON(
ST_LineFromText('LINESTRING(1 1, 1 5, 5 5, 5 1, 1 1)'),
ST_LineFromText('LINESTRING(2 2, 3 3, 3 2, 2 2)')
)
);
のようにして使います。
第2引数以下は、WKTのPOLYGONの書き方と同様、くり抜く部分かと思います。
@変数が使えないのは、渡辺さんもかかれているとおり、何故ですかね。。使えても良さそうな場所でもあり、若干バグ報告な香りもしますが、他の皆さんからの情報も伺いたいところです。
2019年2月18日(月) 11:47 落合 司郎 <s.ochiai@xxxxxxxxxx>:
> お世話になります。
>
> 関数Polygon(ls1,ls2,...)を以下のように試してみましたが、以下のエラーが出てポリゴンを作れません。
> MySQL ver5.7とver8.0の二つで試しましたが、結果は同じでした。
> ちなみに、Polygon(ls1,ls2,...)の引数として渡したパラメータの型を確認しましたが、全て'LINESTRING'となっています。
> 何がいけないのか、教えてください。
>
> Error Code: 1367. Illegal non geometric '(@`ls1`)' value found during
> parsing
>
> 実行したスクリプト
> SET
> @ls1 = ST_LineFromText('linestring(4010 5009,4015 5005)'),
> @ls2 = ST_LineFromText('linestring(4015 5005,4018 5010)'),
> @ls3 = ST_LineFromText('linestring(4018 5010,4012 5010)'),
> @ls4 = ST_LineFromText('linestring(4012 5010,4018 5013)'),
> @ls5 = ST_LineFromText('linestring(4018 5013,3995 5013)'),
> @ls6 = ST_LineFromText('linestring(3995 5013,3995 5000)'),
> @ls7 = ST_LineFromText('linestring(3995 5000,4010 5009)');
> select
>
> ST_GeometryType(@ls1),ST_GeometryType(@ls2),ST_GeometryType(@ls3),ST_GeometryType(@ls4),ST_GeometryType(@ls5),ST_GeometryType(@ls6),ST_GeometryType(@ls7);
> select ST_AsText(@ls1);
> SET @npoly = POLYGON(@ls1,@ls2,@ls3,@ls4,@ls5,@ls6,@ls7);# ここでエラー
> select @npoly,ST_GeometryType(@npoly),ST_AsText(@npoly);
>
> 実行環境:
> OS:Windows 8.0 64ビット
> MySQL:Ver.5.7.18-log
> Workbench:Ver.6.3.9
>
>
16511 2019-02-18 11:47 [落合 司郎 <s.ochiai@] 関数Polygon(ls1,ls2,...)が動きません 16512 2019-02-18 16:08 ┣[Watanabe Tomoyuki <W] RE: [mysql 16511] 関数Polygon(ls1,ls2,...)が動きません -> @ 16513 2019-02-18 16:50 ┗[SAKAI Kei <sakaik@xx] Re: [mysql 16511] 関数Polygon(ls1,ls2,...)が動きません