Ця сторінка ще не перекладена українською. Показано англійську версію. Переглянути англійською

Експорт приміщень і просторів

Витяг розкладів приміщень та просторових даних з моделей Revit.

Огляд робочого процесу

Вхідні дані

Модель Revit
з приміщеннями

Обробка
Трансляція у SVF2
↓
Витяг властивостей
↓
Фільтрація за категорією
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:

Розклад приміщень офісної будівлі:

ВідділПриміщеньЗагальна площа (м²)
Керівництво8390
Інженерія241 190
Продажі16780
HR6195
Загальні12604

Разом: 66 приміщень, 3 159 м²

Пошук конкретних приміщень

User: "Find all conference rooms larger than 500 sq ft"

Відповідь AI:

Знайдено 8 конференц-залів площею понад 46 м²:

НазваНомерПлощаПоверх
Board Room301111 м²3
Conference A20174 м²2
Conference B20270 м²2
Training Room10560 м²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

Пов’язане