Сумма элементарных участков

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Сумма элементарных участков

Сообщение Воронин С.В. »

Господа, владеющие созданием формул!
У меня оцифрован некоторый массив. Каждому полигону присвоен свой номер (поле F_ID).
Пусть полигон под номером 15 имеет площадь 41 га (поле AREA), площади считаем программно.
В другом слое этот полигон разрезаем на 4 элементарных участка, поле F_ID каждого элемента имеет тот же номер 15, но добавляется новое поле ELEMENT в котором каждому элементу присвоен свой номер, пусть это будут 32, 33, 34, 35. Площадь каждого получается 10,3 га, программа посчитает их как по 10 га, общая площадь составит – 40 га.
При распечатке карты мне необходимо указать номер полигона, его площадь, и площади элементарных участков. А площади-то не сходятся.
Для основного слоя я использую формулу, приведенную ниже, я взял ее тоже с форума. Прекрасная формула, отображает номер и площадь при распечатке карты в две строки через горизонтальную линию, для полигона 15 имеем 15/41.
Но площади-то теперь не идут.
Возможно ли в таблице атрибутов основного слоя, теперь старую площадь заменить на сумму площадей элементарных участков другого слоя, имеющих тот же номер в поле F_ID, чтобы отображалось 15/40.

Возможно есть и другой подход.

Формула для отображения номера полигона и его площади
Function FindLabel ( [F_ID], [AREA] )
m = Array(Array([F_ID]))
n = Array(Array([AREA]))
iMxLblSz = 0
FT = "<UND>"
LT = "</UND>"
C_LT = "<CLR red='255' green='255' blue='255'>"
C_RT = "</CLR>"
For i = 0 To UBound(m)
j = m(i)
If (Len(j(0)) > iMxLblSz) Then
iMxLblSz = Len(j(0))
End If
Next

For i = 0 To UBound(n)
g = n(i)
If (Len(g(0)) > iMxLblSz) Then
iMxLblSz = Len(g(0))
End If
Next

For i = 0 To UBound(m)
j = m(i)
g = n(i)
k = iMxLblSz - Len(j(0))
If (g(0)=9999) Then
FindLabel = FindLabel+ j(0)
Else
FindLabel = FindLabel+ FT + j(0) + C_LT + String(k, "_") + C_RT + LT + vbNewLine + FormatNumber(g(0), 0, -1, 0, 0)
End If
rem 9999 - код неизмерения, пустое поле
Next
End Function
Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Сумма элементарных участков

Сообщение Pavel »

Площадь каждого получается 10,3 га, программа посчитает их как по 10 га
Может сначала стоит изменить формат поля? Например, на численный с кол-вом десятичных знаков 1?
Возможно ли в таблице атрибутов основного слоя, теперь старую площадь заменить на сумму площадей элементарных участков другого слоя,
По идее, если вы один объект просто разрезали множеством малых, то сумма площадей малых будет равна площади большого. Без каких-либо дополнительных манипуляций... И старую площадь менять не нужно.
Формула для отображения номера полигона и его площади
А какже viewtopic.php?f=16&t=4527&p=20357#p20357 ?
Ваш вопрос, кстати!:) Взял его на вооружение и активно используется:) Только немного видоизменил:

Код: Выделить всё

[F_ID] & vbNewLine & "-----" & vbNewLine & [Area]
Чтобы чертой разделялось...
Быстро, качественно, недорого - выбирайте любые два пункта...
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Re: Сумма элементарных участков

Сообщение Воронин С.В. »

Pavel, спасибо за ответ.
Но я перепроверил себя.
Вы попробуйте сами ради интереса.
Начертите квадрат площадью 41, хоть чего: метров, гектаров, километров.
Вычислите площадь, не инструментом "Измерить", что на панели инструментов, а программно в таблице атрибутов, в тех же метрах, гектарах или км.
Затем, разрежьте его на 4 равных элемента и опять, в таблице атрибутов, измерьте площадь - получите 4 элемента по 10.
Что касается дробной части. Суть проблемы не меняется, расхождения пойдут в последнем знаке все равно. Я раньше так и делал, конечная сумма площади расхождения, конечно, падает на величину знака, но количественно число расхождений примерно, такое же. А площади мне нужны именно в га, ну не используются в сельском хозяйстве десятичные знаки.

