You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#3451 2013-05-06 16:11:50
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
А зачем нам вообще нужна эта база? Если только чтобы в память всё влезало, может обойтись малой кровью - засунуть теги и координаты в отдельные хэш-таблицы и натравить на них какой-нибудь Tie::LevelDB или Tie::Redis? (я их видел только в гугле)
Last edited by akks (2013-05-06 16:12:10)
Offline
#3452 2013-05-07 09:04:31
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Я вынес OSM::Hash в отдельный файл и сделал возможность переключения на другой движок.
Теперь со стороны должно быть понятнее ![]()
А зачем нам вообще нужна эта база? Если только чтобы в память всё влезало, может обойтись малой кровью - засунуть теги и координаты в отдельные хэш-таблицы и натравить на них какой-нибудь Tie::LevelDB или Tie::Redis?
Можно и их пробовать, если они умеют прозрачно работать с кодировкой и сериализацией.
В общем, видимо всё упрётся в вопрос структуры базы - если она не заточена под конвертер, а имеет какой-то общий вид, вытаскивать из неё обработанные объекты нереально
Вроде postgis_simple мог бы подойти.
Offline
#3453 2013-05-07 09:31:10
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Я вынес OSM::Hash в отдельный файл и сделал возможность переключения на другой движок.
Теперь со стороны должно быть понятнее
Да, уже чуть легче...
Можно и их пробовать, если они умеют прозрачно работать с кодировкой и сериализацией.
Теоретически, должны уметь. Пусть спецы по NoSQL попробуют. Мне MapDB хватило, а он попроще ![]()
Вроде postgis_simple мог бы подойти.
А логика всяких chains и mpoly может быть повторена без хранения этих объектов где-либо (в базе-то их нет) ?
Ладно, mpoly пока можно в памяти хранить, иначе sub _merge_multipolygon совсем накроется. А chains - это что за звери?
Last edited by akks (2013-05-07 09:34:27)
Offline
#3454 2013-05-07 09:43:34
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
А логика всяких chains и mpoly может быть повторена без хранения этих объектов где-либо (в базе-то их нет) ?
chains в базе есть: это последовательность точек в вее.
mpoly в принципе можно попробовать собирать и на лету
Offline
#3455 2013-05-10 11:38:16
- Larry0ua
- Member
- Registered: 2010-09-19
- Posts: 1,061
Re: Конвертер OSM -> MP
после переустановки перла нашел баг (наверное). Может, у меня что-то с CPAN, но зависимость Math:Geometry:Planar:GPC:Polygon от Inline он не подхватил, не собирался без пинка
а для osm2mp (LangSelect.pm) нужна была, кроме перечисленных в комментариях в коде в osm2mp.pl - Text:Unidecode
Offline
#3456 2013-05-10 14:03:03
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Свежий успешный опыт Win7 64 + ActivePerl 5.16.3 64bit:
> cpan
install Config::Std
install Template
q
> ppm
Поиск и установка по запросам:
YAML (1 шт, сам YAML)
Text Unidecode (1 шт) - надо добавить в комменты!
Math Polygon ( 5 пакетов)
Tree-R (1 шт)
Geo Openstreetmap Parser (1 шт)
Руками ни одного файла не копировал.
Last edited by akks (2013-05-10 14:03:25)
Offline
#3457 2013-05-10 17:00:36
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
зависимость Math:Geometry:Planar:GPC:Polygon от Inline он не подхватил
Это криво прописаны зависимости у Math:Geometry:Planar:GPC:Polygon
кроме перечисленных в комментариях в коде в osm2mp.pl - Text:Unidecode
Text Unidecode (1 шт) - надо добавить в комменты!
Не надо. Его использует один из необязательных плагинов, так что требовать его установки не совсем правильно.
Offline
#3458 2013-05-10 18:54:27
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Не надо. Его использует один из необязательных плагинов, так что требовать его установки не совсем правильно.
Надо, но написать в комментах "для плагина... нужен Text::Unidecode". Я бы и про ActivePerl и Cpan install в начало коммента прописал.
Еще предлагаю автору иногда собирать для Windows с помощью pp / perl2exe / ... готовый дистрибутивчик. Перестанут доставать конечные пользователи - им этот CPAN совсем не нужен ![]()
Last edited by akks (2013-05-10 18:55:49)
Offline
#3459 2013-05-11 05:43:33
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Еще предлагаю автору иногда собирать для Windows с помощью pp / perl2exe / ... готовый дистрибутивчик
perl2exe не дружит с Inline
Offline
#3460 2013-05-11 10:32:42
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
perl2exe не дружит с Inline
Жаль
PAR::Packer тоже?
Offline
#3461 2013-05-11 10:35:52
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
PAR::Packer тоже?
Теоретически дружит, но не с наскока.
Надо разбираться, как ему подсунуть готовую dll-ку, чтобы он её правильно съел.
Offline
#3462 2013-05-11 16:58:58
- Nikolya
- Member
- From: Краснодар
- Registered: 2010-08-17
- Posts: 937
Re: Конвертер OSM -> MP
akks wrote:Еще предлагаю автору иногда собирать для Windows с помощью pp / perl2exe / ... готовый дистрибутивчик
perl2exe не дружит с Inline
да уж, попробывал perlapp и perl2exe, так и есть с Inline не дружат оба. нуна ковырнуть. ибо под винду exe'шник намного быстрее работает, да и без гемора с перлом. getbound.pl тож не собрался (((
как вариант
http://habrahabr.ru/post/149586/
Мы получили директорию с нашим приложением, которую можно перенести на любую другую систему при помощи простого копирования.
Last edited by Nikolya (2013-05-11 18:19:09)
Offline
#3463 2013-05-12 16:59:08
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
В идеале (для скорости) можно было бы переписать Perl-часть Math::Geometry::Planar::GPC::Polygon без Inline и натравливать Perl2Exe (когда заработает - честно его купить для сервера)...
Кто писал С-модули для перла без Inline?
Last edited by akks (2013-05-12 16:59:58)
Offline
#3464 2013-05-14 10:01:06
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
:|Я обкурился SWIG, а затем даже XS и перевел Math::Geometry::Planar::GPC::Polygon на XS (зависимость Inline::C исчезает, dll остаётся)
(по дороге потерял три функции, которые не использовались - они возвращали нестандартные типы, а TYPEMAP изучать уже не захотелось)
Math::Polygon::Tree и osm2mp переводятся на его использование заменой Math::Geometry::Planar::GPC::Polygon на Math::Geometry::Planar::GPC::PolygonXS ,mp-файл вроде одинаковый (лучше проверить)
https://dl.dropboxusercontent.com/u/633 … ygonXS.zip
https://dl.dropboxusercontent.com/u/633 … pcdmQa.zip
Попробуете скомпилировать?
Last edited by akks (2013-05-14 10:05:00)
Offline
#3465 2013-05-14 10:14:13
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Круто! Это дело нужно выложить на CPAN, желательно переобозвав как-то покороче ![]()
Про упаковку: http://search.cpan.org/~rschupp/PAR-Pac … /lib/pp.pm
Offline
#3466 2013-05-14 11:47:53
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Круто! Это дело нужно выложить на CPAN, желательно переобозвав как-то покороче
Предоставляю такую возможность
Лучше сначала потестировать на живом osm2mp (главное - не на серверах конвертации) ![]()
Ну и функции pts_to_vertex_list , vertex_list_to_pts, gpc_free_polygon2 на перл не переведены (не пригодились, к счастью).
Я не удивлюсь, если там будут утечки памяти, основное шаманство состояло в замене FREE на Safefree (иначе на FREE вылетало) и вынесении функции get_polygons в XS-файл c переобозначений действий со стеком Inline_Stack_* (иначе список полигонов был всегда пуст). Оба действия выполнялись интуитивно и не факт, что правильно.
P.S. Извиняюсь, там куча отладочного вывода. Сейчас удалю и перевыложу на DropBox.
https://dl.dropboxusercontent.com/u/633 … ygonXS.zip
Last edited by akks (2013-05-14 12:02:59)
Offline
#3467 2013-05-14 12:02:19
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Я не удивлюсь, если там будут утечки памяти
Ну вот как раз этого не нужно. С утечками оно уже и так есть: http://search.cpan.org/~dvdpol/Math-Geo … -GPC-1.04/
Во всяком случае, встроенный тест прогоняется.
Непонятно только, зачем там в зависимостях перл 5.16.3.
Offline
#3468 2013-05-14 12:05:03
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Непонятно только, зачем там в зависимостях перл 5.16.3.
Не знаю, само создалось (h2xs). Можно пробовать уменьшать (негде протестировать). Писал, кстати, под Strawberry Perl.
Я ещё GPC посвежее взял с сервера (обещали как раз уменьшение утечек). Тест я просто перенёс в папку, переименовал в .t и изменил имя пакета.
Управление памятью в Перле - какой-то неимоверный ужас (особенно после Явы) ))
Отладку убрал, MP-файлы совпали (кроме строчки со временем).
Last edited by akks (2013-05-14 12:08:01)
Offline
#3469 2013-05-14 12:29:32
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
перевыложу на DropBox
Лучше бы в публичный репозиторий.
Управление памятью в Перле - какой-то неимоверный ужас (особенно после Явы) ))
Управление памятью в перле заключается в отслеживании циклических ссылок. Всё остальное он делает сам ![]()
Offline
#3470 2013-05-14 13:20:20
- Nikolya
- Member
- From: Краснодар
- Registered: 2010-08-17
- Posts: 937
Re: Конвертер OSM -> MP
Отладку убрал, MP-файлы совпали (кроме строчки со временем).
сам EXE'шник можно в общий доступ?
Offline
#3471 2013-05-14 14:58:58
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
akks wrote:Отладку убрал, MP-файлы совпали (кроме строчки со временем).
сам EXE'шник можно в общий доступ?
У меня EXEшника нет, просто поправили модуль, который, теоретически, мешал сделать EXEшник.
Offline
#3472 2013-05-14 15:11:49
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Выложил PolygonXS на Github:
https://github.com/alex85k/Perl-GPCPolygon-XS
Про упаковку: http://search.cpan.org/~rschupp/PAR-Pac … /lib/pp.pm
pp osm2mp.pl Exe-шник делает, но он при запуске ругается:
The locale codeset (cp1251) isn't one that perl can decode, stopped at Encode/Locale.pm line 94.
Compilation failed in require at script/text.pl line 2.pp -x osm2mp.pl вылетает ![]()
SYSTEM ERROR in executing osm2mp.pl: 256 at C:/strawberry/perl/site/lib/Module/ScanDeps.pm line 1302.
Last edited by akks (2013-05-14 15:37:32)
Offline
#3473 2013-05-14 16:21:39
- akks
- Member
- From: Ufa
- Registered: 2010-06-11
- Posts: 1,728
Re: Конвертер OSM -> MP
Сборочка под Windows64 (без всякого ускорения, просто папки):
https://dl.dropboxusercontent.com/u/633 … _win64.zip
Offline
#3474 2013-05-14 16:32:58
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Exe-шник делает, но он при запуске ругается:
The locale codeset (cp1251) isn't one that perl can decode,
Это должно помочь: http://stackoverflow.com/questions/6107 … ed-archive
Сборочка под Windows64 (без всякого ускорения, просто папки)
Дык а ускорения никакого и не будет, это ж не компиляция
Offline
#3475 2013-05-15 03:16:31
- Nikolya
- Member
- From: Краснодар
- Registered: 2010-08-17
- Posts: 937
Re: Конвертер OSM -> MP
akks wrote:Exe-шник делает, но он при запуске ругается:
The locale codeset (cp1251) isn't one that perl can decode,Это должно помочь: http://stackoverflow.com/questions/6107 … ed-archive
use Encode qw(:all);
my @list = Encode->encodings();
print join("\n", @list);
где эти строчки? чтоб добавить следующие
use Encode qw(:all);
use Encode::Byte;
use Encode::CN;
use Encode::JP;
use Encode::KR;
use Encode::TW;my @list = Encode->encodings();
print join("\n", @list);
и в нашем случае что добавить?
use Encode::RU;
или в связи с ошибкой - The locale codeset (cp1251) isn't one that perl can decode
use Encode::cp1251;
liosha прекращай заставлять думать))) сделай готовый рецепт)
Offline