попробуй https://yadi.sk/d/I2r6n2-Y3LAwDT
gryphon
Спасибо, смогу попробовать завтра. О результате отпишусь.
У меня такую ошибку выдаёт
че-то я не смог слинковать нормально
ну да ладно, вот библиотека, надо кинуть в папку с утилитой https://yadi.sk/d/5xKkjET-3LB5aZ
Подкинул dll`ку, к сожалению не работает в батнике вместо 32бит версии.
PS: Батник с такими ключами:
osmconvert OSM.pbf -B=RU-MOW.poly -v --drop-author --emulate-osmosis --complete-ways --complex-ways -o=RU-MOW.osm
та же фигня с библиотекой или что-то новое?
можно запустить без батника, из командной строки и скинуть вывод?
Нет просто нет osm файлов на выходе.
osmconvert Parameter: CFO.pbf
Read-opening: CFO.pbf
Read-opening: increasing gzbuffer.
osmconvert Parameter: -B=RU-MOW.poly
- 0 379480000,555747000,379912000,555695000
cut
- 189 371217000,558466000,371224000,558480000
- 190 371224000,558480000,371231000,558466000
Border polygons: 191. Now sorting.
> 0 366419000,554629000,366987000,555613000
+ add to chain of 1
+ add to chain of 2
+ add to chain of 3
+ add to chain of 4
+ add to chain of 5
> 1 366419000,554629000,366798000,554250000
+ add to chain of 0
+ add to chain of 2
+ add to chain of 3
+ add to chain of 4
> 2 366495000,553790000,367063000,553508000
+ add to chain of 3
+ add to chain of 4
+ add to chain of 5
+ add to chain of 6
> 3 366495000,553790000,366810000,554002000
+ add to chain of 2
+ add to chain of 4
cut
+ add to chain of 189
+ add to chain of 190
> 187 381065000,557003000,381290000,557205000
+ add to chain of 188
+ add to chain of 189
+ add to chain of 190
> 188 381065000,557003000,381092000,556976000
+ add to chain of 187
> 189 381216000,557247000,381359000,557398000
+ add to chain of 190
> 190 381216000,557247000,381290000,557205000
+ add to chain of 189
Chains:
> 0 366419000,554629000,366987000,555613000
1 366419000,554629000,366798000,554250000
> 1 366419000,554629000,366798000,554250000
cut
> 189 381216000,557247000,381359000,557398000
186 381049000,557501000,381359000,557398000
187 381065000,557003000,381290000,557205000
190 381216000,557247000,381290000,557205000
> 190 381216000,557247000,381290000,557205000
186 381049000,557501000,381359000,557398000
187 381065000,557003000,381290000,557205000
189 381216000,557247000,381359000,557398000
End of border initialization.
osmconvert Parameter: -v
osmconvert Error: unrecognized option: -v
Read-closing: CFO.pbf
А ошибка вас не смущает
Попробовал без ключа -v, файл создаётся, но почему то не удаляются временные файлы osmconvert_tempfile.*
End of border initialization.
osmconvert Parameter: --drop-author
osmconvert Parameter: --emulate-osmosis
osmconvert Parameter: --complete-ways
osmconvert Parameter: --complex-ways
osmconvert Parameter: -o=C:\Russia\Maps\osm\RU-MOW.osm
osmconvert: zlib 1.2.8 flags: 00000065
Write-opening: C:\Russia\Maps\osm\RU-MOW.osm
Tempfiles: osmconvert_tempfile.10288.*
osmconvert: File timestamp: 2017-07-18T20:43:02Z
osmconvert: changing dependencystage from 0 to 11.
osmconvert: changing dependencystage from 11 to 12.
osmconvert: changing dependencystage from 12 to 22.
Write-opening: osmconvert_tempfile.10288.1
Write-opening: osmconvert_tempfile.10288.1
osmconvert: changing dependencystage from 22 to 32.
osmconvert: String table index restart 1
osmconvert: String table index restart 2
osmconvert: String table index restart 3
osmconvert: String table index restart 4
osmconvert: String table index restart 5
osmconvert: String table index restart 6
osmconvert: String table index restart 7
Write-opening: stdout
Write-reopening: C:\Russia\Maps\osm\RU-MOW.osm
Write-closing FD: 7
Interrelational hierarchy 1: 57 dependencies.
Interrelational hierarchy 2: 0 dependencies.
osmconvert: changing dependencystage from 32 to 33.
Read-opening: osmconvert_tempfile.10288.1
Read-opening: increasing gzbuffer.
osmconvert: Not a standard .o5m file header osmconvert_tempfile.10288.1
osmconvert: File timestamp: 2017-07-18T20:43:02Z
Relation hierarchies: 1 of maximal 12.
osmconvert: Last processed: relation 7403047.
Read-closing: osmconvert_tempfile.10288.1
Read-closing: CFO.pbf
Write-closing FD: 4
Write-closing FD: 4
Это нормально. Файлы не удаляются, т.к. включено логирование. Если будет работать с большими файлами и complete/complex-ways, можно будет собрать в нормальном виде.
А какие дополнительные дефайны добавляли, типа _LARGEFILE64_SOURCE ?
“Правильная” zlib без поллитры под виндой не собирается (в принципе, там ничего сложного, но официальной инструкции “как собрать zlib с поддержкой 64-битного gzseek” я не нашёл).
Ну и сам osmconvert написан весьма оригинально (как в нём автор ориентируется, интересно?..).
В-общем, было б неплохо предоставить необходимый и достаточный тестовый пример. pbf-ку побольше я с гислаба скачать могу, нужно всё остальное.
следующая версия https://yadi.sk/d/Vnwc4kut3LCBFm
Убрал отладку, прикрутил библиотеку к бинарнику. Собственно, нужно потестировать.
Я проверял так
osmconvert64-0.8.8p.exe local.osm.pbf -b=28,57,29,58 --complex-ways -o=pskov.osm
Если кто-то хочет повторить сборку
- ставим mingw-w64 (http://mingw-w64.org/)
- В PATH добавляем путь к папке bin
- качаем zlib
- zconf.h
ищем кусок
# if defined(_WIN32) && !defined(__GNUC__) && !defined(Z_SOLO)
# define z_off64_t __int64
меняем на
# if defined(_WIN32) && !defined(Z_SOLO)
# define z_off64_t __int64
- win32/Makefile.gcc, добавляем в начало
LOC = -D_LARGEFILE64_SOURCE=1
- собираем библиотеку
gmake -fwin32/Makefile.gcc
- правим osmconvert.c
--- osmconvert.c.orig 2017-07-19 10:00:05.749701000 +0300
+++ osmconvert.c 2017-07-19 13:50:23.904084443 +0300
@@ -459,6 +459,7 @@
"Please send any bug reports to markus.weber@gmx.com\n\n";
#define _FILE_OFFSET_BITS 64
+#define Z_LARGE64 1
#include <zlib.h>
#include <inttypes.h>
#include <stdlib.h>
@@ -530,7 +531,7 @@
#define NL "\r\n" // use CR/LF as new-line sequence
#define off_t off64_t
#define lseek lseek64
- z_off64_t gzseek64(gzFile,z_off64_t,int);
+ //z_off64_t gzseek64(gzFile,z_off64_t,int);
#define gzseek gzseek64
#else
#define NL "\n" // use LF as new-line sequence
@@ -2418,7 +2419,7 @@
#elif read_GZ==1
err= fseek(read_infop->fi,0,SEEK_SET)<0;
#else
- err= gzseek(read_infop->fi,0,SEEK_SET)<0;
+ err= gzrewind(read_infop->fi)<0;
#endif
if(err) {
PERRv("could not rewind file: %-80s",read_infop->filename)
- собираем osmconvert
cc -c osmconvert.c -O3 -IC:\Win-builds\tmp\zlib-1.2.11 -LC:\Win-builds\tmp\zlib-1.2.11 -o osmconvert.o
cc -static osmconvert.o -O3 -IC:\Win-builds\tmp\zlib-1.2.11 -LC:\Win-builds\tmp\zlib-1.2.11 -lz -o osmconvert64-0.8.8p.exe
Да, заработало. Мне по факту помогло только убирание !defined(GNUC) и два define
_LARGEFILE64_SOURCE=1
_LFS64_LARGEFILE=1
В самом osmconvert.c ни чего не трогал.
Да, точняк. Так намного лучше. Я пробовал без LFS: не взлетало.
gryphon
Огромное спасибо! Вроде все работает как надо!
Здравствуйте. Подскажите пожалуйста, в чем может быть проблема.
Выполняю этот запрос:
osmconvert --hash-memory=200 /sdcard/Download/MAP.o5m -b=37.63049,55.6768854025992,37.63549,55.6797045974008 --complete-ways -o=/sdcard/Download/1.xml
На win64 всё отлично, но на андроиде пишет:
osmconvert Warning: unexpected end of input file:
и на выходе пустой файл.
Если убираю complete-ways то всё отлично. Но отсекает нужные кусочки на стыке обрезки.
Неправильно собрали под андройд. Выше тема обсуждалась когда используется 32-битное число для смещения в файле, а он больше 4Гб.
Но у меня не такой большой файл. Всего 20МБ
А как правильно скомпилировать?
Решил проблему. Изменил read_GZ с 3 на 0:
#define read_GZ 0
Долго искал решение этой проблемы, поэтому добавлю в сообщение ключевые слова если можно:
osmconvert android complete-ways, unexpected end of input file