Автоматизация простых операций с помощью Mapbasic

Не знаете, где задать вопрос? Задавайте здесь.
kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 08 ноя 2013, 16:36

Добрый день,уважаемые коллеги!
В ходе моей довольно нудной работы по обработке карт в Mapinfo меня посетила мысль вопспользоваться встроенной программой MapInfo. Для этого я открыл окно Mapbasic, проделал операции вручную,а затем, открыв Mapinfo программу заново, вставил тот код, который был получен в окне Mapbasic. Однако программа не стала выполняться. Что нужно сделать, чтобы программа все таки стала работать?
С Уважением!

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение KolesovDmitry » 08 ноя 2013, 16:42

kuziavlad85 писал(а):... вставил тот код, который был получен в окне Mapbasic. Однако программа не стала выполняться. Что нужно сделать, чтобы программа все таки стала работать?
Нужно не просто создать текстовый файл с исходным кодом, а еще и скомпилировать его в программу. И вот уже полученную программу запускать

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение ginpetr » 08 ноя 2013, 20:33

не все операции, прделанные вручную, находят отражение в окне mapbasic, можете увидеть это разместив окна рядом, а так ход мыслей верный

[ Сообщение с мобильного устройства ]

Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение ginpetr » 08 ноя 2013, 20:40

нужно разобраться в языке, написать программу, и даже без компиляции выполнить в окне mapbasic. Но не все операторы выполняютя в этом окне, про этонужно читать в справке. Если небхоимо использовать такие операторы, то без комиляции, конечно, не обойтись

[ Сообщение с мобильного устройства ]

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение Boris » 09 ноя 2013, 00:34

Для начала нужно описать что именно вы делали. Потому слова "в ручную" требуют уточнения.
Код набранный вручную может не работать по 2 причинам:
а) не все операции делались в ручную, что-то делалось через команды меню, а они как сказано выше не всегда оставляют следы в окне мапбасика
б) использовались явные указания на идентификаторы окон карты. а их мапифно присваивает в каждом сеансе заново. команды данные для такого окна будут проигнорированы. для работы с окнами используются относительные номера окон или номер окна запрашивается специальной функцией.
---
вариант что использованы разные версии мапинфо то же существует, но я думаю об этом бы вы упомянули.

kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 09 ноя 2013, 21:52

Смотрите, передо мной стоит следующая научн-прикладная задача: посчитать среднее pH нежного покрова по регионам. Т.е.,например, в Мурманской области известны в 20 точках значения pH, надо посчитать среднее pH для всего региона. Среднеарифметическое значение не походит, т.к. pH=-log10(активность ионов водорода). Т.е. нужно pH перевести в концентрацию ионов водорода, умножить на площадь Полигона, которой отвечает данна точка, затем поделить на общую площадь региона. Затем же взять десятичный лоагифм от полученного результата. В прошлом посте мне подказали,как выводить все площади Вороного, в отдельную табллицу. В идеале я хочу, чтобы было следующее:
1) Я ввожу значения координат и значения pH
2) Программа Mapinfo строит полигоны Вороного, обрезает изх границей РФ, азтем выводит значения площадей
3) Производится перемножение площадей с концентрацией молей водорода, затем рассчитывается pH
4) Полученные значения вносятся в значения регионов и строится тематическая карта

Пока все операции я проделываю вручную. это занимает порядка 2-4 часов(при готовом наборе слоев в Mapinfo)
Т.е. нужно для начала попытаться скомпилировать?

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

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение trir » 09 ноя 2013, 22:02

[offtop]И зачем тут Mapinfo, эту задачку можно и в браузере решить, на javascript :mrgreen: [offtop]

kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 09 ноя 2013, 23:53

Да нет, это не оффтоп, вполне резонный вопрос. Вот только первый момент, я не знаю javascript. Но это полбеды. А вторая беда - как рассчитать площадь(математическая модельв смысле), не используя Mapinfo?
А так да, если бы не расчет площадей, то Mapinfo особо не нужна. Можно было бы в С++ написать код

kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 09 ноя 2013, 23:59

так, а такой момент: скажите, нет ли подобной функции в С/С++? Причем мне нужны еще и побрезатль полигоны границей РФ!
А вообще да, Вы меня довольно правильно поняли!

Boris
Гуру
Сообщения: 4231
Зарегистрирован: 10 апр 2006, 22:34
Репутация: -344969098
Откуда: Париж

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение Boris » 10 ноя 2013, 01:49

я вижу, что мапинфо нужен для п.2, т.к. для п.1 я не понял зачем нужно вводить что-то в ручную, если из текстовой таблицы X,Y,атрибут(ы) мапинфо прекрасно строит таблицу с точками. Полигоны Вороного как расчетная пространственная функция требуют некоторой ГИС. Обрезка тоже. После этого ваши полигоны становятся фиксированными и их площади можно спокойно переносить в любую другую программу для расчетов.
Вместо исходных X,Y,концентрация, вы получаете "уникальный номер, площадь, концентрация". Проделайте над ними любые операции хоть в том же Excel'е.
Получите новую таблицу, которую вернете в мапифно для раскрашивания. Все операции п.2 требуют обращения к окну. Значит вам явно нужен его номер.
---
В C/C++ такие функции наверняка есть в каких-то пакетах. Но какой смысл в этом вопросе, если не хватило сил прочитать документацию по Mapbasic'у где описана работа с окнами, пересылка запросов, а так же "интегрированная картография" (это когда из любой программы, поддерживающей OLE посылаются команды в Mapinfo)?

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

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение trir » 10 ноя 2013, 08:41


