Автоматизация простых операций с помощью Mapbasic
-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Автоматизация простых операций с помощью Mapbasic
Добрый день,уважаемые коллеги!
В ходе моей довольно нудной работы по обработке карт в Mapinfo меня посетила мысль вопспользоваться встроенной программой MapInfo. Для этого я открыл окно Mapbasic, проделал операции вручную,а затем, открыв Mapinfo программу заново, вставил тот код, который был получен в окне Mapbasic. Однако программа не стала выполняться. Что нужно сделать, чтобы программа все таки стала работать?
С Уважением!
В ходе моей довольно нудной работы по обработке карт в Mapinfo меня посетила мысль вопспользоваться встроенной программой MapInfo. Для этого я открыл окно Mapbasic, проделал операции вручную,а затем, открыв Mapinfo программу заново, вставил тот код, который был получен в окне Mapbasic. Однако программа не стала выполняться. Что нужно сделать, чтобы программа все таки стала работать?
С Уважением!
-
- Гуру
- Сообщения: 810
- Зарегистрирован: 22 авг 2007, 14:58
- Репутация: 123
- Откуда: Казань
Re: Автоматизация простых операций с помощью Mapbasic
Нужно не просто создать текстовый файл с исходным кодом, а еще и скомпилировать его в программу. И вот уже полученную программу запускатьkuziavlad85 писал(а):... вставил тот код, который был получен в окне Mapbasic. Однако программа не стала выполняться. Что нужно сделать, чтобы программа все таки стала работать?
- ginpetr
- Завсегдатай
- Сообщения: 385
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Автоматизация простых операций с помощью Mapbasic
не все операции, прделанные вручную, находят отражение в окне mapbasic, можете увидеть это разместив окна рядом, а так ход мыслей верный
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
- ginpetr
- Завсегдатай
- Сообщения: 385
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Автоматизация простых операций с помощью Mapbasic
нужно разобраться в языке, написать программу, и даже без компиляции выполнить в окне mapbasic. Но не все операторы выполняютя в этом окне, про этонужно читать в справке. Если небхоимо использовать такие операторы, то без комиляции, конечно, не обойтись
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Автоматизация простых операций с помощью Mapbasic
Для начала нужно описать что именно вы делали. Потому слова "в ручную" требуют уточнения.
Код набранный вручную может не работать по 2 причинам:
а) не все операции делались в ручную, что-то делалось через команды меню, а они как сказано выше не всегда оставляют следы в окне мапбасика
б) использовались явные указания на идентификаторы окон карты. а их мапифно присваивает в каждом сеансе заново. команды данные для такого окна будут проигнорированы. для работы с окнами используются относительные номера окон или номер окна запрашивается специальной функцией.
---
вариант что использованы разные версии мапинфо то же существует, но я думаю об этом бы вы упомянули.
Код набранный вручную может не работать по 2 причинам:
а) не все операции делались в ручную, что-то делалось через команды меню, а они как сказано выше не всегда оставляют следы в окне мапбасика
б) использовались явные указания на идентификаторы окон карты. а их мапифно присваивает в каждом сеансе заново. команды данные для такого окна будут проигнорированы. для работы с окнами используются относительные номера окон или номер окна запрашивается специальной функцией.
---
вариант что использованы разные версии мапинфо то же существует, но я думаю об этом бы вы упомянули.
-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Re: Автоматизация простых операций с помощью Mapbasic
Смотрите, передо мной стоит следующая научн-прикладная задача: посчитать среднее pH нежного покрова по регионам. Т.е.,например, в Мурманской области известны в 20 точках значения pH, надо посчитать среднее pH для всего региона. Среднеарифметическое значение не походит, т.к. pH=-log10(активность ионов водорода). Т.е. нужно pH перевести в концентрацию ионов водорода, умножить на площадь Полигона, которой отвечает данна точка, затем поделить на общую площадь региона. Затем же взять десятичный лоагифм от полученного результата. В прошлом посте мне подказали,как выводить все площади Вороного, в отдельную табллицу. В идеале я хочу, чтобы было следующее:
1) Я ввожу значения координат и значения pH
2) Программа Mapinfo строит полигоны Вороного, обрезает изх границей РФ, азтем выводит значения площадей
3) Производится перемножение площадей с концентрацией молей водорода, затем рассчитывается pH
4) Полученные значения вносятся в значения регионов и строится тематическая карта
Пока все операции я проделываю вручную. это занимает порядка 2-4 часов(при готовом наборе слоев в Mapinfo)
Т.е. нужно для начала попытаться скомпилировать?
1) Я ввожу значения координат и значения pH
2) Программа Mapinfo строит полигоны Вороного, обрезает изх границей РФ, азтем выводит значения площадей
3) Производится перемножение площадей с концентрацией молей водорода, затем рассчитывается pH
4) Полученные значения вносятся в значения регионов и строится тематическая карта
Пока все операции я проделываю вручную. это занимает порядка 2-4 часов(при готовом наборе слоев в Mapinfo)
Т.е. нужно для начала попытаться скомпилировать?
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Автоматизация простых операций с помощью Mapbasic
[offtop]И зачем тут Mapinfo, эту задачку можно и в браузере решить, на javascript
[offtop]

