細かい図形描画


テストデータ (鯖江市)
https://www.city.sabae.fukui.jp/pageview.html?id=13892

等高線等の細かいラインの描画時、レコードが多すぎると速度が遅い
S10000
© 鯖江市

保持したい属性は表示用カテゴリぐらいだし、
レコードを集約してかつインデックスが効きやすいサイズに千切りたい。
SQL Server 2012ならば集計関数があるので纏めやすい。


SELECT * INTO LINE2500_MESH FROM
(
SELECT
 INTER_TAB.TYPE_CD
 ,INTER_TAB.CODE
 ,GEOMETRY::UnionAggregate(INTER_TAB.SHAPE) SHAPE
FROM
(
SELECT
 DST.分類コード TYPE_CD,
 SRC.Shape.STIntersection(DST.SHAPE) SHAPE
 ,SRC.MESH1_ID + SRC.MESH2_ID + SRC.MESH3_ID CODE
FROM
 MESH3 SRC
RIGHT OUTER JOIN
 LINE2500 DST
ON
 SRC.Shape.STIntersects(DST.SHAPE) = 1
) INTER_TAB
GROUP BY
 INTER_TAB.CODE, INTER_TAB.TYPE_CD
) L_M
;

レコード数やサイズによっては表示範囲次第で劣化するが劣化具合をコントロールしやすい
メッシュサイズをどの程度にするかと対象をどの程度の表示範囲で見てレコード数や図形数がどの程度に収まるかを検討することが重要

縮尺 レイヤ 表示ミリ秒
1:60,000 集約済み 489.51
1:60,000 集約なし 12533.46
1:10,000 集約済み 767.7
1:10,000 集約なし 1099.95
1:1,000 集約済み 627.55
1:1,000 集約なし 72.31

カテゴリー: 運用 タグ: , パーマリンク