Skip to content

dev'geo_object_api'hello_world

Usagi Ito edited this page Nov 27, 2017 · 6 revisions

GeoObject API / Hello, World!

初めて GeoObject API に触れる方のための "Hello, World!" です。

1. 3点の経緯度ので囲まれたエリアを可視化する

最も基礎的な「さんかく」は低レベルの GeoObject API でもたったの 3 ステップだけで作成できます。

# Step 1. GeoObject.New
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.New" }'
# Step 2. SetVertexGlobal
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexGlobal", "params": { "id": 0, "vertices": [ 200.0, 43.062096, 141.354376, 200.0, 43.067096, 141.349376 , 200.0, 43.067096, 141.359376 ] } }'
# Step 3. SetIndex
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetIndex", "params": { "id": 0, "indices": [ 0, 1, 2, 0, 2, 1 ] } }'

期待される結果

Step.2 で与えた 3 点の経緯度を囲う三角形1枚のメッシュを表示する GeoObject を生成できる。

image

解説

    1. GeoObject は ID ( int32, >=0 )により管理さる
    2. GeoObject.New で新しい GeoObject の生成に成功すると、その GeoObject の ID を取得できる。
    1. ほとんどの GeoObject API は ID で対象の GeoObject を明示的に指示する。
    2. GeoObject.SetVertexGlobalグローバルアドレスモード でメッシュを構成する頂点を設定する API 。
    3. 3つの点の情報だけではまだ目に見えるメッシュは生成できない。
    1. GeoObject.SetIndex は頂点群の頂点を定義順序のインデックス値を使い 3 頂点ずつのトポロジーを与えて結び、三角の面を作れるよう設定する API 。
    2. 点が 3 つだけの場合でも、表 [0,1,2] と裏 [0,2,1] の 2 つの三角面を 3 つの頂点群の結び順を与えるだけで生成できる。
    3. もし矩形領域を作りたければ、 4 つの点と 2 つの三角面だけで片面を生成できる。
    4. {頂点群+トポロジーを定義した上での頂点のインデックス群}={必要最小限のメッシュの構成要素}を GeoObject へ与えると自動的にメッシュを生成して表示してくれる。

2. マテリアルを設定、見た目を変える

GeoObject に「マテリアル」を設定するとメッシュ表面の見た目を変更できます。

2.1. 固定色で塗り潰す SolidColor / SolidColorTranslucent

# 「マテリアル」を設定します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "SolidColor" } }'
# 「マテリアル」に「マテリアルパラメーター」を設定します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialParam", "params": { "id": 0, "material_param": { "Color": [ 1,0,0,1 ] } } }'

image

# 「マテリアルパラメーター」は複数のパラメーター群を1回のAPIの呼び出しだけで設定する事もできます。
# ( material_param の代わりに material_params を使います。)
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialParam", "params": { "id": 0, "material_params": { "Color": [ 0,1,1,1 ], "BaseColorFactor":1, "EmmisiveColorFactor":0 } } }'

image

# 半透明を扱いたい場合はマテリアル `SolidColorTranslucent` を使用します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "SolidColorTranslucent" } }'
# 半透明な Color パラメーターを設定します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialParam", "params": { "id": 0, "material_params": { "Color": [ 1,1,0,0.3 ] } } }'
  • マテリアルタイプ SolidColor, SolidColorTranslucent には マテリアルパラメーター Color, BaseColorFactor, EmmisiveColorFactor を設定できます。
    • Color: 色を unorm 実数値の RGBA の配列で設定します。不透明の赤は [ 1,0,0,1 ] と設定します。
    • BaseColorFactor は太陽光などの光源によって陰影付けされる(基本的には設定した Color より暗くなる)色として拡散反射により発色する割合を unorm 実数値で設定します。デフォルトで 1 が設定されています。
    • EmmisiveColorFactor はメッシュの表面自身が光源として光を発する度合いを unorm 実装値で設定します。他の光源によらず鮮やかに発色(発光)させたい場合に使用します。デフォルトで 0 が設定されています。

Note: unorm は "unsigned normalized" の省略形で、「非負で正規化された」の意味で使用されます。現在の一般的な計算機で扱う実数値は浮動小数点数型でより具体的には多くの場合 IEEE754 の Binary32 を float 型とします。ゆえに、比率を表現する場合には一般に [ 0.0 .. 1.0 ] に正規化された非負の値、すなわち unorm または [ -1.0 .. +1.0] に符号付きで正規化された snorm を便利に応じて用います。これは例えば整数型であれば、 UINT16 型であれば [ 0 .. 65535 ] あるいは INT8 型であれば [-128 .. +127] に正規化して輝度などを表現する事の浮動小数点数型での対応とも言えます。

2.2. 頂点ごとに色を設定する VertexColor / VertexColorTranslucent

# 半透明を扱いたい場合はマテリアル `SolidColorTranslucent` を使用します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "VertexColor" } }'
# 頂点色を設定します。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexColor", "params": { "id": 0, "vertexcolors": [ 1,0,0,1, 0,1,0,1, 0,0,1,1 ] } }'

Note: VertexColor / VertexColorTranslucent でもマテリアルパラメーター BaseColorFactor / EmmisiveColorFactor は使用できます。

2.3. テクスチャーを使用する Texture / TextureTranslucent

curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.New" }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexLocal", "params": { "id": 0, "vertices": [ 0.0, 0.0, 0.0, -1000, -1000, 0, 1000, -1000, 0, -1000, 1000, 0, 1000, 1000, 0 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetUV", "params": { "id": 0, "uvs": [ 0.5,0.5, 0,0, 1,0, 0,1, 1,1 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetLocationByAltLatLon", "params": { "id": 0, "location": [ 200.0, 43.062096, 141.317 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetIndex", "params": { "id": 0, "indices": [ 0,1,2, 0,3,1, 0,2,4, 0,4,3, 0,2,1, 0,1,3, 0,4,2, 0,3,4 ] } }'
# マテリアルタイプを Texture / TextureTranslucent へ設定すると標準で G4 ロゴのテクスチャーが表示される。
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "Texture" } }'

image

# テクスチャーデータを設定するとユーザー独自の任意のテクスチャーが表示される
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetTextureSource", "params": { "id": 0, "texturesources": [ { "data":[ 0,0,0,255, 255,0,0,255, 0,0,255,255, 255,255,255,255 ], "width":2, "height":2, "type":"RGBA-UINT8" } ] } }'

2.4. G4 にプリセットされているマテリアルを使う

Rock, Glass, Grass, Moss, Steel などのマテリアルタイプを設定すれば予め G4 に組み込まれたテクスチャーを簡単に使用できます。

curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.New" }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetVertexLocal", "params": { "id": 0, "vertices": [ 0.0, 0.0, 0.0, -1000, -1000, 0, 1000, -1000, 0, -1000, 1000, 0, 1000, 1000, 0 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetUV", "params": { "id": 0, "uvs": [ 0.5,0.5, 0,0, 1,0, 0,1, 1,1 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetLocationByAltLatLon", "params": { "id": 0, "location": [ 200.0, 43.062096, 141.317 ] } }'
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetIndex", "params": { "id": 0, "indices": [ 0,1,2, 0,3,1, 0,2,4, 0,4,3, 0,2,1, 0,1,3, 0,4,2, 0,3,4 ] } }'
# マテリアルタイプを `Moss` に設定するとそれらしい見た目になる
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetMaterialType", "params": { "id": 0, "material_type": "Moss" } }'

image

テクスチャーの繰り返し密度を変更したい場合は UV を調整する。

# UVで5倍の密度に凝集させる
curl -Ss -i http://127.0.0.1:50080/api/json-rpc-2.0/ -X POST --data '{ "jsonrpc": "2.0", "id": null, "method": "GeoObject.SetUV", "params": { "id": 0, "uvs": [ 2.5,2.5, 0,0, 5,0, 0,5, 5,5 ] } }'

image

Clone this wiki locally
You can’t perform that action at this time.