-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Re: Автоматизация простых операций с помощью Mapbasic
Да нет, это не оффтоп, вполне резонный вопрос. Вот только первый момент, я не знаю javascript. Но это полбеды. А вторая беда - как рассчитать площадь(математическая модельв смысле), не используя Mapinfo?
А так да, если бы не расчет площадей, то Mapinfo особо не нужна. Можно было бы в С++ написать код
А так да, если бы не расчет площадей, то Mapinfo особо не нужна. Можно было бы в С++ написать код
-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Re: Автоматизация простых операций с помощью Mapbasic
так, а такой момент: скажите, нет ли подобной функции в С/С++? Причем мне нужны еще и побрезатль полигоны границей РФ!
А вообще да, Вы меня довольно правильно поняли!
А вообще да, Вы меня довольно правильно поняли!
-
- Гуру
- Сообщения: 4231
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: -344969098
- Откуда: Париж
Re: Автоматизация простых операций с помощью Mapbasic
я вижу, что мапинфо нужен для п.2, т.к. для п.1 я не понял зачем нужно вводить что-то в ручную, если из текстовой таблицы X,Y,атрибут(ы) мапинфо прекрасно строит таблицу с точками. Полигоны Вороного как расчетная пространственная функция требуют некоторой ГИС. Обрезка тоже. После этого ваши полигоны становятся фиксированными и их площади можно спокойно переносить в любую другую программу для расчетов.
Вместо исходных X,Y,концентрация, вы получаете "уникальный номер, площадь, концентрация". Проделайте над ними любые операции хоть в том же Excel'е.
Получите новую таблицу, которую вернете в мапифно для раскрашивания. Все операции п.2 требуют обращения к окну. Значит вам явно нужен его номер.
---
В C/C++ такие функции наверняка есть в каких-то пакетах. Но какой смысл в этом вопросе, если не хватило сил прочитать документацию по Mapbasic'у где описана работа с окнами, пересылка запросов, а так же "интегрированная картография" (это когда из любой программы, поддерживающей OLE посылаются команды в Mapinfo)?
Вместо исходных X,Y,концентрация, вы получаете "уникальный номер, площадь, концентрация". Проделайте над ними любые операции хоть в том же Excel'е.
Получите новую таблицу, которую вернете в мапифно для раскрашивания. Все операции п.2 требуют обращения к окну. Значит вам явно нужен его номер.
---
В C/C++ такие функции наверняка есть в каких-то пакетах. Но какой смысл в этом вопросе, если не хватило сил прочитать документацию по Mapbasic'у где описана работа с окнами, пересылка запросов, а так же "интегрированная картография" (это когда из любой программы, поддерживающей OLE посылаются команды в Mapinfo)?
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
- ginpetr
- Завсегдатай
- Сообщения: 385
- Зарегистрирован: 21 июн 2011, 12:07
- Репутация: 140
- Откуда: Орск
- Контактная информация:
Re: Автоматизация простых операций с помощью Mapbasic
я понимаю решение этой задачи в мапинфо так:
1 есть иксель таблица X,Y,PH
2 открываем ее в мапинфо
3 строим точки ( в мень таблицы есть такая команда кажется, указываем из каких полей взять координаты и выбираем проекцию)
4 строим полигоны вороного в новой таблице
получили две таблицы
5 команда обновить колонку таблицы полигоны вороного, добавить новую колонку из таблицы точки с РН значение РН объединение - объект из таблицы полигоны содержит объект из таблицы точки
получаем таблицу полигонов вороного со значениями РН
6 дальше можно отобразить ее списком, где в меню отобрать поля можно добавить выражение с использованием значения РН и площади полигона
вот так, если я правильно все понимаю
[ Сообщение с мобильного устройства ]
1 есть иксель таблица X,Y,PH
2 открываем ее в мапинфо
3 строим точки ( в мень таблицы есть такая команда кажется, указываем из каких полей взять координаты и выбираем проекцию)
4 строим полигоны вороного в новой таблице
получили две таблицы
5 команда обновить колонку таблицы полигоны вороного, добавить новую колонку из таблицы точки с РН значение РН объединение - объект из таблицы полигоны содержит объект из таблицы точки
получаем таблицу полигонов вороного со значениями РН
6 дальше можно отобразить ее списком, где в меню отобрать поля можно добавить выражение с использованием значения РН и площади полигона
вот так, если я правильно все понимаю
[ Сообщение с мобильного устройства ]
-
- Завсегдатай
- Сообщения: 265
- Зарегистрирован: 22 окт 2012, 08:35
- Репутация: 50
- Откуда: Нижний Новгород
Re: Автоматизация простых операций с помощью Mapbasic
Мне кажется, программирование этой задачи оправдано только если данные Ph постоянно меняются.
Ну или просто интересно попрограммировать
В окне MapBasic выполняется только одна строка. Т.е. помещаем курсор на нужную строку (в окне MapBasic) и нажимаем Enter. И так для каждой строки. Чтобы выполнить программу целиком, ее надо скомпилировать. Кроме того, в окне MapBasic не все операторы выполняются(см. документацию).
У Вас есть таблица точек с Ph и площадью полигона Вороного(прошлая тема). Таким же способом добавляете площади регионов. Теперь для каждой точки у Вас есть Ph, Sвороного, Sрегиона. Той же командой (обновить колонку). вычисляете доли концентрации ионов для каждой точки. Затем SQL запрос с группировкой по регионом и суммой концентраций с переводом в Ph.
"Делов" на десять минут.
И еще. Полигоны Вороного разве не надо порезать границами регионов, чтобы учитывать только часть полигона, попавшую в регион?
Ну или просто интересно попрограммировать

