Сергей03.04.2008 |
7 | Что нужно сделать чтобы в таблице 6 зем прописывались данные каждого участка? |
|
Voltron03.04.2008 |
394 | Во написал! Щас Гуру прийдет и... Лучше б скрин сделал или вордовский/экселевский файл приаттачил. Если в таблице меняются только площади, сама таблица остается неизменной, то в общем случае нужно просто суммировать площади с одинаковым кодом угодья и выводить результаты в нужные поля таблицы. Посмотри как это сделано в шаблоне "Кадастровый план" из набора "Державний акт". Делаешь табличку нужного вида, потом в поля где должна быть суммарная площадь под каким-либо угодьем пишешь Код 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 |
697ГУРУ | Будет конечно всё таки лучше, если Вы перепишете свой пост. Лучше выложите картинку с этой табличкой. А мы поможем её реализовать. И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей |
|
Kit17.07.2008 |
10 | Всем доброго времени суток.. Такой вопрос. Исходные данные: 1 кад.квартал, 2 кад.участка (ожб и аренда). В техдокументации требуется предоставить данные по суммарным площадям угодий на обоих кад.участках.
В вышеприведенном примере по поводу площадей пересчитывается площадь угодий по одному кадастровому участку. Каким образом модифицировать формулу, чтобы обсчитывались оба участка? |
|
Евгений17.07.2008 |
697ГУРУ | Всем доброго времени суток.. Такой вопрос. Исходные данные: 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 |
10 | ...приветствую в наших рядах! Спасибо. А код не работает, к сожалению... Выводит или площадь первого участка, или двойную площадь второго. |
|
Voltron18.07.2008 |
394 | А код не работает, к сожалению... Выводит или площадь первого участка, или двойную площадь второго. А код работает правильно . Смотрите сами, сначала в AreaRillya считается площадь угодий первого участка, а потом к этой величине прибавляется площадь угодий второго участка. Нужно или заводить несколько переменных (для каждого участка своя) или обнулять AreaRillya перед входом во второй цикл. Вариант с несколькими переменными (а еще лучше с массивом) на мой взгляд предпочтительнее |
|
Kit18.07.2008 |
10 | Да нет, по идее там всё правильно... тока не работает почему-то( И обнуление не помогает..
А можно пример с переменными? |
|
Voltron21.07.2008 |
394 | А можно пример с переменными? Т.е.? Как записать площади в разные переменные? Вот: 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
Соответсвенно, в поле где прописываются переменные для вывода (не знаю как оно правильно обзывается )нужно вписать Код [AreaFirst] [AreaSecond] и перед открытием шаблона выделить два участка. |
|
Kit21.07.2008 |
10 | Всё равно не срабатывает(( |
|
Евгений21.07.2008 |
697ГУРУ | Всё равно не срабатывает(( Вы правы, к сожалению такая схема не будет работать в ГИС4. Дело в том, что список дочерних объектов (угодий) формируется только для текущего участка, выбранного в контейнере объектов. И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей |
|
Kit22.07.2008 |
10 | То есть в ГИС4 принципиально невозможно обработать данные одновременно двух участков? Или всё-таки есть какой-либо выход? |
|
Евгений22.07.2008 |
697ГУРУ | То есть в ГИС4 принципиально невозможно обработать данные одновременно двух участков? Или всё-таки есть какой-либо выход? Частично. Можно извлекать значения семантик, площадей, периметров одновременно нескольких участков. Но нельзя просканировать эти участки вглубь на предмет угодий. Полный доступ будет только к текущему выбранному. И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей |
|
Kit22.07.2008 |
10 | Ясно, спасибо. А пофиксить можно как-нибудь? ) |
|
Евгений22.07.2008 |
697ГУРУ | Ясно, спасибо. А пофиксить можно как-нибудь? ) К сожалению, нет. В ГИС4 допустимо исправление ещё найденных мелких багов, но не переработку функционала. И жили они долго и счастливо... пока не узнали, что другие живут дольше и счастливей |
|