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

MapInfo, MapBasic
Аватара пользователя
WeMaN
Завсегдатай
Сообщения: 310
Зарегистрирован: 16 фев 2009, 10:49
Репутация: 0

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

Сообщение WeMaN » 05 июн 2013, 09:40

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

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

trir
Гуру
Сообщения: 4790
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 903
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 05 июн 2013, 09:45

Проще использовать БД - всего то чучуть SQL'я

Аватара пользователя
WeMaN
Завсегдатай
Сообщения: 310
Зарегистрирован: 16 фев 2009, 10:49
Репутация: 0

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

Сообщение WeMaN » 05 июн 2013, 10:39

Мне надо чтобы человек не знающий мапинфо нажал на кнопку ввёл условия и ему всё посчиталось

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Статьи: 3
Проекты: 5/1
Репутация: 790
Ваше звание: званий не имею
Откуда: Москва

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

Сообщение Александр Мурый » 05 июн 2013, 10:42

WeMaN писал(а): 1. Реализуемо ли это с помощью VBA в MapInfo?
При чём здесь VBA? Вы имели в виду Mapbasic?
Редактор материалов, модератор форума

trir
Гуру
Сообщения: 4790
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 903
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 05 июн 2013, 10:52

Нуу, если использовать БД, то можно реализовать это и на VBA в Excel'е...

Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Проекты: 1
Репутация: 28
Откуда: Новосибирск

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

Сообщение Sibit » 05 июн 2013, 11:03

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

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

trir
Гуру
Сообщения: 4790
Зарегистрирован: 09 апр 2010, 19:30
Статьи: 1
Репутация: 903
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

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

Сообщение trir » 05 июн 2013, 11:15

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

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2096
Зарегистрирован: 04 янв 2011, 22:00
Статьи: 12
Проекты: 1
Репутация: 1387
Откуда: Казань

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

Сообщение Игорь Белов » 05 июн 2013, 11:22

trir писал(а):при таких условиях, ничего проще SQL
Согласен с Вами. Однако если топикстартер подразумевает обрезание объектов по границе фиолетового прямоугольника, ситуация несколько усложняется.
The purpose of computing is insight, not numbers

Аватара пользователя
WeMaN
Завсегдатай
Сообщения: 310
Зарегистрирован: 16 фев 2009, 10:49
Репутация: 0

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

Сообщение WeMaN » 05 июн 2013, 13:11

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

Sibit
Активный участник
Сообщения: 216
Зарегистрирован: 21 окт 2009, 13:29
Проекты: 1
Репутация: 28
Откуда: Новосибирск

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

Сообщение Sibit » 05 июн 2013, 14:06

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
Дальше в том же духе :)

sysrepos
Активный участник
Сообщения: 125
Зарегистрирован: 07 окт 2012, 16:25
Репутация: 20
Откуда: Москва

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

Сообщение sysrepos » 07 июн 2013, 16:42

вот пример программы в виде 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






grandred75
Новоприбывший
Сообщения: 3
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 0
Откуда: Москва

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

Сообщение grandred75 » 29 апр 2021, 11:31

Люди добрые! Подскажите, пожалуйста, как составить SQL-запрос, так чтобы подсчитать СУММАРНУЮ ПОЭТАЖНУЮ площадь зданий, размещенных на КАЖДОМ участке, и записать полученные значения в колонку «Площадь_Зданий_в_Участке» таблицы «Участки».
Вложения
Здания в участке.rar
(3.8 КБ) 147 скачиваний
Здания в участке.png
Здания в участке.png (98.15 КБ) 675 просмотров

freeExec
Гуру
Сообщения: 1045
Зарегистрирован: 23 апр 2011, 10:32
Проекты: 1
Репутация: 176
Откуда: Ульяновск

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

Сообщение freeExec » 29 апр 2021, 13:18

Группировка должна быть и по участку и по этажу.

grandred75
Новоприбывший
Сообщения: 3
Зарегистрирован: 29 апр 2021, 10:38
Репутация: 0
Откуда: Москва

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

Сообщение grandred75 » 29 апр 2021, 14:18

Группировка зданий по участкам. А если еще и по этажам, то совсем здорово будет!

Boris
Гуру
Сообщения: 4158
Зарегистрирован: 10 апр 2006, 22:34
Статьи: 3
Проекты: 1
Репутация: 420
Откуда: Париж

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

Сообщение Boris » 06 май 2021, 22:31

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

Ответить

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

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

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