В окне MapBasic выполняется только одна строка. Т.е. помещаем курсор на нужную строку (в окне MapBasic) и нажимаем Enter. И так для каждой строки. Чтобы выполнить программу целиком, ее надо скомпилировать. Кроме того, в окне MapBasic не все операторы выполняются(см. документацию).
У Вас есть таблица точек с Ph и площадью полигона Вороного(прошлая тема). Таким же способом добавляете площади регионов. Теперь для каждой точки у Вас есть Ph, Sвороного, Sрегиона. Той же командой (обновить колонку). вычисляете доли концентрации ионов для каждой точки. Затем SQL запрос с группировкой по регионом и суммой концентраций с переводом в Ph.
"Делов" на десять минут.
И еще. Полигоны Вороного разве не надо порезать границами регионов, чтобы учитывать только часть полигона, попавшую в регион?
-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Re: Автоматизация простых операций с помощью Mapbasic
Вообще по хорошему действительно надо обрезать в границе полигонов. Правда, я пока не понял как это можно сделать=))) Я новичок и в Mapinfo, и,что еще страшнее, в программировании=))). Если подскажите, я буду очень рад=))))
Вообще Вы абсолютно правильно поняли и расписали мне задачу. Я именно так ее себе и представлял. Осталось только 2 вещи:
1) если можете,подскажите,как вырезать полигон Вороного таким образом, чтобы еще и учитывалось границы регионов?
2)Собственно как составить запрос уже в самом Mapinfo, где из всей таблицы получить список со средними pH? Т.е. как составить уравнение,чтобы получить ионные концентрации водорода это я понял. А вот как составить сумму по каким то параметрам? Т.е., чтобы получилась сумма по одному региону?
Спасибо огромное за то, что отвечете на вопрос
P.S. pH меняется,если это интересно. Причем меняется очень сильно для ряда регионов. Также Могу сказать,где повышенное закисление наблюдается регулярно: Мурманская область, а также Ненецкий автономный округ и ряд мест на Урале и Якутии.
P.P.S. в будущем также планируется строить карты плотности выпадений сульфатов и нитратов. С 1980 года ежегодно. Тоже если это сильно интересно=))))
Вообще Вы абсолютно правильно поняли и расписали мне задачу. Я именно так ее себе и представлял. Осталось только 2 вещи:
1) если можете,подскажите,как вырезать полигон Вороного таким образом, чтобы еще и учитывалось границы регионов?
2)Собственно как составить запрос уже в самом Mapinfo, где из всей таблицы получить список со средними pH? Т.е. как составить уравнение,чтобы получить ионные концентрации водорода это я понял. А вот как составить сумму по каким то параметрам? Т.е., чтобы получилась сумма по одному региону?
Спасибо огромное за то, что отвечете на вопрос
P.S. pH меняется,если это интересно. Причем меняется очень сильно для ряда регионов. Также Могу сказать,где повышенное закисление наблюдается регулярно: Мурманская область, а также Ненецкий автономный округ и ряд мест на Урале и Якутии.
P.P.S. в будущем также планируется строить карты плотности выпадений сульфатов и нитратов. С 1980 года ежегодно. Тоже если это сильно интересно=))))
-
- Участник
- Сообщения: 59
- Зарегистрирован: 12 авг 2012, 19:59
- Репутация: 0
Re: Автоматизация простых операций с помощью Mapbasic
По поводу второго вопроса: я создал полигоны вороного, внес значения площадей полигонов, ионной концентрации, умножения этих двух столбцов. Затем я попытался сделать следующее: в строке Sql-запрос пишу следующее:
1) Выбрать колонки: Площадь_Полигона, умножение
2) из таблиц: square_Voronoi
3) с условием -log10(Count(умножение)/Count(название_УГМС))
4)группировать по Название_субъекта
5) В таблицу Selection
Однако не хочет ничего считать. Я подумал, что может быть в Mapinfo нет десятичного логарифма, оставил Count(умножение)/Count(название_УГМС), однако и здесь меня постигло разочарование.В чем дело?
1) Выбрать колонки: Площадь_Полигона, умножение
2) из таблиц: square_Voronoi
3) с условием -log10(Count(умножение)/Count(название_УГМС))
4)группировать по Название_субъекта
5) В таблицу Selection
Однако не хочет ничего считать. Я подумал, что может быть в Mapinfo нет десятичного логарифма, оставил Count(умножение)/Count(название_УГМС), однако и здесь меня постигло разочарование.В чем дело?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя