Форум

 Тема:  Документация
Сергей03.04.2008
avatar7
Что нужно сделать чтобы в таблице 6 зем прописывались данные каждого участка?
Voltron03.04.2008
avatar394
Во написал! ai.gif Щас Гуру прийдет и... cp.gif Лучше б скрин сделал или вордовский/экселевский файл приаттачил.
Если в таблице меняются только площади, сама таблица остается неизменной, то в общем случае нужно просто суммировать площади с одинаковым кодом угодья и выводить результаты в нужные поля таблицы. Посмотри как это сделано в шаблоне "Кадастровый план" из набора "Державний акт".
Делаешь табличку нужного вида, потом в поля где должна быть суммарная площадь под каким-либо угодьем пишешь
Код
begin
  AreaRillya := 0; //тут будет твоя площадь
  for i:= 1 to [ChildCount(FindCode(-1))] do //пробегаемся по всем угодьям
  begin
    CurrentLayerCode := [Layer(FindChildCode(i))]; //узнаем какой код слоя
    if CurrentLayerCode = 4 then AreaRillya := AreaRillya + [Area(FindChildCode(i))]/10000; //если это нужный слой, то учитываем эту площадь
  end;
end

Коды слоев можно подсмотреть в сценарии системы (F12), вкладка "Слои".

З.Ы.: вот уж не думал, что начну осваивать ГИС 4й линейки...
Евгений03.04.2008
avatar697ГУРУ
Будет конечно всё таки лучше, если Вы перепишете свой пост. Лучше выложите картинку с этой табличкой. А мы поможем её реализовать.
И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей
Kit17.07.2008
avatar10
Всем доброго времени суток..
Такой вопрос.
Исходные данные: 1 кад.квартал, 2 кад.участка (ожб и аренда). В техдокументации требуется предоставить данные по суммарным площадям угодий на обоих кад.участках.

В вышеприведенном примере по поводу площадей пересчитывается площадь угодий по одному кадастровому участку. Каким образом модифицировать формулу, чтобы обсчитывались оба участка?
Евгений17.07.2008
avatar697ГУРУ
Цитата(Kit @ 17.7.2008, 14:21) <{POST_SNAPBACK}>
Всем доброго времени суток..
Такой вопрос.
Исходные данные: 1 кад.квартал, 2 кад.участка (ожб и аренда). В техдокументации требуется предоставить данные по суммарным площадям угодий на обоих кад.участках.

В вышеприведенном примере по поводу площадей пересчитывается площадь угодий по одному кадастровому участку. Каким образом модифицировать формулу, чтобы обсчитывались оба участка?

Элементарно:
Код
begin
  AreaRillya := 0;
  for i:= 1 to [ChildCount(FindCode(1))] do //1-й участок
  begin
    CurrentLayerCode := [Layer(FindChildCode(i))];
    if CurrentLayerCode = 4 then AreaRillya := AreaRillya + [Area(FindChildCode(i))]/10000;
  end;

  for i:= 1 to [ChildCount(FindCode(2))] do //2-й участок
  begin
    CurrentLayerCode := [Layer(FindChildCode(i))];
    if CurrentLayerCode = 4 then AreaRillya := AreaRillya + [Area(FindChildCode(i))]/10000;
  end;
end

Кстати, приветствую в наших рядах!
И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей
Kit18.07.2008
avatar10
Цитата(Гуру @ 17.7.2008, 18:18) <{POST_SNAPBACK}>
...приветствую в наших рядах!


Спасибо.

А код не работает, к сожалению...
Выводит или площадь первого участка, или двойную площадь второго.
Voltron18.07.2008
avatar394
Цитата(Kit @ 18.7.2008, 8:38) <{POST_SNAPBACK}>
А код не работает, к сожалению...
Выводит или площадь первого участка, или двойную площадь второго.

А код работает правильно ab.gif. Смотрите сами, сначала в AreaRillya считается площадь угодий первого участка, а потом к этой величине прибавляется площадь угодий второго участка.
Нужно или заводить несколько переменных (для каждого участка своя) или обнулять AreaRillya перед входом во второй цикл. Вариант с несколькими переменными (а еще лучше с массивом) на мой взгляд предпочтительнее
Kit18.07.2008
avatar10
Да нет, по идее там всё правильно...
тока не работает почему-то(
И обнуление не помогает..

А можно пример с переменными?
Voltron21.07.2008
avatar394
Цитата(Kit @ 18.7.2008, 16:56) <{POST_SNAPBACK}>
А можно пример с переменными?

Т.е.? Как записать площади в разные переменные? Вот:
CODE

begin
AreaFirst :=0; //для первого участка
AreaSecond:=0; //и для второго

for i:= 1 to [ChildCount(FindCode(1))] do //1-й участок
begin
CurrentLayerCode := [Layer(FindChildCode(i))];
if CurrentLayerCode = 4 then AreaFirst := AreaFirst + [Area(FindChildCode(i))]/10000;
end;

for i:= 1 to [ChildCount(FindCode(2))] do //2-й участок
begin
CurrentLayerCode := [Layer(FindChildCode(i))];
if CurrentLayerCode = 4 then AreaSecond := AreaSecond + [Area(FindChildCode(i))]/10000;
end;
end

Соответсвенно, в поле где прописываются переменные для вывода (не знаю как оно правильно обзывается ab.gif )нужно вписать
Код
[AreaFirst]
[AreaSecond]

и перед открытием шаблона выделить два участка.
Kit21.07.2008
avatar10
Всё равно не срабатывает((
Евгений21.07.2008
avatar697ГУРУ
Цитата(Kit @ 21.7.2008, 10:21) <{POST_SNAPBACK}>
Всё равно не срабатывает((

Вы правы, к сожалению такая схема не будет работать в ГИС4. Дело в том, что список дочерних объектов (угодий) формируется только для текущего участка, выбранного в контейнере объектов.
И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей
Kit22.07.2008
avatar10
То есть в ГИС4 принципиально невозможно обработать данные одновременно двух участков?
Или всё-таки есть какой-либо выход?
Евгений22.07.2008
avatar697ГУРУ
Цитата(Kit @ 22.7.2008, 8:38) <{POST_SNAPBACK}>
То есть в ГИС4 принципиально невозможно обработать данные одновременно двух участков?
Или всё-таки есть какой-либо выход?
Частично. Можно извлекать значения семантик, площадей, периметров одновременно нескольких участков. Но нельзя просканировать эти участки вглубь на предмет угодий. Полный доступ будет только к текущему выбранному.
И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей
Kit22.07.2008
avatar10
Ясно, спасибо.
А пофиксить можно как-нибудь? )
Евгений22.07.2008
avatar697ГУРУ
Цитата(Kit @ 22.7.2008, 9:16) <{POST_SNAPBACK}>
Ясно, спасибо.
А пофиксить можно как-нибудь? )

К сожалению, нет. В ГИС4 допустимо исправление ещё найденных мелких багов, но не переработку функционала.
И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей
Авторизуйтесь на Форуме, чтобы вы могли создавать новые темы или комментировать
Не случайный отзыв →