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

Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 19 ноя 2010, 09:03
oleg5551
Подскажите, пожалуйста:
В программе на Qt 3.0 KDevelop:C/C++ надо загрузить карту, например, в QPixMap.

Функция GisInit работает и пути к Gisdbase, Location, Mapset заданы в программе правильно.

Проблема в том, как загрузить векторные слои в QPixMap, например, из тестового проекта Spearfish? и можно ли вообще это сделать?
Или, если есть файл карты (как из проекта Spearfish его создать?), то как загрузить его?

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 19 ноя 2010, 10:28
Александр Мурый
Из GRASS можно экспортировать растр и вектор в разные форматы (геопривязанные и просто графические). Вам нужно вытащить векторную карту в графику, так? Тогда можно исп-ть модуль v.out.svg (SVG точно работает с Qt). Ну или v.out.dxf (..?)

Другое дело, если надо сохранить привязку, атрибуты и т.п.. Тогда надо идти через GDAL/OGR (r.out.gdal для растров, v.out.ogr для векторов).

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 20 ноя 2010, 10:34
oleg5551
Пожалуйста, поясните несколько подробнее для чайников.

v.out.ogr это модуль для GRASS. Можно ли его вызвать из программы на Qt (у меня нет графического интерфейса, но есть доступ к функциям библиотек )? Можете, пожалуйста, написать функции библиотек ( и сами заголовочные файлы, которые надо прописать в программе ), чтобы получить карту, которую можно заслать в QPixmap.

И еще один вопрос. Файл формата .dxf, и .dwg содержит карту со слоями, или это только один слой?

В GRASS есть опция конвертировать файл .dxf в векторный слой. Что она делает?

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 20 ноя 2010, 12:54
Александр Мурый
oleg5551, вы уже смотрели в сторону QGIS? Там что-то похожее действует (из Qt вызываются модули GRASS). Можно посмотреть исходный код.

Лично я написать ничего не могу, т.к. не программист.

Какие типы/форматы/.. файлов понимает QPixmap?
Из документации Qt 4.7:
Qt provides four classes for handling image data: QImage, QPixmap, QBitmap and QPicture.
. Вы уверены, что надо исп-ть именно QPixmap для вывода векторного слоя? Или в этом и была идея, что в начале делаем общую карту (растр), а потом перегоняем в Qt.

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 20 ноя 2010, 14:02
Александр Мурый
Далее. С файлами .dwg GRASS напрямую не работает. В .dxf может быть как один слой, так и несколько. Не думаю, что для вашей задачи будет полезны DXF / DWG, выше я привёл DXF просто как пример векторного формата.
В GRASS есть опция конвертировать файл .dxf в векторный слой.
Это не опция, это отдельный модуль v.out.dxf, который экспортирует векторную карту GRASS в файл DXF.

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 20 ноя 2010, 20:13
Voltron
Давайте начнем с начала. Что нужно получить, для чего вообще загружать mapset в QPixmap? Нужно просто отобразить картинку или предполагается редактирование данных?

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 21 ноя 2010, 11:44
oleg5551
Задание таково:

Есть 2 файла формата .dxf и .dfg. Что находится в этих файлах, никто не знает. Из них надо получить карту, используя функции GRASS, и затем отобразить на каком-нибудь виджете ( желательно QPixmap, но для этого надо будет еще конвертировать карту с векторными слоями в растровый формат - как это сделать тоже никто не знает ). В дальнейшем пользователю надо будет сделать функции: просмотр слоев, масштабирование.
Программа пишется на Qt 3. Пока есть скрипт, который устанавливает переменные окружения, и в программе вызывается gisinit.

Использовать для этих целей GRASS не обязательно, важно чтобы система была бесплатной.

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 21 ноя 2010, 11:47
Voltron
Если использование GRASS не принципиально, то лучше посмотреть в сторону QGIS.

Re: Можно ли из Grassа 6.4 загрузить карту?

Добавлено: 21 ноя 2010, 12:31
KolesovDmitry
И еще вопрос: будет ли на машине, для которой вы пишите программу, установлена GRASS? Если да -- то задача решается одной строчкой, без всяких библиотек и заголовочных файлов (неоднократно проделывал). Если нет, тоже решается, но уже сложнее, нужно будет ковырять библиотеки (и сам я этого ни разу не делал).