SQL-запрос. Найти полигоны через которые проходит полилиния
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
SQL-запрос. Найти полигоны через которые проходит полилиния
Доброго всем! Ситуация: существует карта поделенная полигонами на несколько сотен кварталов. На карте полилиниями оцифрована дорожная сеть. Требуется определить через какие кварталы проходит каждая из дорог, и как к этому подойти с наименьшими затратами. То есть либо по каждой дороге можно создать путем запроса просто выборку кварталов, либо возможно существует какой-то более продвинутый способ (или утилита), которая прописывала бы в определенное поле таблицы дорог, номера кварталов, взятые также из соответствующих полей через определенный разделитель (запятую, пробел).
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: SQL-запрос. Найти полигоны через которые проходит полили
Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку. У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Как будет выглядеть подобный запрос?Sibit писал(а):Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку.
Скрипт на MapBasic имеется ввиду? Я от него весьма далек. Хотя бы для начала с SQL разобраться.Sibit писал(а):У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: SQL-запрос. Найти полигоны через которые проходит полили
Примерно так:Browning Zed писал(а): Как будет выглядеть подобный запрос?
Код: Выделить всё
Select * from Таблица_с_кварталами where Obj contains part any(Select Obj from Таблица_с_дорогой ) into Selection
Есть хорошая новость, от SQL там только название. Она же и плохая - любую более-менее сложную выборку делать только через скрипт(да еще и с сохранением временных таблиц на диск)Browning Zed писал(а):Скрипт на MapBasic имеется ввиду? Я от него весьма далек. Хотя бы для начала с SQL разобраться.
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Спасибо за отзыв. Но пока до конца не понимаю как выполнить данный запрос. Из исходных данных:
Таблица с кварталами - Кварталы
Таблица с дорогами - Дороги
Поле содержащее номер квартала в таблице Кварталы - КН
При вводе информации указанной в скриншоте, получаю сообщение: Не определена переменная или поле Select.
Таблица с кварталами - Кварталы
Таблица с дорогами - Дороги
Поле содержащее номер квартала в таблице Кварталы - КН
При вводе информации указанной в скриншоте, получаю сообщение: Не определена переменная или поле Select.
-
- Гуру
- Сообщения: 4047
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1050
- Ваше звание: программист
- Откуда: Казань
Re: SQL-запрос. Найти полигоны через которые проходит полили
Опять студент домашнее задание сам делать не хочет ... hint: group by
[ Сообщение с мобильного устройства ]
[ Сообщение с мобильного устройства ]
-
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Да далеко не студент уже. Просто по специализации не являюсь программером, сам - кадастровик, и вот сложившаяся ситуация требует расставить точки над i. И если технологии XML, мне еще как-то понятны (XPath, XQuery), то SQL для меня лес темный. А Вы помимо сарказма, что-то дельное можете предложить?gamm писал(а):Опять студент домашнее задание сам делать не хочет ... hint: group by
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: SQL-запрос. Найти полигоны через которые проходит полили
А вы ознакомтесь с документацией, она небольшая и на русском. Вопросов станет гораздо меньше.
ЗЫ На картинке, что вы привели, форма для конструирования запросов. Соответственно, в поле условие нужно вводить то что в запросе идет после слова where. Можете открыть консоль MapBasic (кнопка с гаечным ключом) и посмотреть, как данная форма преобразует введенные данные в запрос.
ЗЫ На картинке, что вы привели, форма для конструирования запросов. Соответственно, в поле условие нужно вводить то что в запросе идет после слова where. Можете открыть консоль MapBasic (кнопка с гаечным ключом) и посмотреть, как данная форма преобразует введенные данные в запрос.
-
- Активный участник
- Сообщения: 160
- Зарегистрирован: 17 янв 2012, 18:51
- Репутация: 74
Re: SQL-запрос. Найти полигоны через которые проходит полили
Результат можно получить с помощью запроса (см. картинку) или ввести в окно MapBasic соответствующий код:
Select * from Дороги, Кварталы where Дороги.obj Intersects Кварталы.obj into Selection
Browse * From Selection
Возможно, это не совсем то, что вы хотели бы, но получить для каждой дороги список кварталов в виде строки так просто не получится. Потребуется написать, м.б. и не сложный, но все же код.
Select * from Дороги, Кварталы where Дороги.obj Intersects Кварталы.obj into Selection
Browse * From Selection
Возможно, это не совсем то, что вы хотели бы, но получить для каждой дороги список кварталов в виде строки так просто не получится. Потребуется написать, м.б. и не сложный, но все же код.
- Вложения
-
- miHG162.png (49 КБ) 8798 просмотров
-
- Интересующийся
- Сообщения: 32
- Зарегистрирован: 09 окт 2014, 10:59
- Репутация: 5
Re: SQL-запрос. Найти полигоны через которые проходит полили
Спойлер
Спойлер
Код: Выделить всё
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
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя