2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Maprayでベクトルタイルを扱う

Last updated at Posted at 2025-12-15

Maprayはベクトルタイルのレンダリングに対応しています。

ですが最新のv0.9.6では動かないので動くようにします。

エラー内容

Shader.ts:92 Uncaught Error: FRAGMENT_SHADER compilation failed: ERROR: 0:126: '[]' : Index expression cannot contain function calls

これは、シェーダー内の配列のインデックス([])指定に、関数呼び出しを含めることができないためです。

実際に原因となっているのは、symbol_sdfield.fragです。

の、以下のような記述。
sdistance[index( 0, 0 )] = texture2D( u_image, tc ).x;

ここでsdistanceとはサンプリングされた距離(3×3グリッド)を示しており、この数字はindex(x,y)で取得しなくても0-8の固定値(x + y * 3)ので、最初から指定してしまいます。

Y (k1) X (k0) 計算式 (k0 + k1 * 3) 結果 (index)
0 (1行目) 0 (左) 0 + 0*3 0
0 (1行目) 1 (中) 1 + 0*3 1
0 (1行目) 2 (右) 2 + 0*3 2
1 (2行目) 0 (左) 0 + 1*3 3
1 (2行目) 1 (中) 1 + 1*3 4

その下、// 被覆率 ζ_b, ζ_u を計算においても、同様の修正を行います。さらにループも行っているのでそれぞれのパターンで定義してしまいます。

  • k1=0, k0=0
  • k1=1, k0=0
  • k1=0, k0=1
  • k1=1, k0=1

すると出るようになる。

image.png

地理院ベクターを表示させたサンプル

image.png

3DエンジンでMVT等のベクトルタイルを"ベクトル形式のまま"レンダリングできるのは素晴らしいですね。
COGに則った配信・レンダリングが実現でき、私は幸せです。

Cesiumではサードパーティライブラリを使用し"ラスター形式"でのレンダリングはできるのですが、、、まぁはい。またベクトル形式で実現しようと思ったのですがタイルのカリングが辛かったのを思い出しました。

今はポイントのみのサポートですが、ライン・ポリゴンも期待が高まります。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?