Запрос в Mapinfo
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
Запрос в Mapinfo
Подскажите, пожалуйста, возможно ли сделать такой запрос в Mapinfo. Имеются 2 таблицы. В 1 есть столбец Подвид и в нем перечень зон генерального плана. Во 2 таблице есть столбец Название и в нем перечень лесничеств. Возможно ли посчитать какую площадь занимает каждое из лесничеств в каждой зоне генерального плана. Спасибо!
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Запрос в Mapinfo
Скорей всего можно. Но ваша структура таблиц не очень понятна. Приведите полную структуру таблиц.
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
Re: Запрос в Mapinfo
Sibit могу выслать Вам по почте.
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: Запрос в Mapinfo
позволю себе встрять:
также можете воспользоваться вкладкой "вложения" в стандартной форме ответа. Задача типична, например, простое решение для QGis
поэтому стандарт её решения интересен любому для экономии времени.
PS: если конечно не "секретно!"
также можете воспользоваться вкладкой "вложения" в стандартной форме ответа. Задача типична, например, простое решение для QGis
поэтому стандарт её решения интересен любому для экономии времени.
PS: если конечно не "секретно!"
"Если карта не соответствует местности, доверяй местности."
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: Запрос в Mapinfo
попробовал разрезать зоны слоем лесничеств, затем SQL-запрос вида
добавил колонку Площадь к таблице зон (01), посчитал в га, сводную по результатам SQL выбросил в текст, импортировал в Calc (exel), сделал сводную таблицу. Результат во вложении. Если принципиально нравится, можно продолжить: попробовать улучшить чистоту результата.
Код: Выделить всё
_01.obj Within _02.obj
- Вложения
-
- 2222222.xls
- (43 КБ) 607 скачиваний
"Если карта не соответствует местности, доверяй местности."
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
Re: Запрос в Mapinfo
Петр, а как разрезать зоны слоем лесничеств?
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: Запрос в Mapinfo
сделать слой изменяемым, выбрать его, далее меню Объекты>выбрать изменяемый..., затем выбрать слой лесничеств, далее Объекты>разрезать...
правда результат подобной операции не совсем подойдет для описанного выше запроса: будет много брака. в этот раз специально не проверял: как-никак ваши данные, но, как говорится, по опыту...
мне важно было показать существование возможности (думается, не единственной) и способ ее реализации.
правда результат подобной операции не совсем подойдет для описанного выше запроса: будет много брака. в этот раз специально не проверял: как-никак ваши данные, но, как говорится, по опыту...
мне важно было показать существование возможности (думается, не единственной) и способ ее реализации.
"Если карта не соответствует местности, доверяй местности."
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Запрос в Mapinfo
для вычисления площади пересечения полигональных объектов, если возможно (или нужно) определить их пересечение, не надо никого физически резать. Для этого существует ф-я AreaOverlap( object1, object2 ), допустимая в SQL запросах.
Полученная с использованием оператора Intersect (не within - он учитывает ВХОЖДЕНИЕ, причем такое, когда центроид объекта (левого члена оператора) входит в полигон правого члена оператора) таблица-запрос в общем случае будет содержать много дублей - все пересечения из первой таблицы с объектами из второй таблицы. но если есть для каждого объекта первой таблицы уникальный номер, то агрегирующий запрос по этому номеру и площади пересечения даст суммарные площади. если необходимо агрегирование по зонам (т.е. значениям не уникальным для каждого объекта), то агрегирование надо проводить по этому столбцу.
Полученная с использованием оператора Intersect (не within - он учитывает ВХОЖДЕНИЕ, причем такое, когда центроид объекта (левого члена оператора) входит в полигон правого члена оператора) таблица-запрос в общем случае будет содержать много дублей - все пересечения из первой таблицы с объектами из второй таблицы. но если есть для каждого объекта первой таблицы уникальный номер, то агрегирующий запрос по этому номеру и площади пересечения даст суммарные площади. если необходимо агрегирование по зонам (т.е. значениям не уникальным для каждого объекта), то агрегирование надо проводить по этому столбцу.
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Запрос в Mapinfo
Запрос такой, Можно добавить что бы сортировку сделал сразу.
Только выполняется будет довольно долго, у меня минут 15 ушло.
Код: Выделить всё
Select _02.Лесничество, _01.ПОДВИД, sum(AreaOverlap(_02.Obj, _01.Obj)) from _02, _01 where _02.Obj contains part _01.Obj group by _02.Лесничество, _01.ПОДВИД into selection
- Вложения
-
- Запрос.zip
- Результат запроса
- (1.67 КБ) 576 скачиваний
- Пётр Дубоделов
- Завсегдатай
- Сообщения: 271
- Зарегистрирован: 21 апр 2009, 13:58
- Репутация: 12
- Откуда: Бурашево
- Контактная информация:
Re: Запрос в Mapinfo
Boris
спасибо за ликбез, воистину: век живи, век учись
спасибо за ликбез, воистину: век живи, век учись
"Если карта не соответствует местности, доверяй местности."
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
Re: Запрос в Mapinfo
Sibit, извините новичка, не совсем корректный вопрос. Мне нужно выбрать в верхнем меню Запрос - SQL Запрос. Дальше выскакивает табличка, которую не совсем понимаю, как заполнить. Help! Спасибо!
-
- Активный участник
- Сообщения: 216
- Зарегистрирован: 21 окт 2009, 13:29
- Репутация: 28
- Откуда: Новосибирск
Re: Запрос в Mapinfo
Варианта 2, первый - в окне SQL запрос, второй в окне Mapbasic ввести запрос который я привел.
В первом варианте - вначале выбрать таблицы в которых нужно сделать выборку, Mapinfo предложит в поле "с условием" ввести "_02.Obj Contains _01.Obj", заменить на "_02.Obj Contains part _01.Obj", Тк нужно пересечение(Intersect в данном случае не пойдет, т.к. он учитывает касание точкой), в поле колонки ввести необходимые колонки, в данном случае _02.Лесничество, _01.ПОДВИД, sum(AreaOverlap(_02.Obj, _01.Obj)). И заполнить поле "Группировать по колонкам" Лесничество и подвид ( _02.Лесничество, _01.ПОДВИД ) в поле сортировать можно тоже добавить _02.Лесничество, _01.ПОДВИД, это сразу отсортирует результат.
Вот примерно так Результат я на одном объекте проверил, вроде правильно пресечение считает.
В первом варианте - вначале выбрать таблицы в которых нужно сделать выборку, Mapinfo предложит в поле "с условием" ввести "_02.Obj Contains _01.Obj", заменить на "_02.Obj Contains part _01.Obj", Тк нужно пересечение(Intersect в данном случае не пойдет, т.к. он учитывает касание точкой), в поле колонки ввести необходимые колонки, в данном случае _02.Лесничество, _01.ПОДВИД, sum(AreaOverlap(_02.Obj, _01.Obj)). И заполнить поле "Группировать по колонкам" Лесничество и подвид ( _02.Лесничество, _01.ПОДВИД ) в поле сортировать можно тоже добавить _02.Лесничество, _01.ПОДВИД, это сразу отсортирует результат.
Вот примерно так Результат я на одном объекте проверил, вроде правильно пресечение считает.
-
- Участник
- Сообщения: 95
- Зарегистрирован: 01 авг 2012, 09:15
- Репутация: 1
- Откуда: г. Санкт-Петербург
Re: Запрос в Mapinfo
Sibit, что неправильно заполнила? См. вложение. Выдает ошибку: Не определена переменная или поле part_01.Obj. Help!!!! Спасибо.
- Вложения
-
- 01.jpg (52.23 КБ) 21305 просмотров
-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: Запрос в Mapinfo
"e="Foxxxy"]Выдает ошибку: Не определена переменная или поле part_01.Obj. Help!!!! Спасибо.[/quote]
дык она и в самом деле не определена, вместо "part_01.Obj" напишите "_01.Obj""
кстати, intersects все таки годится, т.к. касание точкой имеет нулевую площадь перекрытия, и в сумме участвовать не будет
а contains все таки не годится, потому как иcключает частичные перекрытия, и соответственно эти самые частичные площади
update:
звиняюсь
конечно contains part сгодится, пробел только после part поставить не забыть
дык она и в самом деле не определена, вместо "part_01.Obj" напишите "_01.Obj""
кстати, intersects все таки годится, т.к. касание точкой имеет нулевую площадь перекрытия, и в сумме участвовать не будет
а contains все таки не годится, потому как иcключает частичные перекрытия, и соответственно эти самые частичные площади
update:
звиняюсь
конечно contains part сгодится, пробел только после part поставить не забыть
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя