メインコンテンツまでスキップ

正準 JSON のスキーマ

正準 JSON のキーごとのリファレンス。すべての例は同梱の建物から実際に出力したものである。

省略の規則

値の無いキーは出力されない。koyu h slab t edge attrs line などは、原本に書かれていなければ現れない。空のブロック(assets / polygons / columns / zones / areas / openings / segs)も出力されない。

属性の値は数値の形なら数値、それ以外は文字列である。underground は真のときだけ 1 として出る。air は真のときだけ true として出る。

最上位

キーはこの順に固定である。

キー有無中身
format常にこの形式自身の版。現在は "koyu-canonical/1.0"
koyu版宣言があるときだけ言語の版の素通し
namename があるとき建物の名
unit常に現在は "mm" のみ
grid常に{ "X": [座標…], "Y": [座標…] } — 通り名 X1.. は暗黙
levels常に名 → { z, h?, slab?, underground? }。キーは照合順
assets宣言があるとき名 → { kind, attrs? }。キーは照合順
polygons宣言があるときパス → [[x, y], …]。キーは照合順
columns宣言があるとき配列。宣言順のまま
zones宣言があるときパス → { attrs? }。キーは照合順
spaces常にパス → 空間。キーはパスの照合順
boundaries常に配列。between の辞書順、同一 between は内容の正準順

grid

"grid": { "X": [0, 3600, 7200], "Y": [0, 4500] }

座標の配列だけを持つ。通り名は先頭から X1 X2 … と暗黙に振られるので綴られない。

levels

"levels": {
"B1": { "z": -5100, "h": 4200, "slab": 900, "underground": 1 },
"L1": { "z": 0, "h": 3600, "slab": 600 }
}
キー意味
zFL の高さ mm。常に出る
h天井高 mm
slab床組み厚 mm
underground地下であることの宣言。z の負値からは推定しない — 書かれたときだけ 1 として出る

assets

"assets": {
"AD1": { "kind": "door", "attrs": { "h": 2400, "name": "自動ドア", "style": "auto", "w": 1800 } }
}

建具の型である。kinddoor / window。開口が ref でこれを引く。

polygons

"polygons": { "/site": [[-2600, -7000], [38000, -7000], [38000, 19600], [2000, 21000], [-2600, 15000]] }

与件の形状であり、唯一「原本に書かれる幾何」である。頂点列は幾何(巡回)なので並べ替えない。

columns

"columns": [
{ "size": 900, "levels": ["B2", "B1", "L1", "L2", "L3", "L4", "L5", "L6"] },
{ "size": 800, "levels": ["L7", "L8", "L9", "L10", "L11", "L12", "L13"] }
]
キー意味
size断面の幅 mm
d奥行 mm。書かれていなければ size と同じなので出ない
levels立つレベルの列
x / y狙う通り名。省けばすべての通り。通りの並び順に整えられる(x:X2,X1x:X1,X2 は同じ構成である)
attrs属性

この配列だけは並べ替えない。同じ交点に二本は立たず先の宣言が勝つので、宣言順が構成そのものである。

zones

"zones": { "/L3/A": { "attrs": { "name": "Aタイプ", "use": "exclusive" } } }

集約は属性しか持たない。領域も型も持たない。

spaces

"/L1/s1": {
"type": "shop",
"at": [
["X1", "Y1-4600", "X3", "Y2"],
["X3", "Y1-4600", "X4", "Y1"]
],
"attrs": { "floor": "モルタル", "name": "店舗1", "use": "rentable" },
"areas": [
{ "at": ["X1", "Y1-4600", "X2", "Y1-2600"], "attrs": { "floor": "タイル", "name": "土間" } }
]
}
キー有無中身
type常に空間の型
level明示のときだけパス先頭のセグメントと所属レベルが違うとき(メゾネット等)にだけ出る。既定は省略される
at領域があるとき通り名 4 つ組。矩形が一つなら平坦な 4 つ組、複数なら 4 つ組の配列で、配列は内容の正準順に並ぶ
attrs属性があるときキーは照合順
areasarea があるとき{ at, attrs? } の配列。内容の正準順

at の 4 つ組は [X始, Y始, X終, Y終] である。逆順に書かれた表記(X2..X1)は座標昇順に正規化される。

boundaries

{
"between": ["/home/hall1", "/home/ldk"],
"a": "/home/ldk",
"kind": "wall",
"t": 120,
"attrs": { "spec": "LGS" },
"openings": [
{
"kind": "door", "ref": "SD1", "w": 800, "h": 2000,
"at": 0.5, "edge": "E", "hinge": "S", "swing": "b",
"attrs": { "name": "片引き戸", "style": "sliding" }
}
]
}
キー有無中身
between常に昇順の 2 パス。関係の同一性の鍵である
a常に書かれた向き — 先に書いた空間。edgeswing はこの側から読む。これが無いと JSON だけでは開き勝手を復元できない
kind常にwall / open / stair / shaft / void
t書かれたとき壁厚 mm
air真のときだけtrue。遮蔽しない物(手すり・柵)
edge書かれたときN / E / S / W — 線分を a 側から見た辺で絞る
line書かれたとき描かれた線の端点の対。通り語の綴りのまま、解決座標の昇順
attrs属性があるときspec fire h など
openings開口があるとき内容の正準順
segsseg があるとき内容の正準順

air:1 の境界の天端高は属性として出る。

{
"between": ["/home/hall2", "/home/void"],
"a": "/home/void",
"kind": "wall", "t": 120, "air": true,
"attrs": { "h": 1100, "spec": "手すり" }
}

描かれた線を持つ境界。

{
"between": ["/L1/load", "/out"],
"a": "/L1/load",
"kind": "wall", "t": 300,
"line": ["X19-4200,Y12", "X19,Y12-2100"],
"attrs": { "spec": "RC" }
}

線分は向きを持たないので、端点の対は解決座標の (x, 次いで y) 昇順に正準化される。綴りは書かれたとおりの通り参照のまま入れ替わる。

既定境界はここに出ない。接する空間の既定は壁だが、正準 JSON は書かれた構成のみを持つ。

openings

キー有無中身
kind常にdoor / window
refアセットを引くときアセット名
w常に幅 mm
h書かれたとき高さ mm
at常に比率なら数値、通り参照なら文字列。書かれていなければ 0.5
edge書かれたときN / E / S / W
hinge書かれたとき吊元
swing書かれたとき開く先 a / b
attrs属性があるときname style など。アセットから継いだ属性も展開されて出る

segs

"segs": [
{ "w": 3600, "at": 0.75, "attrs": { "spec": "ガラスパーティション" } }
]
キー有無中身
w常に幅 mm
at常に比率なら数値、通り参照なら文字列
edge書かれたときN / E / S / W
attrs属性があるとき区間上書きの spec など

seg は数えない分節である — 面積にもグラフにも現れず、区間の上書きだけを運ぶ。

隣り合う頁