正準 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 | 版宣言があるときだけ | 言語の版の素通し |
name | name があるとき | 建物の名 |
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 }
}
| キー | 意味 |
|---|---|
z | FL の高さ mm。常に出る |
h | 天井高 mm |
slab | 床組み厚 mm |
underground | 地下であることの宣言。z の負値からは推定しない — 書かれたときだけ 1 として出る |
assets
"assets": {
"AD1": { "kind": "door", "attrs": { "h": 2400, "name": "自動ドア", "style": "auto", "w": 1800 } }
}
建具の型である。kind は door / 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,X1 と x: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 | 属性があるとき | キーは照合順 |
areas | area があるとき | { 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 | 常に | 書かれた向き — 先に書いた空間。edge と swing はこの側から読む。これが無いと JSON だけでは開き勝手を復元できない |
kind | 常に | wall / open / stair / shaft / void |
t | 書かれたとき | 壁厚 mm |
air | 真のときだけ | true。遮蔽しない物(手すり・柵) |
edge | 書かれたとき | N / E / S / W — 線分を a 側から見た辺で絞る |
line | 書かれたとき | 描かれた線の端点の対。通り語の綴りのまま、解決座標の昇順 |
attrs | 属性があるとき | spec fire h など |
openings | 開口があるとき | 内容の正準順 |
segs | seg があるとき | 内容の正準順 |
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 は数えない分節である — 面積にもグラフにも現れず、区間の上書きだけを運ぶ。