Программно в MapBasic совместить 2 слоя

Не знаете, где задать вопрос? Задавайте здесь.
Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 12:12

Приветствую уважаемое сообщество ! Очень прошу подсказать как можно решить такую ситуацию.задача : посчитать площадь всех территориальных зон по районам. Что есть : есть слой с границами и названием районов и есть слой непосредственно с зонами и площадью каждой зоны. Не прибегая к программированию, конечно есть возможность вырезать район из одного слоя поместить на второй, затем удалить внешнюю часть и получить выборку всех зон с площадью по району и собственно говоря спокойно запросом посчитать площадь.
Но хотелось бы это автоматизировать. Часть задачи понятно, как посчитать площадь по зонам. Но вот как программно совместить выбранный район на полной карте территориальных зон - я не понимаю.
Прошу строго не судить, я еще только учусь. Привожу листинг кода в MapBasic то что получилось

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 12:15

Код: Выделить всё

Sub  proc1
Dim Tabrow as Integer
Dim NameOkrug as string	

'таблица общая по зонам
Open Table  "\work\1\TabTest_all" As TabTest 
'таблица с районами 
Open Table  "\work\1\D_adm_copy" As D_adm_copy
Select * From D_adm_copy Into TestOkrug

'цикл по административным районам
Tabrow=1
Fetch First From TestOkrug
Do while NOT EOT(TestOkrug)
	NameOkrug= TestOkrug.Name
	'вот здесь выбрали во временную таблицу текущий район
	select * from D_adm_copy where Name = NameOkrug into SelectOkrug	
	'а вот тут их надо как то совместить что бы получить зоны + район в одной таблице 
	
	'Select * from TabTest	
	'Set Target On
	'вот тут обрезаем лишнее по контуру
	'Objects Intersect Into Target Data OBJECT_ID=OBJECT_ID,CLASS_ID=CLASS_ID,STAT_OBJ_URB=STAT_OBJ_URB,TYPE_ZONE_TOWN=TYPE_ZONE_TOWN,VID=VID,PODVID=PODVID
	
	'вот тут считаем площадь по виду зон 
	'Select VID,Sum(Area(Obj,"sq mi")) From TestTable1  Group BY VID  into tabl2  
	'после наверное надо помещать в результирующую таблицу
	
	Tabrow=Tabrow+1
	Fetch Next From TestOkrug	
Loop  

'вывод результиирующей таблицы

End Sub

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 12:23

Задачку можно решиь без MapBasic - одним SQL-запросом

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 12:31

спасибо большое,буду разбираться в этом направлении. Но в том же SQL запросе не совсем понятно как совместить 2 слоя: один с выбранным районом из одной таблицы и зоны из другой таблицы.Наверное я в принципе до конца не понимаю еще механизм наложения или возможно это называется совмещения слоев.

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 12:35

а не надо выбирать - нужно полное пересечение районов к зонам

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 12:39

да, согласна. то есть с начало надо сшить таблицы или же объединить эти две таблицы ( с районами и зонами ) ?

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 12:44

Делаем CROSS JOIN, выкидываем пустую геометрию после Intersection

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 12:44

выложи пример данных и я напишу тебе запрос

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 12:51

ой.... :roll: даже как то неудобно, но очень сильно Вам благодарна. Сейчас подготовлю и выложу.

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 14:18

мне пока что не удается выложить, так как у нас по всей видимости все закрыто политиками... :( может быть на почту Вам смогу отправить ?

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 29 май 2018, 14:22

Отправила в ЛС

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Программно в MapBasic совместить 2 слоя

Сообщение rhot » 29 май 2018, 14:43

trir, ждём-с решения...
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 14:48

Код: Выделить всё

SELECT r.[FeatId] , r.[Geom].STIntersection(z.[Geom]) as gi, 
 r.[Geom].STIntersection(z.[Geom]).STArea() as ar, z.[FeatId], z.[OBJECT_ID], z.[PODVID]
FROM [test2].[Schema1].[Region] as r, [test2].[Schema1].[Zone] as z 

trir
Гуру
Сообщения: 5292
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1015
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: Программно в MapBasic совместить 2 слоя

Сообщение trir » 29 май 2018, 14:56

можно добавить

Код: Выделить всё

where r.[Geom].STIntersection(z.[Geom]).STArea() > 0
чтобы исключить пустые пересечения

Аватара пользователя
Aplymaz
Интересующийся
Сообщения: 19
Зарегистрирован: 03 апр 2018, 15:18
Репутация: 0
Ваше звание: очень начинающая
Откуда: Санкт-Петербург
Контактная информация:

Re: Программно в MapBasic совместить 2 слоя

Сообщение Aplymaz » 30 май 2018, 09:14

trir, спасибо большое, просто огромнейшее ! Единственное что не очень поняла - у меня получается в слоях в [test1].[Schema1].[Region] а вот зона да действительно в [test2].[Schema1].[Zone], то есть в [test1]. зоны нет . Зона и регион (район) разнесены по разным слоям ( таблицам ) . И можно еще глупый вопрос - если у меня слои не загружены в SQL я же так же могу их обрабатывать SQL запросом ?

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей