RU:Osm2pgsql/o5m

From OpenStreetMap Wiki
Jump to navigation Jump to search

Интерфейс импорта 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 форматов, но вы не получите значительного ускорения обработки, поскольку тут узким местом является запись в базу данных.

Добавляйте сюда ваши результаты бенчмарков.