Страница 1 из 2

Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 09:40
WeMaN
Добрый день, давно уже не задавался вопросами, вот решил с вами советоваться, тема в первую очередь интересна тем, кто умеет программировать в мапинфо. Есть карта, прикрепил её, необходимо создать инструменты, которые бы делали следующее:
1. Надо посчитать суммарную площадь всех объектов с одинаковы неаименованием в определённой таблице. Например: Таблица Rast нужно посчитать суммарную площадь обектов со значением колонки "Луговая растительность (разнотравье)"
2. Надо посчитать суммарную площадь всех объектов с одинаковы неаименованием в определённой таблице находящихся в границах определённой области выделенной полигоном. Например: Таблица Rast нужно посчитать суммарную площадь обектов со значением колонки "Луговая растительность (разнотравье)" находящихся в пределе зеленого прямоугольника таблицы "границы_регионов"
3. Посчитать суммарную площадь всех объектов таблицы (например "Rast") попадающих в область фиолетового прямоугольника таблицы "границы_регионов"
4. Посчитать суммарную площадь всех объектов всех таблиц с площадями попадающих в область фиолетового прямоугольника таблицы "границы_регионов"
5. Посчитать суммарную площадь всех объектов всех таблиц

Теперь собственно вопросы:
1. Реализуемо ли это с помощью VBA в MapInfo?
2. Есть ли какие либо уже созданные кем то аналоги (мало ли вдруг кто сталкивался)?
3. Само собой названия таблиц должны быть не фиксированными и названия аттрибутов тоже, потом будут другие таблицы и аттрибуты, и считаться будет по ним, данная карта просто пример.
Вот спасибо за внимание, буду рад услышать советы.

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 09:45
trir
Проще использовать БД - всего то чучуть SQL'я

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 10:39
WeMaN
Мне надо чтобы человек не знающий мапинфо нажал на кнопку ввёл условия и ему всё посчиталось

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 10:42
Александр Мурый
WeMaN писал(а): 1. Реализуемо ли это с помощью VBA в MapInfo?
При чём здесь VBA? Вы имели в виду Mapbasic?

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 10:52
trir
Нуу, если использовать БД, то можно реализовать это и на VBA в Excel'е...

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 11:03
Sibit
1) Да, только там не VBA. Если надо именно VBA то копать в сторону OLE.
2) Прям совсем аналогов, я - нет. Но и задача не сильно сложная у вас.
3) Не проблема :)

PS возможно вашу задачу можно решить и без программирования

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 11:15
trir
названия таблиц должны быть не фиксированными и названия аттрибутов тоже, потом будут другие таблицы и аттрибуты, и считаться будет по ним
Вообще то, при таких условиях, ничего проще SQL - мне на ум не приходит. А если ещё найти навороченный GUI с графическим построителем запросов - то и писать ничего не придётся...

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 11:22
Игорь Белов
trir писал(а):при таких условиях, ничего проще SQL
Согласен с Вами. Однако если топикстартер подразумевает обрезание объектов по границе фиолетового прямоугольника, ситуация несколько усложняется.

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 13:11
WeMaN
Господа, я вас не понял, всех, давай по порядку:
1. Да имел ввиду МэпБэйсик, аналог VBA Для мапинфы
2. SQL имеется ввиду встроенный, можете на примере одной из задач показать как эти все действия подвесить на 1 кнопку
3. Может вы меня не так поняли, 5 задач, 5 кнопок, диалоговое окно спрашивает что я хочу найти и т.д.

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 05 июн 2013, 14:06
Sibit
1) Ну там не совсем аналог. Может просто выложите что у вас получилось, а мы поможем сделать что не получается?
2) А в чем сложности?

3) ну напимер:

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

1) 
Select Наименование,Sum(Area(Obj,"hectare")) from Rast where Наименование = "Луговая растительность (разнотравье)" group by Наименование into Selection

2)
 Select * from Rast where obj Entirely Within Any(Select Obj from Границы_регионов where Наименоваеие = "Зилениенький :)") into sel1 noselect
Select Наименование,Sum(Area(Obj,"hectare")) from sel1 where Наименование = "Луговая растительность (разнотравье)" group by Наименование into Selection
Дальше в том же духе :)

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 07 июн 2013, 16:42
sysrepos
вот пример программы в виде 5 кнопок (на скорую руку), первая кнопка выводит в окно получившуюся площадь, остальные кнопки ничего не делают (пока)

если у вас нет компилятора мапбэйсик, напишите - скомпилирую, выложу

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

Include "mapbasic.def"
Include "icons.def"
Declare Sub Main
Declare Sub proc1
Declare Sub proc2
Declare Sub proc3
Declare Sub proc4
Declare Sub proc5


Sub Main

Create ButtonPad "Мои Кнопки" As 
PushButton
Icon MI_ICON_NUMBERS_2
Calling proc1
HelpMsg "кнопка1"

PushButton
Icon MI_ICON_NUMBERS_3
Calling proc2
HelpMsg "кнопка2"

PushButton
Icon MI_ICON_NUMBERS_4
Calling proc3
HelpMsg "кнопка3"

PushButton
Icon MI_ICON_NUMBERS_5
Calling proc4
HelpMsg "кнопка4"

PushButton
Icon MI_ICON_NUMBERS_6
Calling proc5
HelpMsg "кнопка5"

show
End Sub



Sub  proc1
'тут сама процедура
Select Наименование,Sum(Area(Obj,"hectare")) 
from Rast where Наименование = "Луговая растительность (разнотравье)" 
group by Наименование into q1
note "площадь: " +q1.col2

End Sub

Sub  proc2
End Sub

Sub  proc3
End Sub

Sub  proc4
End Sub

Sub  proc5
End Sub






Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 29 апр 2021, 11:31
grandred75
Люди добрые! Подскажите, пожалуйста, как составить SQL-запрос, так чтобы подсчитать СУММАРНУЮ ПОЭТАЖНУЮ площадь зданий, размещенных на КАЖДОМ участке, и записать полученные значения в колонку «Площадь_Зданий_в_Участке» таблицы «Участки».

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 29 апр 2021, 13:18
freeExec
Группировка должна быть и по участку и по этажу.

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 29 апр 2021, 14:18
grandred75
Группировка зданий по участкам. А если еще и по этажам, то совсем здорово будет!

Re: Считаем площади в MapInfo (пргаммирование)

Добавлено: 06 май 2021, 22:31
Boris
grandred75 писал(а):
29 апр 2021, 11:31
как составить SQL-запрос
Прочитать руководство по языку SQL + Mapinfo ?
У вас какие-то особые здания - на каждом этаже подразумевается разная площадь? Если "нет", то для каждого здания суммарная площадь = "площадь фундамента" * "количество этажей".
Запрос на отнесение здания к участку называется пространственным. Перед его составлением стоит прочитать руководство чем отличается один пространственный оператор от другого. Это сократит время на выяснение почему не все здания "попали" в участки.
Последовательность запросов:
1. здания "входящие" или "пересекающие" с участками. выбрать только два столбца id-участка и "площадь * этажность" из таблицы "здания"
2. группировка запроса 1 по полю id с функцией агрегирования SUM.
3. обновление колонки в таблице "здания" вычисленной суммой. Связь по полю id.