Страница 1 из 1
SQL-запрос. Найти полигоны через которые проходит полилиния
Добавлено: 16 мар 2015, 13:32
Browning Zed
Доброго всем! Ситуация: существует карта поделенная полигонами на несколько сотен кварталов. На карте полилиниями оцифрована дорожная сеть. Требуется определить через какие кварталы проходит каждая из дорог, и как к этому подойти с наименьшими затратами. То есть либо по каждой дороге можно создать путем запроса просто выборку кварталов, либо возможно существует какой-то более продвинутый способ (или утилита), которая прописывала бы в определенное поле таблицы дорог, номера кварталов, взятые также из соответствующих полей через определенный разделитель (запятую, пробел).
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 09:04
Sibit
Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку. У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 13:16
Browning Zed
Sibit писал(а):Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку.
Как будет выглядеть подобный запрос?
Sibit писал(а):У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
Скрипт на MapBasic имеется ввиду? Я от него весьма далек. Хотя бы для начала с SQL разобраться.
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 13:37
Sibit
Browning Zed писал(а):
Как будет выглядеть подобный запрос?
Примерно так:
Код: Выделить всё
Select * from Таблица_с_кварталами where Obj contains part any(Select Obj from Таблица_с_дорогой ) into Selection
Где Таблица_с_дорогой - выборка с одной дорогой.
Browning Zed писал(а):Скрипт на MapBasic имеется ввиду? Я от него весьма далек. Хотя бы для начала с SQL разобраться.
Есть хорошая новость, от SQL там только название. Она же и плохая - любую более-менее сложную выборку делать только через скрипт(да еще и с сохранением временных таблиц на диск)
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 15:44
Browning Zed
Спасибо за отзыв. Но пока до конца не понимаю как выполнить данный запрос. Из исходных данных:
Таблица с кварталами -
Кварталы
Таблица с дорогами -
Дороги
Поле содержащее номер квартала в таблице
Кварталы -
КН

При вводе информации указанной в скриншоте, получаю сообщение:
Не определена переменная или поле Select.
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 16:00
gamm
Опять студент домашнее задание сам делать не хочет ... hint: group by
[ Сообщение с мобильного устройства ]
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 17 мар 2015, 16:23
Browning Zed
gamm писал(а):Опять студент домашнее задание сам делать не хочет ... hint: group by
Да далеко не студент уже. Просто по специализации не являюсь программером, сам - кадастровик, и вот сложившаяся ситуация требует расставить точки над i. И если технологии XML, мне еще как-то понятны (XPath, XQuery), то SQL для меня лес темный. А Вы помимо сарказма, что-то дельное можете предложить?
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 18 мар 2015, 07:39
Sibit
А вы ознакомтесь с документацией, она небольшая и на русском. Вопросов станет гораздо меньше.
ЗЫ На картинке, что вы привели, форма для конструирования запросов. Соответственно, в поле условие нужно вводить то что в запросе идет после слова where. Можете открыть консоль MapBasic (кнопка с гаечным ключом) и посмотреть, как данная форма преобразует введенные данные в запрос.
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 18 мар 2015, 22:06
thegeo
Результат можно получить с помощью запроса (см. картинку) или ввести в окно MapBasic соответствующий код:
Select * from Дороги, Кварталы where Дороги.obj Intersects Кварталы.obj into Selection
Browse * From Selection
Возможно, это не совсем то, что вы хотели бы, но получить для каждой дороги список кварталов в виде строки так просто не получится. Потребуется написать, м.б. и не сложный, но все же код.
Re: SQL-запрос. Найти полигоны через которые проходит полили
Добавлено: 21 апр 2015, 11:54
LightMen
Код: Выделить всё
include "mapbasic.def"
Dim TableNameLine as String 'имя таблицы с полилиниями
Dim TableNamePoly as String 'имя таблицы с полигонами
Dim AliasIntersection as Alias 'поле для записи пересекающихся полигонов с линией в таблице TableNameLine
Declare sub main()
sub main()
TableNameLine ="Line"
TableNamePoly= "Poly"
AliasIntersection="IntersectsPoly"
update TableNameLine set AliasIntersection=""
Dim i,j as integer
For i=1 to TableInfo(TableNameLine,TAB_INFO_NROWS)
select * from TableNamePoly where obj intersects (select obj from TableNameLine where rowid=i) 'objectA Intersects objectB если объекты имеют хотя бы одну общую точку.
if selectioninfo(3)<>0 then
Dim tempStr as string
tempStr=""
do while not eot(selection)
tempStr=tempStr+selection.id+","
fetch next from selection
loop
update TableNameLine set AliasIntersection=left$(tempstr,len(tempstr)-1) where rowid=i
End if
Next
end sub
Спрашивайте, если по коду что-то непонятно.