Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
khSerg
Зарегистрирован: 16.07.2008 Сообщения: 19
|
Добавлено: Чт Окт 16, 2008 11:02 am Заголовок сообщения: Определение растрового слоя под объектом |
|
|
Сталкнулся с такой проблемой:
необходимо узнать какой растровый слой(без атрибутивной информации,просто карта) лежит под объектом (полигон).
Может я какой нибудь оператор в MapBasic не заметил :)) |
|
Вернуться к началу |
|
|
Андрей Могильный
Зарегистрирован: 21.03.2006 Сообщения: 864
|
Добавлено: Чт Окт 16, 2008 8:45 pm Заголовок сообщения: |
|
|
Не понял, в чем проблема? Выясняете слой на котором лежит селектированный объект (SelectionInfo(1)), выясняете порядковый номер этого слоя на карте. Перебираете все слои вниз от этого слоя, пока не наткнетесь на растровый.
Учтите, что растровых слоев может быть несколько на карте. |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Пн Окт 27, 2008 10:40 pm Заголовок сообщения: |
|
|
я думаю, человека интересует не факт наличия растрового слоя в окне карты, а попадание выделенного объекта в пределы растрового слоя. Это несколько разные задачи ;-). А если понимать под картой совокупность открытых таблиц, то понтяие окна для решения задачи не уместно. |
|
Вернуться к началу |
|
|
khSerg
Зарегистрирован: 16.07.2008 Сообщения: 19
|
Добавлено: Пт Дек 05, 2008 3:31 pm Заголовок сообщения: |
|
|
Да, FedorinoFF, правильно интерпретировал мою идею!Например нарисован полигон, он лежит в рамках каких-то координат, необходимо получить список растров, которые лежат под этим полигоном... |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Сб Дек 06, 2008 11:46 pm Заголовок сообщения: |
|
|
Думаю можно это сделать с некоторой точностью, написав программульку со следующим алгоритмом:
1. Программа должна считать все растры из открытой карты, и найти их tab файлы на диске.
2. Открыть эти tab файлики и считать у них точки привязки этих растров.
3. Определить у селектированного объекта (для которого нужно найти растры под ним) координаты центроида (а лучше координаты описывающего объект прямоугольника).
4. Сравнить, с некоторым допуском, попадание этих координат, по очереди, со всеми координатами привязки растров.
5. Ну и получите таким образом примерный список растров.
Менее автоматизированный, но более точный метод такой:
1. Подготавливаете векторный слой (назовем его "картой растров") в котором нарисуем столько объектов, сколько растров и каждый объект повторяет границы растров.
2. В список к каждому такому объекту приписываем имя растра
3. Теперь остается сделать только пространственный запрос из MapInfo (меню "Запрос\SQL запрос") где задаем условия поиска объектов, пересекающих заданный. И все, у вас получится выборка из объектов границ растров с именами этих растров. _________________ Жизнь прекрасна!i |
|
Вернуться к началу |
|
|
khSerg
Зарегистрирован: 16.07.2008 Сообщения: 19
|
Добавлено: Пн Дек 08, 2008 8:59 am Заголовок сообщения: |
|
|
Спасибо!
Я думаю надо будет попробывать 1 вариант, так как 2 будет очень трудозатратным :) Я думал примерно также, но предполагал, что есть какие-либо спец операторы :) |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Пн Дек 08, 2008 11:23 pm Заголовок сообщения: |
|
|
при помощи TableInfo() для растрового слоя можно легко получить границы растра и не заниматься разбором текстового содержимого tab-файла...
2Нестеров: Валерий, специально мутите? или просто не знали ;-) |
|
Вернуться к началу |
|
|
Alex_Y
Зарегистрирован: 28.11.2008 Сообщения: 122
|
Добавлено: Вт Дек 09, 2008 5:40 am Заголовок сообщения: |
|
|
2 FedorinoFF
Фишка в том, что каждый растр это отдельная таблица и для каждой нужно сделать запрос, а функция цикла реализуется только в мапбейсике. А это надо писать отдельную программу, о чем и было сказано.
Во втором варианте таблица одна, поэтому можно одним рзапросом получить нужный результат в окне SQL-запрос |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Ср Дек 10, 2008 10:22 pm Заголовок сообщения: |
|
|
Прикольно. а откуда возьмется зарнее подготовленный список (таблица) с параметрами растров? это ведь тоже надо программировать... может тогда лучше поднапрячься и сделать нормальное решение, работающее в любом окне карты по выделенному объекту, например. |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Ср Дек 10, 2008 10:37 pm Заголовок сообщения: |
|
|
FedorinoFF писал(а): |
при помощи TableInfo() для растрового слоя можно легко получить границы растра и не заниматься разбором текстового содержимого tab-файла...
2Нестеров: Валерий, специально мутите? или просто не знали ;-) |
Да нет, специально не мучУ )))
Просто у меня сидит где-то в закромах памяти, что не получится с помощью этой функции.
Вы попробуйте получить для растра границы с помощью TableInfo() и нам расскажете, за одним я для себя это уточню еще раз.
Что-то мне кажется, что вы не увидите реальных границ растра, а увидите большие непонятные цифры. _________________ Жизнь прекрасна!i |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Ср Дек 10, 2008 10:44 pm Заголовок сообщения: |
|
|
FedorinoFF писал(а): |
Прикольно. а откуда возьмется зарнее подготовленный список (таблица) с параметрами растров? это ведь тоже надо программировать... может тогда лучше поднапрячься и сделать нормальное решение, работающее в любом окне карты по выделенному объекту, например. |
Ну вы все запрограммировать хотите... Сам видел, как люди делали "карты растров", - просто рисовали прямоугольники по площади покрываемой растром, а в базу вписывали название растра и получалась такая векторная карта вся в квадратиках с подписями растров. Ее кстати даже по моему используют в некоторых отчетах... выводят на печать часть реальной карты и в углу выводят карту растров с заштрихованными квадратиками, чтобы заказчик видел из какого места выводимая карта.
По такой карте у вас гораздо точнее будет попадание! А по моему первому методу приблизительное, ведь привязка растра не всегда по краям идет, а может идти и по четырем точкам в одном углу растра... всякое бывает. _________________ Жизнь прекрасна!i |
|
Вернуться к началу |
|
|
Alex_Y
Зарегистрирован: 28.11.2008 Сообщения: 122
|
Добавлено: Чт Дек 11, 2008 5:44 am Заголовок сообщения: |
|
|
2 Нестеров Валерий
ага есть такие, границы трапеций называются, и они могут быть далеко не квадратиками :) |
|
Вернуться к началу |
|
|
FedorinoFF
Зарегистрирован: 01.02.2007 Сообщения: 272 Откуда: Санкт-Петербург
|
Добавлено: Чт Дек 11, 2008 11:27 pm Заголовок сообщения: |
|
|
TableInfo(tableName, TAB_INFO_MIN*)
TableInfo(tableName, TAB_INFO_MAX*)
реально работают...
Все зависит от конкретной задачи и требований. Не очень много продвинутых пользователй, которые будут запускать запросы в окне Mapbasic и делать пространственные выборки из заранее подготовленной кем-то таблицы с растровыми границами... Вот и приходит мысль один раз запрограммировать и много раз пользоваться.
З.Ы. Удивительно что Инструментарии до сих пор нет формирования схемы расположения листов :-) |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Пт Дек 12, 2008 11:06 pm Заголовок сообщения: |
|
|
FedorinoFF писал(а): |
TableInfo(tableName, TAB_INFO_MIN*)
TableInfo(tableName, TAB_INFO_MAX*)
реально работают...
|
Ну и лентяй же вы!
То, что операторы работают, никто не оспаривает... А я вам предлагал применить этот оператор на практике для растрового слоя и сказать нам что получилось... и всего то! _________________ Жизнь прекрасна!i |
|
Вернуться к началу |
|
|
Нестеров Валерий
Зарегистрирован: 21.03.2006 Сообщения: 492
|
Добавлено: Пт Дек 12, 2008 11:16 pm Заголовок сообщения: |
|
|
FedorinoFF писал(а): |
Все зависит от конкретной задачи и требований. Не очень много продвинутых пользователй, которые будут запускать запросы в окне Mapbasic и делать пространственные выборки из заранее подготовленной кем-то таблицы с растровыми границами... Вот и приходит мысль один раз запрограммировать и много раз пользоваться.
|
Разве я писал для продвинутых пользователей? И разве я упоминал запускать запросы из окна MapBasic?
вот мои слова:
----------
3. Теперь остается сделать только пространственный запрос из MapInfo (меню "Запрос\SQL запрос") где задаем условия поиска объектов, пересекающих заданный. И все, у вас получится выборка из объектов границ растров с именами этих растров.
----------
Этот построитель запросов сделан для обычных пользователей, в нем можно один раз написать запрос и сохранить, чтоб не писать заново каждый раз.
--------------------------------
FedorinoFF писал(а): |
З.Ы. Удивительно что Инструментарии до сих пор нет формирования схемы расположения листов :-)
|
В инструментарии есть построение сетки координат, можете задать с помощью нее сетку. Если растры одного формата, то можно задать параметры построения сетки, начальную координату и шаг, останется потом только обвести по сетке прямоугольнички и вписать в списки соответствующие имена растров. _________________ Жизнь прекрасна!i
Последний раз редактировалось: Нестеров Валерий (Пт Дек 12, 2008 11:43 pm), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
|