GIS-LAB

Географические информационные системы и дистанционное зондирование

Компиляция osm2shp под Ubuntu 8.04

Максим Дубинин, 31.08.2008

Для меня, как начинающего пользователя Unix, это оказалось нетривиальной задачей, поэтому публикую рецепт. Обращаю внимание, что описания приводимые самими OSM’овцами недостаточно подробно описывают процесс, особенно для новичков. В этом описание предполагается, что пакеты make, gcc, g++, subversion уже установлены. Наверняка есть какая-то несуразица в подходе (несколько смущает последняя часть с переписыванием путей в Makefile), прошу учесть базовое знакомство с Unix автора данных строк. Буду благодарен любым подсказкам, как писать правильнее. Главное, что все работает.

Сначала установим дополнительные библиотеки, shapelib и libshp-dev для создания shape-файлов, expat и libexpatl-dev для чтения XML синтаксиса.

apt-get install shapelib libshp-dev
apt-get install expat libexpat1-dev

Эти пакеты при установке потребуют дополнительных, установим и их, проблем быть не должно. Если не установить libshp-dev, make будет вываливаться с сообщением: /usr/bin/ld: cannot find -lshp
Если не установить libexpat1-dev, make будет вываливаться с сообщением: /usr/bin/ld: cannot find -lexpat.

Если директории с исходниками еще нет, создадим и перейдем в нее:

mkdir src
~/src

Перед установкой самого osm2shp, необходимо установить две дополнительные библиотеки libosm и ccoord:

svn co http://svn.openstreetmap.org/applications/lib/libosm
svn co http://svn.openstreetmap.org/applications/lib/ccoord

Ревизия этих библиотек и osm2shp на момент написания статьи: 10355

Для начала разберемся с библиотекой libosm.

cd libosm

Отредактируем Components.cpp:

pico Components.cpp

Найдем и заменим:

#include

на

#include

Запустим сборку и установку:

make
make install

Разберемся с библиотекой ccoord:

cd ../ccoord
make

?нструкций по make install для этой библиотеки не существует, поэтому выполним необходимые действия вручную:

cp libccoord.a /usr/local/lib
cp *.h /usr/local/include

Сборка дополнительных библиотек завершена, перейдем к собственно osm2shp:

cd ..
svn co http://svn.openstreetmap.org/applications/utils/export/osm2shp
cd osm2shp

Здесь потребуется сделать ряд замен в osm2shp.cpp и Makefile. Сначала исправим osm2shp.cpp:

pico osm2shp.cpp

Найдем и заменим:

#include

на

#include

Теперь очередь Makefile:

pico Makefile

Заменим:

-I../../../lib/libosm

на

-I/usr/local/lib

Заменим:

../../../lib/libosm/libosm.a

на

/usr/local/lib/libosm.a

Заменим:

../../../lib/ccoord/libccoord.a

на

/usr/local/lib/libccoord.a

Заменим:

../../../lib/libosm/libosm.a

на

/usr/local/lib/libosm.a

Вот и все, проверим и если на:

./osm2shp

Нам в ответ выдается:

Usage: osm2shp OSMfile nodeSHPfile waySHPfile  areaSHPfile features.xml

То значит все прошло удачно. Запись начиналась как заметка для блога, но, пожалуй, тянет и на статью. Обсуждение здесь и на форуме.

Оставьте комментарий


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter