RU:Osm2pgsql/o5m
Интерфейс импорта o5m позволяет osm2pgsql читать данные из файлов в формате o5m.
Инсталляция
Процесс описан в RU:osm2pgsql#Из_исходников_(общее), за одним исключением:
После получения исходников из svn, скачайте интерфейс импорта o5m 2012-10-14. Затем распакуйте файлы и переместите их в субдиректорию osm2pgsql. Два файла будут новыми: parse-o5m.c и parse-o5m.h, и два уже существующими, и должны быть перезаписаны: osm2pgsql.c и Makefile.am.
Интерфейс импорта был успешно протестирован на osm2pgsql revision 26278. Как обычно: никаких гарантий, to the extent permitted by law.
В случае обычного исходного файла osm2pgsql.c с ревизии 26278, требуется внести изменения. Дополнительные строки (помечены знаком +) нужны для работы интерфейса импорта:
*************** *** 54,59 **** --- 54,60 ---- #include "sprompt.h" #include "parse-xml2.h" #include "parse-primitive.h" + #include "parse-o5m.h" #ifdef BUILD_READER_PBF # include "parse-pbf.h" *************** *** 174,179 **** --- 175,181 ---- #ifdef BUILD_READER_PBF printf(" \t\tpbf - OSM binary format.\n"); #endif + printf(" \t\to5m - OSM binary format.\n"); printf(" -O|--output\t\tOutput backend.\n"); printf(" \t\tpgsql - Output to a PostGIS database. (default)\n"); printf(" \t\tgazetteer - Output to a PostGIS database suitable for gazetteer\n"); *************** *** 520,525 **** --- 522,529 ---- streamFile = &streamFileXML2; } else if (strcmp("primitive", input_reader) == 0) { streamFile = &streamFilePrimitive; + } else if (strcmp("o5m", input_reader) == 0) { + streamFile = &streamFileO5m; #ifdef BUILD_READER_PBF } else if (strcmp("pbf", input_reader) == 0) { streamFile = &streamFilePbf; *************** *** 550,555 **** --- 554,563 ---- /* if input_reader is not forced by -r switch try to auto-detect it by file extension */ if (strcmp("auto", input_reader) == 0) { + if (strcasecmp(".o5m",argv[optind]+strlen(argv[optind])-4) == 0 || + strcasecmp(".o5c",argv[optind]+strlen(argv[optind])-4) == 0) { + streamFile = &streamFileO5m; + } else #ifdef BUILD_READER_PBF if (strcasecmp(".pbf",argv[optind]+strlen(argv[optind])-4) == 0) { streamFile = &streamFilePbf;
В Makefile.am вам просто нужно добавить parse-o5m.c и parse-o5m.h в список компиляции.
Дополнительная информация
Для дополнительной информации о формате o5m смотрите следующие Вики страницы:
- o5m
- osmconvert – конвертация между различными форматами данных, вырезание регионов
- osmfilter – фильтрация указанных объектов или тегов OSM, делает оффлайновый taginfo
Бенчмарки
Чтение файлов .o5m обычно чуть быстрее чтения других OSM форматов, но вы не получите значительного ускорения обработки, поскольку тут узким местом является запись в базу данных.
Добавляйте сюда ваши результаты бенчмарков.