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

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

Примечание: текущая версия библиотеки libosm и использующего ее конвертера osm2shp (ревизия 2911) не работают с текущим форматом OSM XML 0.5 на момент написания статьи и предназначены для данных версии 0.4.

Сначала установим дополнительные библиотеки, 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

То значит все прошло удачно.

http://gis-lab.info/qa/osm2shp-ubuntu.html

Яндекс.Метрика