Нда, посмотрел - это уже обсуждалось, только добавлять дополнительный тэг.
Чего не пойму, так если этого нет в gpsmapedit , то с его помощью не получится сделать адресный поиск для гармина? Как это вообще тогда делается?
очень даже получается
http://4pda.ru/forum/index.php?showtopic=70509&view=findpost&p=2032230
(нужно зарегистрироваться)
ó ìàïïåðà åñòü îøèáêà: R005:Maximum allowed NODID value is 1048575
ñ RoadID íàâåðíîå òî æå ñàìîå
20 ??? 0xfffff. ? ??? ??? ?? ??? “???” ?
20 áèò 0xfffff. À æïñìàïåäèò ñëåäèò çà ýòèì “îãðàíè÷åíèåì” ?
äà, ñëåäèò
ñîáñòâåííî, âîò ïðîñòåíüêèé “ïåðåíóìåðîâûâàòåëü”
my $cnode = 1;
my %nodes;
my $croad = 1;
my %roads;
while (<>) {
s/^RoadID=(\d+)/sprintf "RoadID=%d", reroad($1)/ie;
s/^Nod(\d+)=(\d+),(\d+),(\d+)/sprintf "Nod$1=$2,%d,$4", renode($3)/ie;
s/^Nod=(\d+)/sprintf "Nod=%d", renode($1)/ie;
s/^TraffPoints=(\d+),(\d+),(\d+)/sprintf "TraffPoints=%d,%d,%d", renode($1), renode($2), renode($3)/ie;
s/^TraffRoads=(\d+),(\d+)/sprintf "TraffRoads=%d,%d", reroad($1), reroad($2)/ie;
print;
}
sub renode {
if (!$nodes{$_[0]}) { $nodes{$_[0]} = $cnode++; }
return $nodes{$_[0]};
}
sub reroad {
if (!$roads{$_[0]}) { $roads{$_[0]} = $croad++; }
return $roads{$_[0]};
}
usm78-gis:20 áèò 0xfffff. À æïñìàïåäèò ñëåäèò çà ýòèì “îãðàíè÷åíèåì” ?
äà, ñëåäèò
ñîáñòâåííî, âîò ïðîñòåíüêèé “ïåðåíóìåðîâûâàòåëü”
Ok, ???. ? ??? ? ??? ??? ?? ???, ? ??? ?? ?? ??? ??? ?? ???, ? ??? ??? ? ?? ???
скоро будет индексация улиц
как выяснилось, ничего особо сложного там нет
используется схема
is_in=City,Region,Country
is_in=City,Country
is_in=City
единственная проблема - города, которые есть в is_in, но нет на самой карте, придётся как-то добавлять
Теперь сконвертированные карты выкладываются и адресным поиском.
Глюки есть, но пока сложно сказать, кто виноват: конвертер или маппер.
http://gpsmapsearch.com/osm/mp/
Версия 0.60
http://gpsmapsearch.com/osm/osm2mp_v060.zip
- добавлен наконец поиск по улицам (из тега is_in)
- добавлены опции командной строки
- добавлен список приоритетных тегов для Label
- разные мелкие фиксы
не первый, таких конкурентов полно
роутинга у него пока нет, а самые пляски как раз там начинаются
Почему бы Вам не написать Веб интерфейс к скрипту? Я чтобы его запустить загрузил на сервер, так как искать, устанавливать, допольнительные Perl модули под Windows во первых достаточно долго, во вторых совершенно недоступно для “чайника”
Ведь там нет ничего сложного: написать форму и выплянуть нужный “header”
Я бы сам написал, только совершенно подзабыл Perl, больше в последние годы PHP пользую.
Странный вопрос… Кому интересно будет, тот напишет. Я в этом смысла не вижу.
Дополнительные модули под виндой ставятся без проблем через Perl\bin\ppm.bat
Версия 0.65
http://gpsmapsearch.com/osm/osm2mp_v065.zip
вроде бы работает достаточно стабильно
- добавлена обрезка по прямоугольнику
- добавлена адресация POI
- полностью переделана обработка запретов
- ну и по мелочи…
начал делать обработку береговой линии
с Онежским озером уже справляется
http://gpsmapsearch.com/osm/mp/karelia.rar
??? ??? ??? ??? ??? is_in ??.
??? ??? ? ??? ??? (r49) ?? svn:
diff -uN old/is_in.cfg new/is_in.cfg
--- old/is_in.cfg 1970-01-01 03:00:00.000000000 +0300
+++ new/is_in.cfg 2009-03-11 20:08:17.000000000 +0300
@@ -0,0 +1,20 @@
+# name country region city append
+
+Altai& #20;Krai,& #20;Russia ?????? ?????????& #20;????
+Russia,& #20;Altai& #20;Krai ?????? ?????????& #20;????
+Altai& #20;Republic,& #20;Russia ?????? ??????????& #20;?????
+Amur& Oblast,& #20;Russia ?????? ????????& #20;???????
+Archangelsk& #20;oblast,Russia ?????? ?????????????& #20;???????
+Archangelsk& #20;Oblast,Russia ?????? ?????????????& #20;???????
+Archangelsk& #20;Russia ?????? ?????????????& #20;??????? ???????????
+Astrakhan& #20;Oblast,& #20;Russia ?????? ????????????& #20;???????
+Russia,& #20;Astrakhan& #20;Oblast ?????? ????????????& #20;???????
+Belgorod& #20;Oblast,& #20;Russia ?????? ????????????& #20;???????
+
+Moscow& #20;Oblast,& #20;Russia ?????? ??????????& #20;???????
+Moscow,,Russia ?????? ?????? ??????
+?????? ?????? ?????? ??????
+??????,& #20;Russia ?????? ?????? ??????
+??????,& #20;?????? ?????? ?????? ??????
+??????????& #20;???. ?????? ??????????& #20;???????
+??????????& #20;??????? ?????? ??????????& #20;???????
diff -uN old/osm2mp.pl new/osm2mp.pl
--- old/osm2mp.pl 2009-03-11 20:09:43.000000000 +0300
+++ new/osm2mp.pl 2009-03-11 20:40:24.000000000 +0300
@@ -20,6 +20,7 @@
my $cfgpoi = "poi.cfg";
my $cfgpoly = "poly.cfg";
my $cfgheader = "header.tpl";
+my $cfgisin = "is_in.cfg";
my $codepage = "1251";
@@ -72,6 +73,7 @@
"cfgpoi=s" => \$cfgpoi,
"cfgpoly=s" => \$cfgpoly,
"header=s" => \$cfgheader,
+ "cfgisin=s" => \$cfgisin,
"mapid=s" => \$mapid,
"mapname=s" => \$mapname,
"codepage=s" => \$codepage,
@@ -122,6 +124,7 @@
--cfgpoi <file> poi config [$cfgpoi]
--cfgpoly <file> way config [$cfgpoly]
--header <file> header template [$cfgheader]
+ --cfgisin <file> is_in config [$cfgisin]
--bbox <bbox> comma-separated minlon,minlat,maxlon,maxlat
--osmbbox use bounds from .osm [$onoff[$osmbbox]]
@@ -174,6 +177,17 @@
}
close CFG;
+my %isinmap;
+open CFG, $cfgisin;
+while (<CFG>) {
+ if ( (!$_) || /^\s*[\#\;]/ ) { next; }
+ chomp;
+ my ($n, $cntr, $reg, $city, $append) = split /\s+/;
+
+ $isinmap{convert_string($n)} = [ convert_string($cntr), convert_string($reg), convert_string($city), convert_string($append) ];
+}
+
+
my %polytype;
@@ -284,9 +298,16 @@
$poiphone = convert_string($2) if ($1 eq "phone" );
if ($1 eq "is_in") {
- ($poicity, my $region, my $country) = split (/,/, convert_string($2));
- $poiregion = $region if ($region);
- $poicountry = $country if ($country);
+ if(defined($isinmap{$2})){
+ $poicity=$isinmap{$2}[2] if (("$poicity" eq "")&&($isinmap{$2}[2] ne "")) ;
+ $poiregion=$isinmap{$2}[1] if (("$poiregion" eq "")&&($isinmap{$2}[1] ne "")) ;
+ $poicountry=$isinmap{$2}[1] if (("$poicountry" eq "")&&($isinmap{$2}[0] ne "")) ;
+ $poistreet="$poistreet $isinmap{$2}[1]" if (("$poistreet" ne "")&&($isinmap{$2}[3] ne ""));
+ }else{
+ ($poicity, my $region, my $country) = split (/\s*,\s*/, convert_string($2));
+ $poiregion = $region if ($region);
+ $poicountry = $country if ($country);
+ }
}
next;
}
@@ -1124,11 +1145,27 @@
print "[POLYLINE]\n";
printf "Type=%s\n", $type[1];
printf "EndLevel=%d\n", $type[4] if ($type[4] > $type[3]);
- print "Label=$name\n" if ($name);
+#- print "Label=$name\n" if ($name);
print "DirIndicator=1\n" if ((split /\,/, $rp)[2]);
- print "; is_in = $risin{$road}\n" if ($risin{$road});
- my ($city, $region, $country) = split (/,/, $risin{$road});
+#- print "; is_in = $risin{$road}\n" if ($risin{$road});
+ my ($city, $region, $country) = split (/\s*,\s*/, $risin{$road});
+ if ($risin{$road}){
+ print "; is_in = $risin{$road}\n";
+ if(defined($isinmap{$risin{$road}})){
+ ($country, $region, $city) = ($isinmap{$risin{$road}}[0], $isinmap{$risin{$road}}[1], $isinmap{$risin{$road}}[2]);
+ print "; mapped to = $city, $region, $country\n";
+ if($isinmap{$risin{$road}}[3] ne ""){
+ print "; name changed from \"$name\" to \"$name $risin{$road}}[3]\" \n";
+ $name = "$name $risin{$road}}[3]";
+ }
+ #}else{
+ # my ($city, $region, $country) = split (/,/, $risin{$road});
+ }
+ }
+
+
+ print "Label=$name\n" if ($name);
printf "CityName=%s\n", $city ? $city : $defaultcity;
print "RegionName=$region\n" if ($region);
@@ -1254,6 +1291,7 @@
$str =~ s/\/\;/\//gi;
$str =~ s/\\\;/\\/gi;
$str =~ s/\
\;/-/gi;
+ $str =~ s/\\;/ /gi;
$str =~ s/\&#\d+\;/_/gi;
??? ? ??? is_in.cfg (??? ??? ??? ? utf-8, ??? ??? ??? ??? ? ??? ??? ???) ??? ??? ??? is_in ? ?? ??? (???, ???, ???, ??? ? ??? ???)
??? ? ???-?? ?? ??? ??? ??? - ?? ?? ??? ??? “& #20;” (??? ??? & ? #20; ??? ? ? ??? ??? ???.. ??? ? ?? ??? ?? ??? ??? ??? ??? ) ??? ???-?? ??? ???, ?? ??? ? ?? ??? ???. ??? ??? ??? ??? ??? ??? ???:
??? ???., ?. ???, ?? ???
??? ???., ?. ???, ???. ???, ?? ???
??? ???., ?. ???, ???. ???, ?? ???
??? ???., ?. ???, ???. ???, ?? ???
???, ??? ?? ??? ??? ? OSM? (??? ??? ??? ??? ??? ??? …)
P.S. ? ??? ?? ??? ??? ??? ??? ??? is_in, ??? ??? ??? ?? ? ??? ???.
— ??? ?? 12.03.2009 20:15 (MSK)
??? ? ??? ??? ???
+ ($poicity, my $region, my $country) = split (/\s+,\s+/, convert_string($2));
??
+ ($poicity, my $region, my $country) = split (/\s*,\s*/, convert_string($2));
??? ??? ??? ??-?? ??? ??? ??? is_in ??? POI.
Приветствую!
пара наблюдений/вопросов:
- На карте Карелии водоемы, прорисованные в osm как coastline, в mp - дублированы: полигон 0x3c aka “large lake”, на который наложены куски полилинии 0x15 aka “shoreline of water body”. Это так задумано, это фича или это баг?
- Мелкие озера, которые в osm помечены как water, рисуются как 0x46 aka “large river”. Вопрос тот же
- На googl’e в репозитории актуальная версия? Неокортекс все чешется порезать полигоны границами карты, да руки не доходят
С уважением!
- На карте Карелии
Южной или восточной ? 8)
- Мелкие озера, которые в osm помечены как water, рисуются как 0x46 aka “large river”.
ИМХО это баг.
порезать полигоны границами карты, да руки не доходят
Эээ, я все собираюсь правильно перезалить границу ЛО, но никак не могу ее найти в своих архивах.