Аватара пользователя
ginpetr
Завсегдатай
Сообщения: 385
Зарегистрирован: 21 июн 2011, 12:07
Репутация: 140
Откуда: Орск
Контактная информация:

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение ginpetr » 10 ноя 2013, 09:14

я понимаю решение этой задачи в мапинфо так:
1 есть иксель таблица X,Y,PH
2 открываем ее в мапинфо
3 строим точки ( в мень таблицы есть такая команда кажется, указываем из каких полей взять координаты и выбираем проекцию)
4 строим полигоны вороного в новой таблице

получили две таблицы

5 команда обновить колонку таблицы полигоны вороного, добавить новую колонку из таблицы точки с РН значение РН объединение - объект из таблицы полигоны содержит объект из таблицы точки
получаем таблицу полигонов вороного со значениями РН
6 дальше можно отобразить ее списком, где в меню отобрать поля можно добавить выражение с использованием значения РН и площади полигона
вот так, если я правильно все понимаю

[ Сообщение с мобильного устройства ]

juffin_h
Завсегдатай
Сообщения: 265
Зарегистрирован: 22 окт 2012, 08:35
Репутация: 50
Откуда: Нижний Новгород

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение juffin_h » 10 ноя 2013, 13:08

Мне кажется, программирование этой задачи оправдано только если данные Ph постоянно меняются.
Ну или просто интересно попрограммировать :D

В окне MapBasic выполняется только одна строка. Т.е. помещаем курсор на нужную строку (в окне MapBasic) и нажимаем Enter. И так для каждой строки. Чтобы выполнить программу целиком, ее надо скомпилировать. Кроме того, в окне MapBasic не все операторы выполняются(см. документацию).

У Вас есть таблица точек с Ph и площадью полигона Вороного(прошлая тема). Таким же способом добавляете площади регионов. Теперь для каждой точки у Вас есть Ph, Sвороного, Sрегиона. Той же командой (обновить колонку). вычисляете доли концентрации ионов для каждой точки. Затем SQL запрос с группировкой по регионом и суммой концентраций с переводом в Ph.
"Делов" на десять минут.

И еще. Полигоны Вороного разве не надо порезать границами регионов, чтобы учитывать только часть полигона, попавшую в регион?

kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 10 ноя 2013, 21:20

Вообще по хорошему действительно надо обрезать в границе полигонов. Правда, я пока не понял как это можно сделать=))) Я новичок и в Mapinfo, и,что еще страшнее, в программировании=))). Если подскажите, я буду очень рад=))))
Вообще Вы абсолютно правильно поняли и расписали мне задачу. Я именно так ее себе и представлял. Осталось только 2 вещи:
1) если можете,подскажите,как вырезать полигон Вороного таким образом, чтобы еще и учитывалось границы регионов?
2)Собственно как составить запрос уже в самом Mapinfo, где из всей таблицы получить список со средними pH? Т.е. как составить уравнение,чтобы получить ионные концентрации водорода это я понял. А вот как составить сумму по каким то параметрам? Т.е., чтобы получилась сумма по одному региону?
Спасибо огромное за то, что отвечете на вопрос

P.S. pH меняется,если это интересно. Причем меняется очень сильно для ряда регионов. Также Могу сказать,где повышенное закисление наблюдается регулярно: Мурманская область, а также Ненецкий автономный округ и ряд мест на Урале и Якутии.
P.P.S. в будущем также планируется строить карты плотности выпадений сульфатов и нитратов. С 1980 года ежегодно. Тоже если это сильно интересно=))))

kuziavlad85
Участник
Сообщения: 59
Зарегистрирован: 12 авг 2012, 19:59
Репутация: 0

Re: Автоматизация простых операций с помощью Mapbasic

Сообщение kuziavlad85 » 10 ноя 2013, 23:09

По поводу второго вопроса: я создал полигоны вороного, внес значения площадей полигонов, ионной концентрации, умножения этих двух столбцов. Затем я попытался сделать следующее: в строке Sql-запрос пишу следующее:
1) Выбрать колонки: Площадь_Полигона, умножение
2) из таблиц: square_Voronoi
3) с условием -log10(Count(умножение)/Count(название_УГМС))
4)группировать по Название_субъекта
5) В таблицу Selection

Однако не хочет ничего считать. Я подумал, что может быть в Mapinfo нет десятичного логарифма, оставил Count(умножение)/Count(название_УГМС), однако и здесь меня постигло разочарование.В чем дело?

Ответить

Вернуться в «Я новичок!»

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

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