Geodata Control Language - GCL
Один из общеизвестных недостатков существующих ГИС - отсутствие возможности создавать автоматически вычисляемые поля (кроме геометрии). Это связано прежде всего с тем, что в традиционных файлах геоданных негде хранить формулу вычислений. В GCL это решено.
Хранение кода. Наследование.
Базовый объект (предок) может хранить код для наследуемых объектов. Предпочтительный вариант - весь код и определения полей в базовом абстрактном классе, а в его потомках уже значения.
Часть 2 Работа с вычисляемыми полями
Вычисления в объектах
Одно из важных свойств программного кода - возможность создавать вычисляемые поля. Например, в приведенном примере поле <ab> является вычисляемым и равно произведению полей <a> и <b>.
XML | JSON |
<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" } } } } |