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