Считаем площади в MapInfo (пргаммирование)
-
- Интересующийся
- Сообщения: 26
- Зарегистрирован: 29 апр 2021, 10:38
- Репутация: 1
- Откуда: Москва
Re: Считаем площади в MapInfo (пргаммирование)
Спасибо.
Задачку решил следующим образом (мало ли кому пригодится):
1. SQL-запрос:
Выбрать колонки: Участки.id, (Здания.Площадь*Здания.Этажность)
из таблиц: Здания, Участки
с условием: Участки.Obj contains Здания.obj
2. Обновить колонку:
Обновил таблицу "Участки", колонку "Площадь_Зданий_в_Участке"
Значение извлечь из: Qwery1 (Qwery2 ... QweryN)
Вычислить: Sum
для: "Площадь*Этажность"
ИЛИ то же, но через MapBasic - 2 строчки:
Select Участки.id, (Здания.Площадь*Здания.Этажность) from Здания, Участки where Участки.Obj contains Здания.obj into selection
Add Column "Участки" (Площадь_Зданий_в_Участке )From Selection Set To sum(COL2) Where within
Задачку решил следующим образом (мало ли кому пригодится):
1. SQL-запрос:
Выбрать колонки: Участки.id, (Здания.Площадь*Здания.Этажность)
из таблиц: Здания, Участки
с условием: Участки.Obj contains Здания.obj
2. Обновить колонку:
Обновил таблицу "Участки", колонку "Площадь_Зданий_в_Участке"
Значение извлечь из: Qwery1 (Qwery2 ... QweryN)
Вычислить: Sum
для: "Площадь*Этажность"
ИЛИ то же, но через MapBasic - 2 строчки:
Select Участки.id, (Здания.Площадь*Здания.Этажность) from Здания, Участки where Участки.Obj contains Здания.obj into selection
Add Column "Участки" (Площадь_Зданий_в_Участке )From Selection Set To sum(COL2) Where within
- Вложения
-
- 1. SQL-запрос
- 1.png (12.44 КБ) 4338 просмотров
-
- 2. Обновить колонку
- 2.png (6.71 КБ) 4338 просмотров
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Считаем площади в MapInfo (пргаммирование)
Почти правильно, за исключение того, что:
1) операторы "within" / "contains " связывают только те объекты, у которых центроид находится внутри охватывающего контура - все участки, которые перекрывают "здания" как-то иначе - пролетят мимо. С учетом того, что центроид в MapInfo можно сдвигать, результат такой операции - неопредлено не предсказуем.
2) в первом запросе УЖЕ есть идентификатор участка [id], Если он, как положено, уникален, то зачем второй раз плодить долгий и неустойчивый пространственный оператор? Связь id <-> сработает в разы лучше и надежней.
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Считаем площади в MapInfo (пргаммирование)
Это Мапинфа, тыц
В стандарте SQL немного другое RTFM«Contains» и «Within» имеют дело с центроидами.
«Contains Entire» и «Entirely Within» имеют дело с границами и не затрагивают центроиды.
Geometry A contains Geometry B if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A. An important subtlety of this definition is that A does not contain its boundary, but A does contain itself.
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Считаем площади в MapInfo (пргаммирование)
Только одно дополнение - ]«Contains Entire» - как и следует из названия соответствует объектам, которые ПОЛНОСТЬЮ включены в другой объект. Не скажу про границу - просто не помню: могут точки А лежать на границе В или нет.
Для MapInfo в основном использую оператор "Intersect" - он гарантированно возвращает все пересечения. В зависимости от задачи, что бы исключить ложное пересечение использую функцию:
Код: Выделить всё
AreaOverlap(obj1,obj2) < 1E-06
Код: Выделить всё
(AreaOverlap(obj1,obj2) /Area(obj1,"sq m")) < 1E-06
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
-
- Новоприбывший
- Сообщения: 1
- Зарегистрирован: 21 май 2021, 21:38
- Репутация: 0
- Откуда: москва
Re: Считаем площади в MapInfo (пргаммирование)
Добрый вечер!
хочу построить участок в программе в map info.
выдает такую надпись
(с\users\лиза\document\правобережный12.mif:16)
встретилось[.] там, где ожидается[числовая константа]
что делать?
хочу построить участок в программе в map info.
выдает такую надпись
(с\users\лиза\document\правобережный12.mif:16)
встретилось[.] там, где ожидается[числовая константа]
что делать?
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Считаем площади в MapInfo (пргаммирование)
veta13, показать нам код?
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 10 гостей