Компиляция osm2shp под Ubuntu 8.04
Для меня, как начинающего пользователя 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
То значит все прошло удачно. Запись начиналась как заметка для блога, но, пожалуй, тянет и на статью. Обсуждение здесь и на форуме.