Добрый день!
У меня есть местность 20 км * 20 км. Есть задача: создать двухмерную матрицу, и в клетках этой матрицы записать аггрегатные значения для каждого участка 50*50 метров: среднюю высоту и преобладающий тип поверхности (вода, лес, поле и т.п.).
Другими словами, нужно разбить территорию 20км*20км на клетки 400*400, и в каждой клетке записать структуру данных со средней высотой и преобладающим типом поверхности для данного участка местности.
Как это можно сделать? Есть ли готовые библиотеки и методы для этого? (Желательно на java, но С++ тоже подойдет) Я программист, но никогда раньше не работал с ГИС. Подскажите пожалуйста!
Всем заранее спасибо!
Как разбить карту mid-mif на ячейки с высотами и свойствами?
-
- Интересующийся
- Сообщения: 41
- Зарегистрирован: 28 авг 2008, 18:19
- Репутация: 0
- Максим Дубинин
- MindingMyOwnBusiness
- Сообщения: 9128
- Зарегистрирован: 06 окт 2003, 20:20
- Репутация: 747
- Ваше звание: NextGIS
- Откуда: Москва
- Контактная информация:
Re: Как разбить карту mid-mif на ячейки с высотами и свойствами?
то что вам нужно называется зональная статистика или аггрегация, вот тут немного про это есть http://gis-lab.info/qa/zonalstats.html
чтобы порекомендовать какой-либо метод, скажите для начала "условия", вам нужно создать самостоятельную программу? научиться это делать в одной из ГИС? Написать модуль для ГИС?
чтобы порекомендовать какой-либо метод, скажите для начала "условия", вам нужно создать самостоятельную программу? научиться это делать в одной из ГИС? Написать модуль для ГИС?
пристегивайтесь, турбулентность прямо по курсу
-
- Интересующийся
- Сообщения: 41
- Зарегистрирован: 28 авг 2008, 18:19
- Репутация: 0
Re: Как разбить карту mid-mif на ячейки с высотами и свойствами?
Оптимально - написать свою программу. Я думаю посмотреть в сторону GeoTools - это опенсорсная бесплатная библиотека для GIS. Может, там что-то такое найдется... А может, в MapXTreme...
Если не получится написать свою программу, тогда можно и использовать какой-нить готовый GIS или какую-нить оболочку к нему.
Дело в том, что мне нужно взять карту в формате ГИС, получить эту матрицу высот/типов_поверхности, и все. Кроме матрицы мне больше от карты ничего не надо.
Что можете теперь порекомендовать?
Заранее спасибо!
Если не получится написать свою программу, тогда можно и использовать какой-нить готовый GIS или какую-нить оболочку к нему.
Дело в том, что мне нужно взять карту в формате ГИС, получить эту матрицу высот/типов_поверхности, и все. Кроме матрицы мне больше от карты ничего не надо.
Что можете теперь порекомендовать?
Заранее спасибо!
-
- Гуру
- Сообщения: 4205
- Зарегистрирован: 10 апр 2006, 22:34
- Репутация: 433
- Откуда: Париж
Re: Как разбить карту mid-mif на ячейки с высотами и свойствами?
я не скажу как по уму, но раз уж речь в заголовке идет именно о MIF/MID, то скажу как тупо в лоб ее делают в Mainfo:
1. Создают сетку требуемого размера. В MapInfo через тот же MIF/MID - счетная задача.
2. Берут слой обрабатываемых данных, в котором атрибутами записаны агрегированные данные. Тут два пути если данные - это россыпь точек - это один путь, если данные в виде линий и полигонов, размером, превышающим размер вашей ячейки - другой.
3. Создаем копию таблицы с ячейками, дополнив ее всеми атрибутивными полями, где будете сохранять агрегированные данные.
4. Итерационно обходим все ячейки находим объекты в обрабатываемом слое, которые она (одна ячейка) перекрывает или пересекает с помощь команды Select * ... Overlap или Intersect - получаем запрос, сохраняем его как таблицу. Из-за особенностей команды Select он будет содержать геометрию первой таблицы, а атрибуты обеих таблиц.
5. Получаем набор из N*N таблиц. Перебираем эти таблицы по одной. С помощью пары команд MapBasic'а
Set Target
Objects Intersect Into Target
[ Data column_name = expression [ , column_name = expression ... ] ]
или функций
Overlap( ) function или AreaOverlap( ) function
для каждой ячейки получаем выборку "обрезанных" объектов.
6. Перебрать объекты в выборке после этого и проделать над ними любые вычисления - задача тривиальная. Делается агрегирующим запросом Select ...
7. Расчетный результат пишем в результирующую таблицу ячеек.
Все что нужно можно реализовать на бесплатном MapBasic'е или с помощью OLE интерфейса к MapInfo. Правда, сам MapInfo - платный.
1. Создают сетку требуемого размера. В MapInfo через тот же MIF/MID - счетная задача.
2. Берут слой обрабатываемых данных, в котором атрибутами записаны агрегированные данные. Тут два пути если данные - это россыпь точек - это один путь, если данные в виде линий и полигонов, размером, превышающим размер вашей ячейки - другой.
3. Создаем копию таблицы с ячейками, дополнив ее всеми атрибутивными полями, где будете сохранять агрегированные данные.
4. Итерационно обходим все ячейки находим объекты в обрабатываемом слое, которые она (одна ячейка) перекрывает или пересекает с помощь команды Select * ... Overlap или Intersect - получаем запрос, сохраняем его как таблицу. Из-за особенностей команды Select он будет содержать геометрию первой таблицы, а атрибуты обеих таблиц.
5. Получаем набор из N*N таблиц. Перебираем эти таблицы по одной. С помощью пары команд MapBasic'а
Set Target
Objects Intersect Into Target
[ Data column_name = expression [ , column_name = expression ... ] ]
или функций
Overlap( ) function или AreaOverlap( ) function
для каждой ячейки получаем выборку "обрезанных" объектов.
6. Перебрать объекты в выборке после этого и проделать над ними любые вычисления - задача тривиальная. Делается агрегирующим запросом Select ...
7. Расчетный результат пишем в результирующую таблицу ячеек.
Все что нужно можно реализовать на бесплатном MapBasic'е или с помощью OLE интерфейса к MapInfo. Правда, сам MapInfo - платный.
Кто сейчас на конференции
Сейчас этот форум просматривают: Semrush [Bot] и 6 гостей