Re: Очень нужна помощь с MapBasic
Добавлено: 07 май 2013, 11:00
может, уговорить таки автора написать наконец, что за задача решается?Sibit писал(а):Про программу, даже и не знаю с чего начать
Геоинформационные системы (ГИС) и Дистанционное зондирование Земли
https://gis-lab.info/forum/
может, уговорить таки автора написать наконец, что за задача решается?Sibit писал(а):Про программу, даже и не знаю с чего начать
Да вроде очевидно - надо геокодировать табличку со встречами птиц по повыделенной базе. Способ определения места на мой взгляд странный, но это как задачу поставили.gamm писал(а):может, уговорить таки автора написать наконец, что за задача решается?
возвращаемся к тому же вопросу: постановка задачи отсутствует, а телепатических способностей участников ветки не хватаетsysrepos писал(а):если колонка I - это стороны света, то какую сторону света означает каждая цифра?
все значения, которые есть в этой колонке, такие:
БД птиц явно дефектна. Возможно, записи добавлялись из таблиц с разной структурой. Или где-то на этапах импортов/экспортов перемешались разделители полей.sysrepos писал(а):если колонка I - это стороны света, то какую сторону света означает каждая цифра?
Код: Выделить всё
5 1 6
\ | /
4 - 9 - 2
/ | \
8 3 7
Да, это проблема. Но другой базы просто никто не предоставил. Приходится работать с тем, что есть. Увы, это не единственный её недостаток.БД птиц явно дефектна. Возможно, записи добавлялись из таблиц с разной структурой. Или где-то на этапах импортов/экспортов перемешались разделители полей.
Код: Выделить всё
Insert Into Результат (obj) Values (CreatePoint(ObjectNodeX(Storona,1,2), ObjectNodeY(Storona,1,2) ))
Insert Into Результат (E) Values (Bio)
Insert Into Результат (J) Values (Videl)
Код: Выделить всё
Insert Into Результат (Obj, E, J) Values (CreatePoint(ObjectNodeX(Storona,1,2), ObjectNodeY(Storona,1,2) ), Bio, Videl )
Код: Выделить всё
Insert Into Результат (Obj, E, J, H, I, S) Values (CreatePoint(ObjectNodeX(oDirLine,1,2), ObjectNodeY(oDirLine,1,2) ), Biotop, Videl, Kvartal, Storona, 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)
И дальше идёт вычисление координат
Код: Выделить всё
Vid = Val(БД_птиц.S)
Код: Выделить всё
Vid = БД_птиц.S
Код: Выделить всё
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)
И дальше идёт вычисление координат
...
Тьфу ты, точно. Забыла совсем. Спасибо, исправила.Функция Val() преобразует строку в число.
Код: Выделить всё
Select * From Выделы Where Поле2 = Videl And Номер_квартала = Kvartal And Vid = "Глухарь" Into temptab
Vid относится к таблице БД_птиц.Select * From Выделы Where Поле2 = Videl And Номер_квартала = Kvartal And Vid = "Глухарь" Into temptab
Код: Выделить всё
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 = "Глухарь"...
В данном контексте такой ошибки быть не должно. "Глухарь" (в кавычках) - константа. Приведите пожалуйста весь код. Ну или хотя бы фрагмент от If до End IfAphina писал(а):выдаётся ошибка "Не определена переменная или поле Глухарь"
Да, это вариант. Но, по моему скромному мнению, излишне городить многотабличный запрос, когда человек с If ... Else разобраться не может.ErnieBoyd писал(а):В этом случае делают объединение таблиц:
КОД: ВЫДЕЛИТЬ ВСЁ
Select * From Table1, Table2 ...