Витяг метаданих
Отримання метаданих з транслятованих моделей Revit для аналізу або звітності.
Огляд робочого процесу
Вхідні дані
Транслятована модель
SVF2 URN
Model Derivative API
Отримати метадані
Отримати дерево
Отримати властивості
Отримати вигляди
Результати
metadata.jsonGUID, інфо
tree.jsonІєрархія
properties.jsonBIM-дані
views.jsonСписок виглядів
Експорт
Звіти
CSV
База даних
Вхід→API→Результати→Експорт
Підхід CLI
Крок 1: Отримання URN моделі
URN=$(raps object urn my-bucket building.rvt --output plain)
Крок 2: Перевірка статусу трансляції
raps translate manifest "$URN"
Крок 3: Витяг усіх метаданих
# Метадані моделі (GUID, вигляди тощо)
raps derivative metadata "$URN" --output json > metadata.json
# Ієрархія моделі
raps derivative tree "$URN" --output json > model-tree.json
# Усі властивості (BIM-дані)
raps derivative properties "$URN" --output json > properties.json
# Доступні вигляди
raps derivative views "$URN" --output json > views.json
Крок 4: Аналіз даних
# Підрахунок елементів за категорією
cat properties.json | jq 'group_by(.category) | .[] | {category: .[0].category, count: length}'
# Експорт конкретних властивостей у CSV
cat properties.json | jq -r '
["ObjectId", "Name", "Category"],
(.[] | [.objectid, .name, .category])
| @csv' > elements.csv
CI/CD-конвеєр
# .github/workflows/metadata-extraction.yml
name: BIM Metadata Extraction
on:
workflow_dispatch:
inputs:
bucket:
description: 'Bucket name'
required: true
model:
description: 'Model filename'
required: true
jobs:
extract-metadata:
runs-on: ubuntu-latest
steps:
- name: Install RAPS
run: cargo install raps
- name: Extract all metadata
env:
APS_CLIENT_ID: ${{ secrets.APS_CLIENT_ID }}
APS_CLIENT_SECRET: ${{ secrets.APS_CLIENT_SECRET }}
run: |
URN=$(raps object urn "${{ inputs.bucket }}" "${{ inputs.model }}" --output plain)
mkdir -p ./metadata-export
raps derivative metadata "$URN" --output json > ./metadata-export/metadata.json
raps derivative tree "$URN" --output json > ./metadata-export/tree.json
raps derivative properties "$URN" --output json > ./metadata-export/properties.json
raps derivative views "$URN" --output json > ./metadata-export/views.json
- name: Generate summary
run: |
echo "# Metadata Summary" > ./metadata-export/summary.md
echo "Model: ${{ inputs.model }}" >> ./metadata-export/summary.md
echo "Elements: $(jq 'length' ./metadata-export/properties.json)" >> ./metadata-export/summary.md
echo "Views: $(jq 'length' ./metadata-export/views.json)" >> ./metadata-export/summary.md
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: bim-metadata-${{ github.run_id }}
path: ./metadata-export/
Потік конвеєра
Ручний запуск
workflow_dispatch
bucket + model
→
Витяг
Отримання URN
metadata.json
tree.json
properties.json
views.json
→
Аналіз
Генерація зведення
→
Артефакти
bim-metadata.zip
Інтеграція з MCP
Витяг та зведення
User: "Extract all metadata from building.rvt and summarize the room count"
Користувач
AI-асистент
RAPS MCP
Хмара APS
Витягти метадані, підсумок приміщень
→
aps_object_urn()
→
Отримати URN
→
←
URN
aps_derivative_properties()
→
Отримати властивості
→
←
Properties JSON
Фільтрація приміщень, розрахунок площ
←
Зведення приміщень за поверхами
Відповідь AI:
Знайдено 47 приміщень у моделі:
- Поверх 1: 15 приміщень (320 м² загалом)
- Поверх 2: 18 приміщень (390 м² загалом)
- Поверх 3: 14 приміщень (288 м² загалом)
Порівняння моделей
User: "Compare the element counts between v1 and v2 of the building model"
Відповідь AI:
Порівняння моделей:
Категорія v1 v2 Зміна Стіни 245 258 +13 Двері 89 92 +3 Вікна 156 156 0 Приміщення 47 52 +5
Типові запити
Підрахунок за категорією
cat properties.json | jq '
group_by(.category) |
map({category: .[0].category, count: length}) |
sort_by(-.count)'
Пошук конкретних елементів
# Знайти всі двері
cat properties.json | jq '[.[] | select(.category == "Doors")]'
# Знайти елементи за шаблоном назви
cat properties.json | jq '[.[] | select(.name | test("Wall.*Exterior"))]'
Експорт у формат бази даних
# Генерація SQL-вставок
cat properties.json | jq -r '.[] |
"INSERT INTO elements (id, name, category) VALUES (\(.objectid), '\''\(.name)'\'', '\''\(.category)'\'');"'