You are not logged in.

Announcement

*** NOTICE: forum.openstreetmap.org is being retired. Please request a category for your community in the new ones as soon as possible using this process, which will allow you to propose your community moderators.
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

liosha wrote:

Сделал библиотечку для проверки попадания точки в полигон на основе B-дерева  cool
Правда, работает только с недырявыми полигонами.

Проверка миллиона точек с полигоном из 1000 рёбер заняла ~40 секунд (P3-3000).
Буду прикручивать к конвертеру  smile

Т.е. уже можно рисовать границы краев и областей, дабы потом по ним пилить карты? smile


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

liosha wrote:

ну я делал на перле, поэтому только перл  smile
пока вот: http://gpsmapsearch.com/osm/PolygonTree.pm

Ууууу.... Она еще и кучу перловых приблуд юзает sad Блин, ну не осваивать же ради этого перл с нуля sad Лучше Постгисом займусь...

Offline

#754 2009-08-18 13:20:45

Kotelnikov
Member
From: Krasnodar, RU
Registered: 2009-05-07
Posts: 2,854
Website

Re: Конвертер OSM -> MP

liosha wrote:

Пилить-то давно можно: http://forum.openstreetmap.org/viewtopi … 841#p29841
Просто раньше это было ООЧЕНЬ медленно

Ну а теперь быстро, что не может не радовать. smile


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

liosha wrote:

ну я делал на перле, поэтому только перл  smile
пока вот: 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

Ezhick wrote:

ОФФ. Люди, а подскажите, вожно ли вызвать из пхп-скрипта перловый скрипт, который воспользуется этой библиотекой? То есть передать перловому скрипту данные и получить от него результат?

Конечно можно, надо на 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

Aleksandr Dezhin wrote:

Конечно можно, надо на perl-е написать обертку к библиотеке, которая будет читать из STDIN координаты и отвечать в STDOUT попал/не_попал.

Ой... А не мог бы кто-нибудь помочь с этим? А то у меня с перлом ну вообще никак sad

Offline

#758 2009-08-18 15:16:20

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

Ezhick wrote:

Ой... А не мог бы кто-нибудь помочь с этим? А то у меня с перлом ну вообще никак sad

Сделаю, когда liosha воткнет этот модуль в osm2mp. Нужен пример использования.


[ Проверка границ и НП | Дампы | Валидатор рек | Кое-что ещё ]
- Нет! Не надо пытаться. Делай. Или не делай. Не надо пытаться. (c) Йода

Offline

#759 2009-08-18 15:37:45

Ezhick
Member
From: Moscow
Registered: 2008-10-08
Posts: 2,508
Website

Re: Конвертер OSM -> MP

Заранее огромное спасибо!

Offline

#760 2009-08-18 18:43:13

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

Aleksandr Dezhin wrote:

Сделаю, когда 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 минут, было больше часа. Основные тормоза вроде как из-за попыток обрезки каждого полигона, а домиков уже немало. smile
Как это эту обрезку соптимизировать - пока непонятно

Offline

#764 2009-08-19 05:07:03

Aleksandr Dezhin
Member
From: Msk
Registered: 2008-05-25
Posts: 2,109
Website

Re: Конвертер OSM -> MP

liosha wrote:

Нет, там именно ~~ (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

Aleksandr Dezhin wrote:

Ну коль все просто, тогда так:

Спасибо! На следующей неделе буду пробовать.

Offline

#766 2009-08-19 10:02:46

liosha
Member
From: Moscow
Registered: 2008-03-04
Posts: 8,447
Website

Re: Конвертер OSM -> MP

liosha wrote:

Сделал библиотечку для проверки попадания точки в полигон на основе B-дерева  cool
Правда, работает только с недырявыми полигонами.

Добавил грубую проверку на попадание полигона в область - метод 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 секунд
Жить можно  cool

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

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

Москву восстанавливал я cool

Границы городов из релейшенов не достаются и в ближайшем времени вряд ли будут.
По той простой причине, что целостность релейшенов ни один софт не поддерживает, а от неполной границы толку мало.

А вот сделать обрезку карты по релейшену - о таком подумываю.

Offline

Board footer

Powered by FluxBB