Формулу Вашу, для отображения номера и площади проверил - работает. Но расстояние получается большое между верхней и нижней надписью и черта прерывиста. Спасибо.
Аватара пользователя
Pavel
Активный участник
Сообщения: 171
Зарегистрирован: 15 июл 2009, 07:45
Репутация: 7

Re: Сумма элементарных участков

Сообщение Pavel »

ну не используются в сельском хозяйстве десятичные знаки.
В вашем случае их надо использовать. Ни как по другому вы не получите исходную площадь большого объекта, так как программа округляет значения до целых в большую сторону.
Начертите квадрат площадью 41... Затем, разрежьте его на 4 равных элемента
Мне было лень рисовать квадрат площадью 41. Я нарисовал произвольный. Получилась площадь у него 400 с копейками гектар.
4.PNG
4.PNG (24.33 КБ) 11186 просмотров
Затем разрезал его на четыре не совсем равных участка и опять посчитал площадь:
5.PNG
5.PNG (26 КБ) 11186 просмотров
Посчитав сумму получившихся участков с округлением до сотых получил лощадь исходного объекта, с расхождением в 0,01-0,02 га. По моему вполне достаточно.
Но расстояние получается большое между верхней и нижней надписью и черта прерывиста
Использую форматирование текта. Все становится с одной чертой и рядышком:)
Быстро, качественно, недорого - выбирайте любые два пункта...
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Re: Сумма элементарных участков

Сообщение Воронин С.В. »

Pavel, еще раз спасибо.
Ну не подходит к моему случаю расхождения, даже в сотых долях.
В дальнейшем, используя таблицу атрибутов, я компоную элементы в по определенным признакам, по этим признакам суммирую площадь, а потом суммирую признаки и общую сумму площадей вывожу на карту.
А общая площадь элементов не сходится с общей суммой площадей полигонов, что сразу видно, что с сотыми, что без них.
Документ получается просто не красивый.
Потому я и хотел как-то площадь полигона подменить общей площадью элементов с тем же атрибутом.
cv5rt
Интересующийся
Сообщения: 32
Зарегистрирован: 26 окт 2010, 19:11
Репутация: 0

Re: Сумма элементарных участков

Сообщение cv5rt »

Pavel писал(а):Ни как по другому вы не получите исходную площадь
Получим
1-Считаем площади с сотыми
2-настраиваем отображение числовых форматов для столбца(десятичные в ноль)
делай раз.jpg
делай раз.jpg (110.8 КБ) 11049 просмотров
3-получаем на выходе
результат.jpg
результат.jpg (70.45 КБ) 11049 просмотров
и в ДБФ-е видим
в ДБФ видим.jpg
в ДБФ видим.jpg (184.48 КБ) 11049 просмотров
gamm
Гуру
Сообщения: 4170
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Сумма элементарных участков

Сообщение gamm »

Воронин С.В. писал(а): Ну не подходит к моему случаю расхождения, даже в сотых долях.
бухгалтера этот вопрос давно решили - суммируете площади всех участков, кроме одного (в вашем случае - любого, потому как все примерно одинаковые; бухгалтера берут самый большой), и присваиваете ему площадь, равную площади большого (охватывающего) минус сумма всех кроме него. Программку смастерите сами, это нетрудно. Можно даже SQL-запросами.
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Re: Сумма элементарных участков

Сообщение Воронин С.В. »

Прекрасно, прекрасно господа.
Не хочу показаться идиотом, но ... .

При использовании метода предложенного cv5rt-м опять на карте отображаются элементы с площадями по 10 га, а общая сумма 41 га и это уже в одном слое.

При использовании метода предложенного gamm-м.
Меня он удовлетворил пока, по предвижу ситуацию, когда общая сумма элементарных участков меньше плошади больших участков на величину большую, чем один элементарный участок. У меня была разница как-то в 27 га, правда не помню в какую сторону.
gamm
Гуру
Сообщения: 4170
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: Сумма элементарных участков

Сообщение gamm »

Воронин С.В. писал(а):Прекрасно, прекрасно господа.
Не хочу показаться идиотом, но ... .

При использовании метода предложенного gamm-м.
Меня он удовлетворил пока, по предвижу ситуацию, когда общая сумма элементарных участков меньше плошади больших участков на величину большую, чем один элементарный участок.
мдя ... это в чем же считать-то надо? Считайте во флоатах (потом округляйте до нужной точности), и будет вам щщассье.

P.S. Даже когда я это делал бухалтерам в dBASE II (на Роботроне, лет 20 назад), таких ошибок не возникало.
cv5rt
Интересующийся
Сообщения: 32
Зарегистрирован: 26 окт 2010, 19:11
Репутация: 0

Re: Сумма элементарных участков

Сообщение cv5rt »

Зайдем с другого конца.
Имеем
10,25+10,25+10,25+10,25=41
Что требуется увидеть на карте в результате?
10+10+10+11=41?
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Re: Сумма элементарных участков

Сообщение Воронин С.В. »

Для cv5rt.
У меня два слоя.
Слой с большими полигонами, эти полионы под своими номерами и с некоторой площадью.
На этом слое необходимо проставить номер полигона и его плошадь.
На основе этого слоя содается следующий слой, в котором полигоны разделены на элементарные участки, порядка 8 - 10 га,плошадь элементов тоже прописывается.
А сумма элементов часто не совпадает с площадью материнского полигона.
Требуется, чтобы эти цыфры сходились.

Количество полигонов до трех сотен. Уходит много времени на поиск нестыковок и ручную подгонку площадей элементов.
Возможно ли создать формулу, чтобы в материнском слое показывалась площадь суммы элементов этого полигона.
cv5rt
Интересующийся
Сообщения: 32
Зарегистрирован: 26 окт 2010, 19:11
Репутация: 0

Re: Сумма элементарных участков

Сообщение cv5rt »

для себя вопрос решил несколько топорно и без формул, но всё же
в таблице атрибутивов элементарных участков правой кнопкой>суммировать: поле для суммирования F_ID, для Area (наверно должен бытьShort) ставим галку против суммы. на выходе имеем таблицу с
1- F_ID
2- кол-вом образцов :lol: в контуре (тоже нужная вещь)
3- суммой площадей элем участков по контурам
её соединяем(joins)с таблицей исходного слоя, поле стыковки F_ID
Поле Area (только это шепотом) заносим в MOP-ы,а поле Sum_Area используем для надписей на карте.
Pavel писал(а):Документ получается просто не красивый.
кстати, если уж зашла речь о красивостях, то полученные надписи конвертим в аннотации
Воронин С.В.
Завсегдатай
Сообщения: 431
Зарегистрирован: 06 ноя 2009, 13:18
Репутация: 10
Откуда: Екатеринбург

Re: Сумма элементарных участков

Сообщение Воронин С.В. »

cv5rt-у

Всё получилось, спасибо большое.

Есть пара личных вопросов.
Под аббревиатурой
cv5rt писал(а):MOP-ы
имеются в ввиду МОП-ы.
Если это так, то не в агрохимслужбе Вы работаете?
cv5rt
Интересующийся
Сообщения: 32
Зарегистрирован: 26 окт 2010, 19:11
Репутация: 0

Re: Сумма элементарных участков

Сообщение cv5rt »

to Воронин С.В.
ответил в личку,(PS если придет раз восемь-сильно не пинайте,- соединение сбоит)
Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей