Експорт приміщень і просторів
Витяг розкладів приміщень та просторових даних з моделей Revit.
Огляд робочого процесу
Вхідні дані
Модель Revit
з приміщеннями
Обробка
Трансляція у SVF2
↓
Витяг властивостей
↓
Фільтрація за категорією
Revit Rooms
Revit Rooms
Дані приміщень
Назва
Номер
Площа
Поверх
Відділ
Формати експорту
Розклад CSV
Експорт JSON
Імпорт у базу даних
Вхід→Обробка→Дані→Експорт
Підхід CLI
Крок 1: Трансляція моделі
URN=$(raps object urn my-bucket building.rvt --output plain)
raps translate start "$URN" --format svf2 --wait
Крок 2: Витяг усіх властивостей
raps derivative properties "$URN" --output json > all-properties.json
Крок 3: Фільтрація приміщень
cat all-properties.json | jq '[.[] | select(.category == "Revit Rooms")]' > rooms.json
Крок 4: Експорт у CSV
cat rooms.json | jq -r '
["Name", "Number", "Area", "Level", "Department"],
(.[] | [
.properties["Name"] // "",
.properties["Number"] // "",
.properties["Area"] // "",
.properties["Level"] // "",
.properties["Department"] // ""
]) | @csv
' > rooms.csv
Крок 5: Генерація зведення
echo "Room Summary"
echo "============"
echo "Total rooms: $(jq 'length' rooms.json)"
echo "Total area: $(jq '[.[].properties.Area | select(. != null) | tonumber] | add' rooms.json) sq ft"
echo ""
echo "By Level:"
jq -r 'group_by(.properties.Level) | .[] | " \(.[0].properties.Level): \(length) rooms"' rooms.json
echo ""
echo "By Department:"
jq -r 'group_by(.properties.Department) | .[] | " \(.[0].properties.Department // "Unassigned"): \(length) rooms"' rooms.json
CI/CD-конвеєр
# .github/workflows/room-export.yml
name: Room Schedule Export
on:
workflow_dispatch:
inputs:
bucket:
description: 'Bucket name'
required: true
model:
description: 'Model filename'
required: true
jobs:
export-rooms:
runs-on: ubuntu-latest
steps:
- name: Install RAPS
run: cargo install raps
- name: Extract room data
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)
# Отримання всіх властивостей
raps derivative properties "$URN" --output json > properties.json
# Фільтрація приміщень
jq '[.[] | select(.category == "Revit Rooms")]' properties.json > rooms.json
# Створення CSV
jq -r '
["Name","Number","Area","Level","Department"],
(.[] | [
.properties["Name"],
.properties["Number"],
.properties["Area"],
.properties["Level"],
.properties["Department"]
]) | @csv
' rooms.json > rooms.csv
- name: Generate summary report
run: |
echo "# Room Schedule Export" > summary.md
echo "Model: ${{ inputs.model }}" >> summary.md
echo "Date: $(date)" >> summary.md
echo "" >> summary.md
echo "## Statistics" >> summary.md
echo "- Total Rooms: $(jq 'length' rooms.json)" >> summary.md
echo "" >> summary.md
echo "## By Level" >> summary.md
jq -r 'group_by(.properties.Level) | .[] | "- \(.[0].properties.Level): \(length) rooms"' rooms.json >> summary.md
echo "" >> summary.md
echo "## By Department" >> summary.md
jq -r 'group_by(.properties.Department) | .[] | "- \(.[0].properties.Department // "Unassigned"): \(length) rooms"' rooms.json >> summary.md
- name: Upload exports
uses: actions/upload-artifact@v4
with:
name: room-schedule
path: |
rooms.json
rooms.csv
summary.md
Потік конвеєра
Ручний запуск
вхідні параметри bucket + model
→
Витяг
Отримання URN
Отримання властивостей
Фільтрація приміщень
→
Експорт
rooms.json
rooms.csv
summary.md
→
Результат
room-schedule.zip
Інтеграція з MCP
Експорт розкладу приміщень
User: "Get me a room schedule from the office building model with areas by department"
Користувач
AI-асистент
RAPS MCP
Хмара APS
Експорт розкладу приміщень за відділами
→
aps_object_urn()
→
←
URN
aps_derivative_properties()
→
Отримати всі властивості
→
←
Properties JSON
Фільтрація приміщень, групування за відділами
←
Таблиця розкладу приміщень
Відповідь AI:
Розклад приміщень офісної будівлі:
Відділ Приміщень Загальна площа (м²) Керівництво 8 390 Інженерія 24 1 190 Продажі 16 780 HR 6 195 Загальні 12 604 Разом: 66 приміщень, 3 159 м²
Пошук конкретних приміщень
User: "Find all conference rooms larger than 500 sq ft"
Відповідь AI:
Знайдено 8 конференц-залів площею понад 46 м²:
Назва Номер Площа Поверх Board Room 301 111 м² 3 Conference A 201 74 м² 2 Conference B 202 70 м² 2 Training Room 105 60 м² 1 … … … …
Розширені запити
Приміщення за поверхами з площами
cat rooms.json | jq '
group_by(.properties.Level) |
map({
level: .[0].properties.Level,
count: length,
totalArea: ([.[].properties.Area | select(. != null) | tonumber] | add),
rooms: [.[] | {name: .properties.Name, number: .properties.Number, area: .properties.Area}]
})'
Пошук неприсвоєних приміщень
cat rooms.json | jq '[.[] | select(.properties.Department == null or .properties.Department == "")]'
Статистика площ
cat rooms.json | jq '
{
total: ([.[].properties.Area | select(. != null) | tonumber] | add),
average: ([.[].properties.Area | select(. != null) | tonumber] | add / length),
min: ([.[].properties.Area | select(. != null) | tonumber] | min),
max: ([.[].properties.Area | select(. != null) | tonumber] | max)
}'
Експорт для системи управління просторами
cat rooms.json | jq '[.[] | {
id: .objectid,
name: .properties.Name,
number: .properties.Number,
level: .properties.Level,
department: .properties.Department,
area_sqft: (.properties.Area | tonumber),
area_sqm: ((.properties.Area | tonumber) * 0.0929)
}]' > space-management-import.json