может, уговорить таки автора написать наконец, что за задача решается?Sibit писал(а):Про программу, даже и не знаю с чего начать
Очень нужна помощь с MapBasic
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Очень нужна помощь с MapBasic
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Очень нужна помощь с MapBasic
Да вроде очевидно - надо геокодировать табличку со встречами птиц по повыделенной базе. Способ определения места на мой взгляд странный, но это как задачу поставили.gamm писал(а):может, уговорить таки автора написать наконец, что за задача решается?
-
- Активный участник
- Сообщения: 128
- Зарегистрирован: 07 окт 2012, 16:25
- Репутация: 20
- Откуда: Москва
Re: Очень нужна помощь с MapBasic
если колонка I - это стороны света, то какую сторону света означает каждая цифра?
все значения, которые есть в этой колонке, такие:
"I"
""
"СТОРОНА КВАРТ."
"3"
"1"
"7"
"3,3,2/4"
"2"
"4"
"8"
"9"
"1,9,4/4,9,3/3"
"2/1,2,4;2/4"
"2/1,4;2/4"
"2/4;2/4"
"5"
"6"
"0.5"
"4,4,3/1"
"2,9,9,9"
"136,116,103,87"
все значения, которые есть в этой колонке, такие:
"I"
""
"СТОРОНА КВАРТ."
"3"
"1"
"7"
"3,3,2/4"
"2"
"4"
"8"
"9"
"1,9,4/4,9,3/3"
"2/1,2,4;2/4"
"2/1,4;2/4"
"2/4;2/4"
"5"
"6"
"0.5"
"4,4,3/1"
"2,9,9,9"
"136,116,103,87"
-
- Гуру
- Сообщения: 4168
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: Очень нужна помощь с MapBasic
возвращаемся к тому же вопросу: постановка задачи отсутствует, а телепатических способностей участников ветки не хватаетsysrepos писал(а):если колонка I - это стороны света, то какую сторону света означает каждая цифра?
все значения, которые есть в этой колонке, такие:

- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Очень нужна помощь с MapBasic
БД птиц явно дефектна. Возможно, записи добавлялись из таблиц с разной структурой. Или где-то на этапах импортов/экспортов перемешались разделители полей.sysrepos писал(а):если колонка I - это стороны света, то какую сторону света означает каждая цифра?
Несколько замечаний по обработке направлений в Конечном варианте.
- Величины x3, y3 используются в параметрах CreateLine в качестве координат, что есть безумие. Они суть разности координат.
- Нечто осмысленное получится, если заменить x3, y3 на cx, cy. И всё же схема направлений, демонстрирующая результат, вызывает некоторые сомнения. Первое: создание нулевого вектора для кода 9 с плохо предсказуемыми последствиями. Второе: вторичные направления (5-8) логично кодировать с СВ, а не с СЗ.
- Не все кварталы в лесу близки по форме к квадрату. Для квартала, вытянутого вдоль меридиана или параллели, азимуты вторичных направлений будут далеки от предположительно ожидаемых 45, 135, 225 и 315 градусов.
Код: Выделить всё
5 1 6
\ | /
4 - 9 - 2
/ | \
8 3 7
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 24 июн 2012, 17:43
- Репутация: 0
Re: Очень нужна помощь с MapBasic
Да, это проблема. Но другой базы просто никто не предоставил. Приходится работать с тем, что есть. Увы, это не единственный её недостаток.БД птиц явно дефектна. Возможно, записи добавлялись из таблиц с разной структурой. Или где-то на этапах импортов/экспортов перемешались разделители полей.
Большое спасибо всем за советы, программа заработала, точки рисуются. У меня остался последний вопрос: когда на заключительном этапе вставляются точка и прилагающиеся данные, они разбиваются по информации из каждой колонки на строку. Лесенкой.То есть вот на такой код к одной точке будут прилагаться две частично заполненные строчки.
Код: Выделить всё
Insert Into Результат (obj) Values (CreatePoint(ObjectNodeX(Storona,1,2), ObjectNodeY(Storona,1,2) ))
Insert Into Результат (E) Values (Bio)
Insert Into Результат (J) Values (Videl)
-
- Активный участник
- Сообщения: 128
- Зарегистрирован: 07 окт 2012, 16:25
- Репутация: 20
- Откуда: Москва
Re: Очень нужна помощь с MapBasic
попробуйте так:
раз у вас всё получилось, выложите код, интересно посмотреть всё таки, что в итоге должно быть
Код: Выделить всё
Insert Into Результат (Obj, E, J) Values (CreatePoint(ObjectNodeX(Storona,1,2), ObjectNodeY(Storona,1,2) ), Bio, Videl )
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 24 июн 2012, 17:43
- Репутация: 0
Re: Очень нужна помощь с MapBasic
Поспешила я с "Всё получилось"... Всплыли два момента.
1.
В колонку S данные Vid не вставляются. То есть числовые значения проходят на ура, а в колонке с текстовой информацией в таблице Результат идут только 0. Сама переменная Vid объявлена как строка, структуры колонок S в БД_птиц и Результате совпадают: символьный тип, 27 знаков.
2. Вдруг оказалось, что точки должны строиться только для вида Глухарь, т. е. Vid = Глухарь. И теперь я в непонятках, как и где прописать это условие.
Куда и как вставлять условие только для глухаря? Через Select одновременно с выделами? Но какой тогда там синтаксис, потому что программа у меня потребовала объединения таблицы Выделы и БД_птиц при попытке исправить запрос там.
Хотя в принципе, если решить первый момент, то потом можно будет просто в итоговой таблице сделать выборку для глухаря. Но хотелось бы, что это определялось сразу.
1.
Код: Выделить всё
Insert Into Результат (Obj, E, J, H, I, S) Values (CreatePoint(ObjectNodeX(oDirLine,1,2), ObjectNodeY(oDirLine,1,2) ), Biotop, Videl, Kvartal, Storona, Vid)
2. Вдруг оказалось, что точки должны строиться только для вида Глухарь, т. е. Vid = Глухарь. И теперь я в непонятках, как и где прописать это условие.
Код: Выделить всё
Fetch First From БД_птиц
Do While Not EOT(БД_птиц) '' Перебор строк
Kvartal = Val(БД_птиц.H) '' Квартал
Videl = Val(БД_птиц.J) '' Выдел
Storona = Val(БД_птиц.I) '' Сторона света
Biotop = Val(БД_птиц.E) "Биотоп
Vid = Val(БД_птиц.S) "Вид
Select * From Выделы Where Поле2 = Videl And Номер_квартала = Kvartal Into temptab Noselect
If iDir < 1 Or iVdl < 1 Or iKvtl > 115 Then
'' Нет такого квартала, выдела или стороны света
Else
rect_mbr = MBR(tmptab.obj)
И дальше идёт вычисление координат
Хотя в принципе, если решить первый момент, то потом можно будет просто в итоговой таблице сделать выборку для глухаря. Но хотелось бы, что это определялось сразу.
-
- Завсегдатай
- Сообщения: 265
- Зарегистрирован: 22 окт 2012, 08:35
- Репутация: 50
- Откуда: Нижний Новгород
Re: Очень нужна помощь с MapBasic
1. Заменить на
Функция Val() преобразует строку в число.
2. Заменить
На
Код: Выделить всё
Vid = Val(БД_птиц.S)
Код: Выделить всё
Vid = БД_птиц.S
2. Заменить
Код: Выделить всё
If iDir < 1 Or iVdl < 1 Or iKvtl > 115 Then
'' Нет такого квартала, выдела или стороны света
Else
rect_mbr = MBR(tmptab.obj)
И дальше идёт вычисление координат
…
Код: Выделить всё
If iDir < 1 Or iVdl < 1 Or iKvtl > 115 Then
'' Нет такого квартала, выдела или стороны света
ElseIf Vid = “Глухарь”
rect_mbr = MBR(tmptab.obj)
И дальше идёт вычисление координат
...
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 24 июн 2012, 17:43
- Репутация: 0
Re: Очень нужна помощь с MapBasic
Тьфу ты, точно. Забыла совсем. Спасибо, исправила.Функция Val() преобразует строку в число.
По поводу второго - я уже пробовала эту конструкцию и даже если программа компилируется, то при запуске выдаётся ошибка "Не определена переменная или поле Глухарь". Поэтому то и встала в тупик.
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Очень нужна помощь с MapBasic
Код: Выделить всё
Select * From Выделы Where Поле2 = Videl And Номер_квартала = Kvartal And Vid = "Глухарь" Into temptab
The purpose of computing is insight, not numbers
-
- Интересующийся
- Сообщения: 18
- Зарегистрирован: 24 июн 2012, 17:43
- Репутация: 0
Re: Очень нужна помощь с MapBasic
Vid относится к таблице БД_птиц.Select * From Выделы Where Поле2 = Videl And Номер_квартала = Kvartal And Vid = "Глухарь" Into temptab
- Игорь Белов
- Гуру
- Сообщения: 2240
- Зарегистрирован: 04 янв 2011, 22:00
- Репутация: 1513
- Откуда: Казань
Re: Очень нужна помощь с MapBasic
В этом случае делают объединение таблиц:
задавая условие объединения по уникальным полям:
Таблица с нужной геометрией должна быть первой.
Условие можно усложнять:
Код: Выделить всё
Select * From Table1, Table2 ...
Код: Выделить всё
... Where Table1.Kvartal = Table2.Kvartal And Table1.Vydel = Table2.Vydel ...
Условие можно усложнять:
Код: Выделить всё
... Where Table1.Kvartal = Table2.Kvartal And Table1.Vydel = Table2.Vydel And Table2.Vid = "Глухарь"...
The purpose of computing is insight, not numbers
-
- Гуру
- Сообщения: 5354
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1021
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
-
- Завсегдатай
- Сообщения: 265
- Зарегистрирован: 22 окт 2012, 08:35
- Репутация: 50
- Откуда: Нижний Новгород
Re: Очень нужна помощь с MapBasic
В данном контексте такой ошибки быть не должно. "Глухарь" (в кавычках) - константа. Приведите пожалуйста весь код. Ну или хотя бы фрагмент от If до End IfAphina писал(а):выдаётся ошибка "Не определена переменная или поле Глухарь"
Да, это вариант. Но, по моему скромному мнению, излишне городить многотабличный запрос, когда человек с If ... Else разобраться не может.ErnieBoyd писал(а):В этом случае делают объединение таблиц:
КОД: ВЫДЕЛИТЬ ВСЁ
Select * From Table1, Table2 ...
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя