Программно в MapBasic совместить 2 слоя
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Программно в MapBasic совместить 2 слоя
Приветствую уважаемое сообщество ! Очень прошу подсказать как можно решить такую ситуацию.задача : посчитать площадь всех территориальных зон по районам. Что есть : есть слой с границами и названием районов и есть слой непосредственно с зонами и площадью каждой зоны. Не прибегая к программированию, конечно есть возможность вырезать район из одного слоя поместить на второй, затем удалить внешнюю часть и получить выборку всех зон с площадью по району и собственно говоря спокойно запросом посчитать площадь.
Но хотелось бы это автоматизировать. Часть задачи понятно, как посчитать площадь по зонам. Но вот как программно совместить выбранный район на полной карте территориальных зон - я не понимаю.
Прошу строго не судить, я еще только учусь. Привожу листинг кода в MapBasic то что получилось
Но хотелось бы это автоматизировать. Часть задачи понятно, как посчитать площадь по зонам. Но вот как программно совместить выбранный район на полной карте территориальных зон - я не понимаю.
Прошу строго не судить, я еще только учусь. Привожу листинг кода в MapBasic то что получилось
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
Код: Выделить всё
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
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
Задачку можно решиь без MapBasic - одним SQL-запросом
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
спасибо большое,буду разбираться в этом направлении. Но в том же SQL запросе не совсем понятно как совместить 2 слоя: один с выбранным районом из одной таблицы и зоны из другой таблицы.Наверное я в принципе до конца не понимаю еще механизм наложения или возможно это называется совмещения слоев.
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
а не надо выбирать - нужно полное пересечение районов к зонам
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
да, согласна. то есть с начало надо сшить таблицы или же объединить эти две таблицы ( с районами и зонами ) ?
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
Делаем CROSS JOIN, выкидываем пустую геометрию после Intersection
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
выложи пример данных и я напишу тебе запрос
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
ой.... даже как то неудобно, но очень сильно Вам благодарна. Сейчас подготовлю и выложу.
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
мне пока что не удается выложить, так как у нас по всей видимости все закрыто политиками... может быть на почту Вам смогу отправить ?
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
Отправила в ЛС
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Программно в MapBasic совместить 2 слоя
trir, ждём-с решения...
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
Код: Выделить всё
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
-
- Гуру
- Сообщения: 5286
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Программно в MapBasic совместить 2 слоя
можно добавить
чтобы исключить пустые пересечения
Код: Выделить всё
where r.[Geom].STIntersection(z.[Geom]).STArea() > 0
- Aplymaz
- Интересующийся
- Сообщения: 19
- Зарегистрирован: 03 апр 2018, 15:18
- Репутация: 0
- Ваше звание: очень начинающая
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Программно в MapBasic совместить 2 слоя
trir, спасибо большое, просто огромнейшее ! Единственное что не очень поняла - у меня получается в слоях в [test1].[Schema1].[Region] а вот зона да действительно в [test2].[Schema1].[Zone], то есть в [test1]. зоны нет . Зона и регион (район) разнесены по разным слоям ( таблицам ) . И можно еще глупый вопрос - если у меня слои не загружены в SQL я же так же могу их обрабатывать SQL запросом ?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей