Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Чт Дек 17, 2009 6:21 am Заголовок сообщения: Как выполнить пересечение/вхождение объектов? |
|
|
Здравствуйте =)
У меня два векторных слоя:
Слой1 - множество мелких объектов
Слой2 - множество крупных объектов
Как получить список объектов из "Слой1" пересекающиеся/входящие в выбранный объект из "Слой2"?
Подскажите пожалуйсто кнопку или способ реализации, может SQL? |
|
Вернуться к началу |
|
|
Alex_Y
Зарегистрирован: 28.11.2008 Сообщения: 122
|
Добавлено: Чт Дек 17, 2009 7:03 am Заголовок сообщения: |
|
|
Select * From Слой1, Слой2 Where Слой1.obj Intersects Слой2.obj |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Чт Дек 17, 2009 11:06 am Заголовок сообщения: |
|
|
для выбранного объекта из Слоя2, скорее:
Select * From Слой1, Selection Where Слой1.obj Intersects Selection .obj |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Чт Дек 17, 2009 11:19 am Заголовок сообщения: |
|
|
Благодарю за оперативный ответ. Помогло победить! |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Пт Дек 18, 2009 12:34 pm Заголовок сообщения: |
|
|
Подскажите пожалуйсто как определить selection.obj
Выполняю SQL - запрос вида "Select * From Слой1, Selection Where Слой1.obj Intersects Selection .obj"
Появляется ошибка "Не определена переменная или поле selection.obj" |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Пт Дек 18, 2009 12:44 pm Заголовок сообщения: |
|
|
а объект-то выбран какой-то? |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Пт Дек 18, 2009 12:47 pm Заголовок сообщения: |
|
|
reasonat писал(а): |
а объект-то выбран какой-то? |
Да, выбран =) |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Пт Дек 18, 2009 1:19 pm Заголовок сообщения: |
|
|
тогда так
Dim sel As Alias
Dim o_sel As Object
sel = Selection.obj
o_sel = sel
Select * From Слой1 Where obj Intersects o_sel |
|
Вернуться к началу |
|
|
agentbond007
Зарегистрирован: 08.12.2009 Сообщения: 56
|
Добавлено: Пт Дек 18, 2009 4:18 pm Заголовок сообщения: |
|
|
reasonat писал(а): |
тогда так
Dim sel As Alias
Dim o_sel As Object
sel = Selection.obj
o_sel = sel
Select * From Слой1 Where obj Intersects o_sel |
Большое спасибо, заработало! |
|
Вернуться к началу |
|
|
Emetic
Зарегистрирован: 02.02.2010 Сообщения: 4
|
Добавлено: Вт Фев 02, 2010 10:55 am Заголовок сообщения: |
|
|
Здраствуйте, встретился с аналогичной проблемой. Не подскажите как отсортировать объекты из слоя1 которые выходять за границы объектов слоя2 и переименовать их часть. |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Вт Фев 02, 2010 11:10 am Заголовок сообщения: |
|
|
Что такое "выходят за границы"? Пересекаются с объектами из другого слоя, но не лежат целиком внутри? Или просто не лежат внутри объектов из другого слоя? Может объясните на реальном примере, что требуется?
И что значит переименовать? Изменить содержимое какого-то поля в таблице для выбранных объектов? Подписи поменять? Или перенести в новый слой? |
|
Вернуться к началу |
|
|
Emetic
Зарегистрирован: 02.02.2010 Сообщения: 4
|
Добавлено: Вт Фев 02, 2010 11:22 am Заголовок сообщения: |
|
|
Пример:
слой 1 - карта земельных участок некоторый из них находится одновременно в нескольких кварталах, поле КН содержит только номер участка (:ХХХ).
слой 2 - карта кадастровых кварталов поле КН содержит кадастровый номер (ХХ:ХХ:ХХХХХХ)
Задача:
Надо поле Слой1.КН приобразовать в ХХ:ХХ:ХХХХХХ:ХХХ тоесть полный кадастровый номер.
Загвоздка:
Некоторые земельные участки находящиеся в нескольких кварталах надо привести к виду ХХ:ХХ:000000:ХХХ.
Как поле Слой1.КН привести в данный вид? |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Вт Фев 02, 2010 1:17 pm Заголовок сообщения: |
|
|
тут либо программировать..
либо в несколько этапов:
1. сохраняем копию участков - Слой1раб
2.добавляем номер квартала в номер участка - "Таблица/Обновить колонку" - указать, что обновляем какое-нибудь текстовое поле Слой1раб, берем значение КН из таблицы кварталов, связываем таблицы по графике (объекты из Слой1раб вложены в объекты из слоя кварталов)
3. выбираем все участки, затем - "Объекты/Выбрать изменяемый объект"
4. выбираем все кварталы и режем - "Объекты/Разрезать"
5. получаем слой участков, в котором участки, попавшие на 2 и более квартала порезаны на 2 и более частей, причем в этих случаях у частей совпадают значения полей с КН квартала и КН участка
6. "Запрос/SQL-запрос", указываем Слой1раб, группируем его по полям "КН квартала" и "КН участка" и добавляем поле Count(*) из обобщений - получаем таблицу, в которой посчитано количество встречающихся комбинаций КН квартала с КН участка. Эту сгруппированую таблицу лучше сохранить как копию в отдельную таблицу.
7. Теперь можно выбрать те строки, в которых Count(*) > 1 и обновить колонку КН квартала, заменив часть строки нулями. Собираем строку полного КН из двух полей, номер квартала + номер участка
8. Обновляем таблицу СЛОЙ1, берем значения из КН участка таблицы Слой1раб, связываем по графике. |
|
Вернуться к началу |
|
|
Emetic
Зарегистрирован: 02.02.2010 Сообщения: 4
|
Добавлено: Ср Фев 03, 2010 5:21 am Заголовок сообщения: |
|
|
Большое спасибо за ответ, но я застрял на пункте 6, не могу понять как добавить поле Count(*). Не могли бы вы объяснить поподробнее начиная с пункта 6. |
|
Вернуться к началу |
|
|
reasonat
Зарегистрирован: 01.07.2009 Сообщения: 224 Откуда: Екатеринбург
|
Добавлено: Ср Фев 03, 2010 10:53 am Заголовок сообщения: |
|
|
в окне SQL-запроса в поле "из таблиц" указываем таблицу Слой1раб
в поле "группировать по колонкам" - поле с КН квартала и с КН участка
(еще лучше сначала объединить строки в одну, чтобы в поле КН участка был полный номер)
в поле "выбрать колонки" указываем поля с КН (или одно поле с полным КН), и через запятую, Count(*)
чтобы не писать все это вручную, можно выбирать готовые названия таблиц, полей, обобщений и функций в выпадающих списках справа. |
|
Вернуться к началу |
|
|
|