Страница 1 из 2

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

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

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

Добавлено: 29 май 2018, 12:15
Aplymaz

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

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

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

Добавлено: 29 май 2018, 12:23
trir
Задачку можно решиь без MapBasic - одним SQL-запросом

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

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

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

Добавлено: 29 май 2018, 12:35
trir
а не надо выбирать - нужно полное пересечение районов к зонам

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

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

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

Добавлено: 29 май 2018, 12:44
trir
Делаем CROSS JOIN, выкидываем пустую геометрию после Intersection

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

Добавлено: 29 май 2018, 12:44
trir
выложи пример данных и я напишу тебе запрос

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

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

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

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

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

Добавлено: 29 май 2018, 14:22
Aplymaz
Отправила в ЛС

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

Добавлено: 29 май 2018, 14:43
rhot
trir, ждём-с решения...

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

Добавлено: 29 май 2018, 14:48
trir

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

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 

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

Добавлено: 29 май 2018, 14:56
trir
можно добавить

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

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

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

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