Сумма элементарных участков
-
- Завсегдатай
- Сообщения: 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
У меня оцифрован некоторый массив. Каждому полигону присвоен свой номер (поле 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: Сумма элементарных участков
Может сначала стоит изменить формат поля? Например, на численный с кол-вом десятичных знаков 1?Площадь каждого получается 10,3 га, программа посчитает их как по 10 га
По идее, если вы один объект просто разрезали множеством малых, то сумма площадей малых будет равна площади большого. Без каких-либо дополнительных манипуляций... И старую площадь менять не нужно.Возможно ли в таблице атрибутов основного слоя, теперь старую площадь заменить на сумму площадей элементарных участков другого слоя,
А какже 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.
Что касается дробной части. Суть проблемы не меняется, расхождения пойдут в последнем знаке все равно. Я раньше так и делал, конечная сумма площади расхождения, конечно, падает на величину знака, но количественно число расхождений примерно, такое же. А площади мне нужны именно в га, ну не используются в сельском хозяйстве десятичные знаки.
Формулу Вашу, для отображения номера и площади проверил - работает. Но расстояние получается большое между верхней и нижней надписью и черта прерывиста. Спасибо.
Но я перепроверил себя.
Вы попробуйте сами ради интереса.
Начертите квадрат площадью 41, хоть чего: метров, гектаров, километров.
Вычислите площадь, не инструментом "Измерить", что на панели инструментов, а программно в таблице атрибутов, в тех же метрах, гектарах или км.
Затем, разрежьте его на 4 равных элемента и опять, в таблице атрибутов, измерьте площадь - получите 4 элемента по 10.
Что касается дробной части. Суть проблемы не меняется, расхождения пойдут в последнем знаке все равно. Я раньше так и делал, конечная сумма площади расхождения, конечно, падает на величину знака, но количественно число расхождений примерно, такое же. А площади мне нужны именно в га, ну не используются в сельском хозяйстве десятичные знаки.
Формулу Вашу, для отображения номера и площади проверил - работает. Но расстояние получается большое между верхней и нижней надписью и черта прерывиста. Спасибо.
- Pavel
- Активный участник
- Сообщения: 171
- Зарегистрирован: 15 июл 2009, 07:45
- Репутация: 7
Re: Сумма элементарных участков
В вашем случае их надо использовать. Ни как по другому вы не получите исходную площадь большого объекта, так как программа округляет значения до целых в большую сторону.ну не используются в сельском хозяйстве десятичные знаки.
Мне было лень рисовать квадрат площадью 41. Я нарисовал произвольный. Получилась площадь у него 400 с копейками гектар. Затем разрезал его на четыре не совсем равных участка и опять посчитал площадь: Посчитав сумму получившихся участков с округлением до сотых получил лощадь исходного объекта, с расхождением в 0,01-0,02 га. По моему вполне достаточно.Начертите квадрат площадью 41... Затем, разрежьте его на 4 равных элемента
Использую форматирование текта. Все становится с одной чертой и рядышком:)Но расстояние получается большое между верхней и нижней надписью и черта прерывиста
Быстро, качественно, недорого - выбирайте любые два пункта...
-
- Завсегдатай
- Сообщения: 431
- Зарегистрирован: 06 ноя 2009, 13:18
- Репутация: 10
- Откуда: Екатеринбург
Re: Сумма элементарных участков
Pavel, еще раз спасибо.
Ну не подходит к моему случаю расхождения, даже в сотых долях.
В дальнейшем, используя таблицу атрибутов, я компоную элементы в по определенным признакам, по этим признакам суммирую площадь, а потом суммирую признаки и общую сумму площадей вывожу на карту.
А общая площадь элементов не сходится с общей суммой площадей полигонов, что сразу видно, что с сотыми, что без них.
Документ получается просто не красивый.
Потому я и хотел как-то площадь полигона подменить общей площадью элементов с тем же атрибутом.
Ну не подходит к моему случаю расхождения, даже в сотых долях.
В дальнейшем, используя таблицу атрибутов, я компоную элементы в по определенным признакам, по этим признакам суммирую площадь, а потом суммирую признаки и общую сумму площадей вывожу на карту.
А общая площадь элементов не сходится с общей суммой площадей полигонов, что сразу видно, что с сотыми, что без них.
Документ получается просто не красивый.
Потому я и хотел как-то площадь полигона подменить общей площадью элементов с тем же атрибутом.
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 26 окт 2010, 19:11
- Репутация: 0
Re: Сумма элементарных участков
ПолучимPavel писал(а):Ни как по другому вы не получите исходную площадь
1-Считаем площади с сотыми
2-настраиваем отображение числовых форматов для столбца(десятичные в ноль) 3-получаем на выходе и в ДБФ-е видим
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Сумма элементарных участков
бухгалтера этот вопрос давно решили - суммируете площади всех участков, кроме одного (в вашем случае - любого, потому как все примерно одинаковые; бухгалтера берут самый большой), и присваиваете ему площадь, равную площади большого (охватывающего) минус сумма всех кроме него. Программку смастерите сами, это нетрудно. Можно даже SQL-запросами.Воронин С.В. писал(а): Ну не подходит к моему случаю расхождения, даже в сотых долях.
-
- Завсегдатай
- Сообщения: 431
- Зарегистрирован: 06 ноя 2009, 13:18
- Репутация: 10
- Откуда: Екатеринбург
Re: Сумма элементарных участков
Прекрасно, прекрасно господа.
Не хочу показаться идиотом, но ... .
При использовании метода предложенного cv5rt-м опять на карте отображаются элементы с площадями по 10 га, а общая сумма 41 га и это уже в одном слое.
При использовании метода предложенного gamm-м.
Меня он удовлетворил пока, по предвижу ситуацию, когда общая сумма элементарных участков меньше плошади больших участков на величину большую, чем один элементарный участок. У меня была разница как-то в 27 га, правда не помню в какую сторону.
Не хочу показаться идиотом, но ... .
При использовании метода предложенного cv5rt-м опять на карте отображаются элементы с площадями по 10 га, а общая сумма 41 га и это уже в одном слое.
При использовании метода предложенного gamm-м.
Меня он удовлетворил пока, по предвижу ситуацию, когда общая сумма элементарных участков меньше плошади больших участков на величину большую, чем один элементарный участок. У меня была разница как-то в 27 га, правда не помню в какую сторону.
-
- Гуру
- Сообщения: 4170
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Сумма элементарных участков
мдя ... это в чем же считать-то надо? Считайте во флоатах (потом округляйте до нужной точности), и будет вам щщассье.Воронин С.В. писал(а):Прекрасно, прекрасно господа.
Не хочу показаться идиотом, но ... .
При использовании метода предложенного gamm-м.
Меня он удовлетворил пока, по предвижу ситуацию, когда общая сумма элементарных участков меньше плошади больших участков на величину большую, чем один элементарный участок.
P.S. Даже когда я это делал бухалтерам в dBASE II (на Роботроне, лет 20 назад), таких ошибок не возникало.
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 26 окт 2010, 19:11
- Репутация: 0
Re: Сумма элементарных участков
Зайдем с другого конца.
Имеем
10,25+10,25+10,25+10,25=41
Что требуется увидеть на карте в результате?
10+10+10+11=41?
Имеем
10,25+10,25+10,25+10,25=41
Что требуется увидеть на карте в результате?
10+10+10+11=41?
-
- Завсегдатай
- Сообщения: 431
- Зарегистрирован: 06 ноя 2009, 13:18
- Репутация: 10
- Откуда: Екатеринбург
Re: Сумма элементарных участков
Для cv5rt.
У меня два слоя.
Слой с большими полигонами, эти полионы под своими номерами и с некоторой площадью.
На этом слое необходимо проставить номер полигона и его плошадь.
На основе этого слоя содается следующий слой, в котором полигоны разделены на элементарные участки, порядка 8 - 10 га,плошадь элементов тоже прописывается.
А сумма элементов часто не совпадает с площадью материнского полигона.
Требуется, чтобы эти цыфры сходились.
Количество полигонов до трех сотен. Уходит много времени на поиск нестыковок и ручную подгонку площадей элементов.
Возможно ли создать формулу, чтобы в материнском слое показывалась площадь суммы элементов этого полигона.
У меня два слоя.
Слой с большими полигонами, эти полионы под своими номерами и с некоторой площадью.
На этом слое необходимо проставить номер полигона и его плошадь.
На основе этого слоя содается следующий слой, в котором полигоны разделены на элементарные участки, порядка 8 - 10 га,плошадь элементов тоже прописывается.
А сумма элементов часто не совпадает с площадью материнского полигона.
Требуется, чтобы эти цыфры сходились.
Количество полигонов до трех сотен. Уходит много времени на поиск нестыковок и ручную подгонку площадей элементов.
Возможно ли создать формулу, чтобы в материнском слое показывалась площадь суммы элементов этого полигона.
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 26 окт 2010, 19:11
- Репутация: 0
Re: Сумма элементарных участков
для себя вопрос решил несколько топорно и без формул, но всё же
в таблице атрибутивов элементарных участков правой кнопкой>суммировать: поле для суммирования F_ID, для Area (наверно должен бытьShort) ставим галку против суммы. на выходе имеем таблицу с
1- F_ID
2- кол-вом образцов
в контуре (тоже нужная вещь)
3- суммой площадей элем участков по контурам
её соединяем(joins)с таблицей исходного слоя, поле стыковки F_ID
Поле Area (только это шепотом) заносим в MOP-ы,а поле Sum_Area используем для надписей на карте.
в таблице атрибутивов элементарных участков правой кнопкой>суммировать: поле для суммирования F_ID, для Area (наверно должен бытьShort) ставим галку против суммы. на выходе имеем таблицу с
1- F_ID
2- кол-вом образцов

3- суммой площадей элем участков по контурам
её соединяем(joins)с таблицей исходного слоя, поле стыковки F_ID
Поле Area (только это шепотом) заносим в MOP-ы,а поле Sum_Area используем для надписей на карте.
кстати, если уж зашла речь о красивостях, то полученные надписи конвертим в аннотацииPavel писал(а):Документ получается просто не красивый.
-
- Завсегдатай
- Сообщения: 431
- Зарегистрирован: 06 ноя 2009, 13:18
- Репутация: 10
- Откуда: Екатеринбург
Re: Сумма элементарных участков
cv5rt-у
Всё получилось, спасибо большое.
Есть пара личных вопросов.
Под аббревиатурой
Если это так, то не в агрохимслужбе Вы работаете?
Всё получилось, спасибо большое.
Есть пара личных вопросов.
Под аббревиатурой
имеются в ввиду МОП-ы.cv5rt писал(а):MOP-ы
Если это так, то не в агрохимслужбе Вы работаете?
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 26 окт 2010, 19:11
- Репутация: 0
Re: Сумма элементарных участков
to Воронин С.В.
ответил в личку,(PS если придет раз восемь-сильно не пинайте,- соединение сбоит)
ответил в личку,(PS если придет раз восемь-сильно не пинайте,- соединение сбоит)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 21 гость