пятница, 30 августа 2013 г.

GCL. Часть 2. Работа с вычисляемыми полями

Geodata Control Language - GCL

Часть 2 Работа с вычисляемыми полями

Вычисления в объектах
Одно из важных свойств программного кода - возможность создавать вычисляемые поля. Например, в приведенном примере поле <ab> является вычисляемым и равно произведению полей <a> и <b>.


XMLJSON
<tags>
  <index>
    <a>300</a>
    <b>10</b>
    <ab>
     <code>a*b</code>
    </ab>
  </index>
 </tags>
{
  "tags": {
    "index": {
      "a": "300",
      "b": "10",
      "ab": { "code": "a*b" }
    }
  }
}


Один из общеизвестных недостатков существующих ГИС - отсутствие возможности создавать автоматически вычисляемые поля (кроме геометрии). Это связано прежде всего с тем, что в традиционных файлах геоданных негде хранить формулу вычислений. В GCL это решено.

Хранение кода. Наследование.

Базовый объект (предок) может хранить код для наследуемых объектов. Предпочтительный вариант - весь код и определения полей в базовом абстрактном классе, а в его потомках уже значения.

XML
JSON
<object identify="base">
<tags>
  <index>
    <a type="float" />
    <b type="float" />
    <ab>
     <code>a*b</code>
    </ab>
    <!-- Или --> 
    <ab code="a*b"/>  
  </index>
 </tags>
</object>
{
  "object": {
    "-identify": "base",
    "tags": {
      "index": {
        "a": { "-type": "float" },
        "b": { "-type": "float" },
        "ab": [
          { "code": "a*b" },
          { "-code": "a*b" }
        ]
      }
    }
  }
}





XML
JSON
<object parent="My parent">
<tags>
  <index>
    <a>300</a>
    <b>10</b>
  </index>
 </tags>
</object>
{
  "object": {
    "-parent": "My parent",
    "tags": {
      "index": {
        "a": "300",
        "b": "10"
      }
    }
  }
}

Комментариев нет: