SQL-запрос. Найти полигоны через которые проходит полилиния
- 
				Browning Zed
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
SQL-запрос. Найти полигоны через которые проходит полилиния
Доброго всем! Ситуация: существует карта поделенная полигонами на несколько сотен кварталов. На карте полилиниями оцифрована дорожная сеть. Требуется определить через какие кварталы проходит каждая из дорог, и как к этому подойти с наименьшими затратами. То есть либо по каждой дороге можно создать путем запроса просто выборку кварталов, либо возможно существует какой-то более продвинутый способ (или утилита), которая прописывала бы в определенное поле таблицы дорог, номера кварталов, взятые также из соответствующих полей через определенный разделитель (запятую, пробел).
			
			
									
						
										
						- 
				Sibit
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: SQL-запрос. Найти полигоны через которые проходит полили
Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку. У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
			
			
									
						
										
						- 
				Browning Zed
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Как будет выглядеть подобный запрос?Sibit писал(а):Нужно для каждой дороги делать отдельный запрос. Потом обновлять колонку.
Скрипт на MapBasic имеется ввиду? Я от него весьма далек. Хотя бы для начала с SQL разобраться.Sibit писал(а):У вас отношение многие ко многим, так что одним обновлением не получится. Можно написать простой скрипт, который это сделает автоматически.
- 
				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 разобраться.
- 
				Browning Zed
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Спасибо за отзыв. Но пока до конца не понимаю как выполнить данный запрос. Из исходных данных:
Таблица с кварталами - Кварталы
Таблица с дорогами - Дороги
Поле содержащее номер квартала в таблице Кварталы - КН

При вводе информации указанной в скриншоте, получаю сообщение: Не определена переменная или поле Select.
			
			
									
						
										
						Таблица с кварталами - Кварталы
Таблица с дорогами - Дороги
Поле содержащее номер квартала в таблице Кварталы - КН

При вводе информации указанной в скриншоте, получаю сообщение: Не определена переменная или поле Select.
- 
				gamm
- Гуру
- Сообщения: 4177
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1107
- Ваше звание: программист
- Откуда: Казань
Re: SQL-запрос. Найти полигоны через которые проходит полили
Опять студент домашнее задание сам делать не хочет ... hint: group by
[ Сообщение с мобильного устройства ]
			
			
									
						
										
						[ Сообщение с мобильного устройства ]
- 
				Browning Zed
- Новоприбывший
- Сообщения: 4
- Зарегистрирован: 16 мар 2015, 13:14
- Репутация: 0
Re: SQL-запрос. Найти полигоны через которые проходит полили
Да далеко не студент уже. Просто по специализации не являюсь программером, сам - кадастровик, и вот сложившаяся ситуация требует расставить точки над i. И если технологии XML, мне еще как-то понятны (XPath, XQuery), то SQL для меня лес темный. А Вы помимо сарказма, что-то дельное можете предложить?gamm писал(а):Опять студент домашнее задание сам делать не хочет ... hint: group by
- 
				Sibit
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: SQL-запрос. Найти полигоны через которые проходит полили
А вы ознакомтесь с документацией, она небольшая и на русском. Вопросов станет гораздо меньше.
ЗЫ На картинке, что вы привели, форма для конструирования запросов. Соответственно, в поле условие нужно вводить то что в запросе идет после слова where. Можете открыть консоль MapBasic (кнопка с гаечным ключом) и посмотреть, как данная форма преобразует введенные данные в запрос.
			
			
									
						
										
						ЗЫ На картинке, что вы привели, форма для конструирования запросов. Соответственно, в поле условие нужно вводить то что в запросе идет после слова where. Можете открыть консоль MapBasic (кнопка с гаечным ключом) и посмотреть, как данная форма преобразует введенные данные в запрос.
- 
				thegeo
- Активный участник
- Сообщения: 161
- Зарегистрирован: 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 КБ) 9520 просмотров
 
- 
				LightMen
- Интересующийся
- Сообщения: 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Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей