www.map-info.ru :: Просмотр темы - Выбор точек случайным образом внутри области
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  
На страницу 1, 2, 3  След.
 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Вс Фев 14, 2010 5:52 pm    Заголовок сообщения: Выбор точек случайным образом внутри области Добавить ответ со ссылкой на данный текст

Доброго времени суток!

Пишу код на MapBasic, на карте выбираю точку, мне возвращаются ее координаты и объекты с остальных слоев (если есть). Далее сохраняю их в таблице (для слоев использую значения 0 отсутствия и 1 наличия объектов в данной точке).
Далее хочу выбрать на карте город, вокруг него создать зону, скажем в 5 км, и случайным образом выбирать точки, проделывая описанные выше действия. Можно ли сделать такое в MapBasic?

Думал определить зону с помощью переменной типа Object, но не знаю как это сделать. В справочнике нашел функцию Rnd(), но не знаю как ее применить к этой задаче.

Буду рад помощи
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пн Фев 15, 2010 10:26 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Вы нашли генератор случайных чисел. Зачем он в Вашем случае? Нужно создать зону вокруг города как буфер? Посмотрите на функцию Create Object As Buffer
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Пн Фев 15, 2010 11:04 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

создать буфер не проблема. как дальше с ним работать (выбирать случайным образом точки с далнейшим сохранением в таблице)? Это конечно можно делать руками, но если мне нужно тысячу значений Smile ? Как-то тыкать мышкой внутри буфера не практично...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пн Фев 15, 2010 11:34 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

а Smile ну тогда вариант - выбрать все точки внутри буфера через Select, а потом выбрать произвольную строку из N имеющихся строк в выборке, это уже с помощью Rnd
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Пн Фев 15, 2010 9:20 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

нашел другое решение: выбираем две точки выше и ниже нужного объекта (по диагонали), задаем в программе их координаты и с помощью функции rnd() и цикла заполняем табличку Smile

но возникла другая проблемка.

' Обработка результатов поиска.
For i = 1 to i_found
' Определяем имя таблицы, содержащей найденный объект.
s_table = SearchInfo(i, SEARCH_INFO_TABLE)

If s_table = "Автодороги" then
rd=1
Else rd=0
End If

Insert into Dora
Values (x,y,rd)

При сохранении в таблице вместо одной строчки сохраняются две одинаковые, если переменная rd=0 и три строчки при rd=1, причем одна с параметром 1 (наличие автодороги в данной точке) и две строчки с параметром 0.
Sad
Посоветуйте что-нибудь
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Вт Фев 16, 2010 10:55 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

так вы же в цикле заполняете таблицу DORA. вот и вставляются i_found строк
ps про выбор случайных точек - я решила, что случайным образом выбираются точки из существующих точечных объектов, а оказывается нужно произвольно ткнуть в область )
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Пт Фев 26, 2010 12:30 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

спасибо, разобрался.

Проблема решилась так: создал массив, заполненный нулями, проводил поиск и найденным объектам присваивал значение 1 с последуещей записью в нулевой масссив. Потом записывал в таблицу.

Кто нибудь подскажет как очищать таблицу при открытии?

Open Table "C:\Coord"
delete from coord

в таком варианте удаляются строки, но пустые ячейки остаются, а нужная информация записывается после них
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пт Фев 26, 2010 1:02 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Pack Table <table>
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Пн Мар 08, 2010 8:06 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

подскажите, в таком варианте расстояние записывается в отдельную таблицу:
Fetch First From Coord
Do While Not EOT(Coord)
start_x = Coord.Xcoord
start_y = Coord.Ycoord
dist = Distance (start_x, start_y, end_x, end_y,"km")
Insert into CoordT3 (Distance) Values (dist)
Fetch Next From Coord
Loop

Если сделать так (записывать в таблицу, откуда беру значения), получается какой-то бесконечный цикл, совершенно другие значения записываются ниже существующих:

Alter Table Coord (Add Distance Integer)
Commit Table Coord

Fetch First From Coord
Do While Not EOT(Coord)
start_x = Coord.Xcoord
start_y = Coord.Ycoord
dist = Distance (start_x, start_y, end_x, end_y,"km")
Insert into Coord (Distance) Values (dist)
Fetch Next From Coord
Loop

Commit Table Coord
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Вт Мар 09, 2010 10:26 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Ой, так зачем вы вставляете НОВЫЕ строки в таблицу, если вам нужно ОБНОВИТЬ строку - значение для указанной колонки в текущей строке?
Пользуйте UPDATE вместо INSERT. Не забудьте указать в команде номер обновляемой строки.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Gazi



Зарегистрирован: 14.02.2010
Сообщения: 30

СообщениеДобавлено: Вт Мар 09, 2010 11:40 am    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

У меня в первом случае формируется массив расстояний в отдельной таблице. Его я хотел записать в исходную таблицу.
Если я правильно понял, нужно изменить строчку вот так:
Update Coord Set Distance = dist

в таком варианте добавляется столбик, но туда записывается n-е количество раз одно и тоже значение Sad
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Вт Мар 09, 2010 12:15 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Не забудьте указать в команде номер обновляемой строки
команда в справке расписана:
Update Coord Set Distance = dist Where RowID = idnum
где idnum - вычисленный в цикле Do While номер текущей строки (idnum = Coord.RowId)
В описании Update упомянут этот момент, когда номер строки не прописан, обновляются все строки таблицы, читайте внимательнее, прежде чем применять.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
14Division



Зарегистрирован: 26.11.2009
Сообщения: 3

СообщениеДобавлено: Пт Мар 12, 2010 12:58 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

подскажите как из одной таблицы Table2 отдельные столбцы с данными Column1 иColumn2 перенести в другую таблицу Table1 - Column3,4?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
reasonat



Зарегистрирован: 01.07.2009
Сообщения: 224
Откуда: Екатеринбург

СообщениеДобавлено: Пт Мар 12, 2010 3:06 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Почитайте в справочнике про Add Column. Должна подойти.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
14Division



Зарегистрирован: 26.11.2009
Сообщения: 3

СообщениеДобавлено: Пт Мар 12, 2010 5:24 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

функция по описанию подходит и на форуме эта тема поднималась http://www.map-info.ru/phpbb2/viewtopic.php?t=1035&highlight=add+column

но не могли бы вы объяснить:

Set To expression
[ Where { dest_column = source_column | Within | Contains | Intersects } ]
[ Dynamic ] }

expression и dest_column = source_column, что тут надо вставить?

Из таблицы City столбец S1 вставить в таблицу City1, как это правильно задать?
Add Column City1 (SK Integer)
From City
Set to City1 (?)
Where ... (?)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru