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.***
#751 2009-08-18 12:49:02
- Kotelnikov
- Member

- From: Krasnodar, RU
- Registered: 2009-05-07
- Posts: 2,854
- Website
Re: Конвертер OSM -> MP
Сделал библиотечку для проверки попадания точки в полигон на основе B-дерева
Правда, работает только с недырявыми полигонами.Проверка миллиона точек с полигоном из 1000 рёбер заняла ~40 секунд (P3-3000).
Буду прикручивать к конвертеру
Т.е. уже можно рисовать границы краев и областей, дабы потом по ним пилить карты? ![]()
1 000 000 points: 80% complete
Offline
#752 2009-08-18 13:05:51
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Пилить-то давно можно: http://forum.openstreetmap.org/viewtopi … 841#p29841
Просто раньше это было ООЧЕНЬ медленно
Offline
#753 2009-08-18 13:20:42
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Re: Конвертер OSM -> MP
ну я делал на перле, поэтому только перл
пока вот: http://gpsmapsearch.com/osm/PolygonTree.pm
Ууууу.... Она еще и кучу перловых приблуд юзает
Блин, ну не осваивать же ради этого перл с нуля
Лучше Постгисом займусь...
Offline
#754 2009-08-18 13:20:45
- Kotelnikov
- Member

- From: Krasnodar, RU
- Registered: 2009-05-07
- Posts: 2,854
- Website
Re: Конвертер OSM -> MP
Пилить-то давно можно: http://forum.openstreetmap.org/viewtopi … 841#p29841
Просто раньше это было ООЧЕНЬ медленно
Ну а теперь быстро, что не может не радовать. ![]()
1 000 000 points: 80% complete
Offline
#755 2009-08-18 14:25:09
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Re: Конвертер OSM -> MP
ну я делал на перле, поэтому только перл
пока вот: http://gpsmapsearch.com/osm/PolygonTree.pm
ОФФ. Люди, а подскажите, вожно ли вызвать из пхп-скрипта перловый скрипт, который воспользуется этой библиотекой? То есть передать перловому скрипту данные и получить от него результат?
Offline
#756 2009-08-18 14:36:34
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
ОФФ. Люди, а подскажите, вожно ли вызвать из пхп-скрипта перловый скрипт, который воспользуется этой библиотекой? То есть передать перловому скрипту данные и получить от него результат?
Конечно можно, надо на perl-е написать обертку к библиотеке, которая будет читать из STDIN координаты и отвечать в STDOUT попал/не_попал.
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#757 2009-08-18 14:50:38
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Re: Конвертер OSM -> MP
Конечно можно, надо на perl-е написать обертку к библиотеке, которая будет читать из STDIN координаты и отвечать в STDOUT попал/не_попал.
Ой... А не мог бы кто-нибудь помочь с этим? А то у меня с перлом ну вообще никак ![]()
Offline
#758 2009-08-18 15:16:20
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Ой... А не мог бы кто-нибудь помочь с этим? А то у меня с перлом ну вообще никак
Сделаю, когда liosha воткнет этот модуль в osm2mp. Нужен пример использования.
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#759 2009-08-18 15:37:45
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Offline
#760 2009-08-18 18:43:13
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Сделаю, когда liosha воткнет этот модуль в osm2mp. Нужен пример использования.
а там всё просто:
# подключаем библиотеку
use PolygonTree;
# создаём объект
my $bound = PolygonTree->new( [ [0,0], [2,0], [2,2], ........ ] );
# проверяем вхождение
if ( $bound->contains( [1,1] ) ) {
......
}Offline
#761 2009-08-18 21:45:22
- SegMar
- Member
- From: Grodno
- Registered: 2009-08-17
- Posts: 31
Re: Конвертер OSM -> MP
Блин хочу конвертнуть но ничего не выходит с этим Перлом.
на первой странице написано:
Для работы необходим Perl
И должны быть установлены модули Template-toolkit, Getopt::Long
- Ну установил я ActivePerl-5.10.0.1001-MSWin32-x86-283495
- Скачал Template-Toolkit-2.22 (а как это устанавливать и куда?) скопировал в папку c:\Perl\ , запустил Makefile.PL , понажимал Y , что то установилось
- нашел в инете модуль Long.pm (77.3 кб) и скопировал в папку c:\Perl\lib\Module\
- в командной строке вписал osm2mp.pl map.osm > map.mp (map.osm это переименованный map.xml)
и получил какуюто ошибку 21
Короче объясните чайнику, что я нето сделал?
И может кто-нибудь выложит эти Template-toolkit и Getopt::Long здесь? А то запарился в инете искать.
Offline
#762 2009-08-18 23:02:02
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Ну коль все просто, тогда так:
PolygonTree.pl
#!/usr/bin/perl -w
use PolygonTree;
my @poly;
while (<STDIN>) {
chop;
if ($_ eq '') {
last;
} else {
push @poly, [split];
};
};
# создаём объект
my $bound = PolygonTree->new(\@poly);
$|++; # включаем autoflush чтобы вывод отдавался сразу
while (<STDIN>) {
chop;
# проверяем вхождение
if ($bound->contains([split])) {
print "Y\n";
} else {
print "N\n";
};
};PolygonTree.php
<?php
class PolygonTree {
private $pipes;
function __construct($poly) {
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$this->process = proc_open('./PolygonTree.pl', $descriptorspec, $this->pipes);
foreach ($poly as $p) {
fwrite($this->pipes[0], join(' ', $p) . "\n");
};
fputs($this->pipes[0], "\n");
}
function contains($point) {
fputs($this->pipes[0], join(' ', $point). "\n");
$r = fgets($this->pipes[1]);
return substr($r, 0, 1) == 'Y'? True : False;
}
function __destruct() {
fclose($this->pipes[0]);
fclose($this->pipes[1]);
fclose($this->pipes[2]);
}
}
$pt = new PolygonTree(array(
array(1,1),
array(1,2),
array(2,2),
array(2,1),
array(1,1)
));
var_dump($pt->contains(array(0.5,0.5)));
var_dump($pt->contains(array(1.5,1.5)));
?>В виндах могут быть проблемы из за другого переноса строк и в proc_open, может быть по другому надо будет написать.
Что будет по производительности - непонятно.
liosha, в строку 25 вроде как закралась синтаксическая ошибка: unless $chain_ref->[0] ~~ $chain_ref->[-1];
Наверное вместо ~~ имелось ввиду == ? Мой перл такого оператора не знает.
Еще у GPC лицензия плохая, не совместимая с GPL. А с geos-ом, на котором я так понимаю postgis бегает мутить никто не пробовал?
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#763 2009-08-19 04:14:22
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Нет, там именно ~~ (smart match): http://perldoc.perl.org/perlsyn.html#Sm … -in-detail
Возможно, надо его как-то отдельно подключать.
Тонкостями лицензий пока не интересовался, а другой библиотеки для клипа не нашёл.
SegMar,
запусти ppm.bat из Perl/bin и ставь им
UPD.
Теперь конвертация Московской области с обрезкой по текущей границе (7760 точек) занимает ~45 минут, было больше часа. Основные тормоза вроде как из-за попыток обрезки каждого полигона, а домиков уже немало. ![]()
Как это эту обрезку соптимизировать - пока непонятно
Offline
#764 2009-08-19 05:07:03
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Нет, там именно ~~ (smart match): http://perldoc.perl.org/perlsyn.html#Sm … -in-detail
Возможно, надо его как-то отдельно подключать.
Просто нужен 5.10, а я как-то с 5.8 жил и не тужил. Ясно в общем.
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#765 2009-08-19 07:24:45
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Re: Конвертер OSM -> MP
Ну коль все просто, тогда так:
Спасибо! На следующей неделе буду пробовать.
Offline
#766 2009-08-19 10:02:46
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Сделал библиотечку для проверки попадания точки в полигон на основе B-дерева
Правда, работает только с недырявыми полигонами.
Добавил грубую проверку на попадание полигона в область - метод contains_polygon_rough.
Выдаёт 1 если попадает, 0 - если нет, undef - "c ходу непонятно".
Лежит там же: http://gpsmapsearch.com/osm/PolygonTree.pm
Offline
#767 2009-08-19 16:45:53
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Теперь та же Москва с тем же полигоном (7760 точек) собирается за 2 минуты 15 секунд
Жить можно ![]()
Offline
#768 2009-08-19 21:03:30
- Ivan Komarov
- Member

- Registered: 2008-10-02
- Posts: 1,050
Re: Конвертер OSM -> MP
А как насчет других регионов? Выкачивать "полные" описывающие прямоугольники?
Offline
#769 2009-08-20 04:57:32
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
По-хорошему надо бы поднять копию базы и уже из неё вытаскивать куски с нужными регионами.
А качать большие регионы через api не есть хорошо.
Offline
#770 2009-08-20 07:19:26
- Ezhick
- Member

- From: Moscow
- Registered: 2008-10-08
- Posts: 2,508
- Website
Re: Конвертер OSM -> MP
База будет. И, надеюсь, мне удастся присобачить к ней твою библиотеку и обертку, сделанную уважаемым Aleksandr Dezhin. Тогда проблем вытаскивать из нее куски не будет. Осталось закончить ремонт и вернуться жить домой ![]()
Offline
#771 2009-08-20 11:06:00
- MAXimall
- Member

- From: Moscow
- Registered: 2009-06-24
- Posts: 27
Re: Конвертер OSM -> MP
Сегодня обновил карту Москвы для навитела - пропал адресный поиск в Королеве и Долгопрудном. До этого поиск работал - сам обрисовывал границу Долгопрудного и после этого тестировал в навителе.
Offline
#772 2009-08-20 11:11:13
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Границу Долгопрудного я почикал, в смысле немного поправил и преобразовал в relation type=boundary, чего конвертер похоже не понимает. Наверное поэтому кто-то сделал Москве второй контур из одного полигона. Королев вроде как не трогал.
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#773 2009-08-20 11:39:51
- MAXimall
- Member

- From: Moscow
- Registered: 2009-06-24
- Posts: 27
Re: Конвертер OSM -> MP
Да похоже дело в этом, мудрёные отношения конвертер не понимает. Границы долгопрудного я рисовал по простому - через place=town и королев если мне память не изменяет был сделан также.
Offline
#774 2009-08-20 11:51:21
- Aleksandr Dezhin
- Member

- From: Msk
- Registered: 2008-05-25
- Posts: 2,109
- Website
Re: Конвертер OSM -> MP
Каюсь, Королев наверное тоже я почикал, когда из него Юбилейный вырезал.
[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода
Offline
#775 2009-08-20 12:27:49
- liosha
- Member

- From: Moscow
- Registered: 2008-03-04
- Posts: 8,447
- Website
Re: Конвертер OSM -> MP
Москву восстанавливал я ![]()
Границы городов из релейшенов не достаются и в ближайшем времени вряд ли будут.
По той простой причине, что целостность релейшенов ни один софт не поддерживает, а от неполной границы толку мало.
А вот сделать обрезку карты по релейшену - о таком подумываю.
Offline