Ahoj! Tak jsem si trochu hral s konverzi... a myslim ze uspesne. Data od Help Service jsou _mooc_ pekna. (I kdyz asi o 100 metru posunuta proti osm, coz jde snadno opravit).
Konverzni skript je v priloze, vysledek starsi verse je na http://atrey.karlin.mff.cuni.cz/~pavel/outgoing/result.osm.bz2 Ten osm vypada zhruba: ... teda pro plny data je posledni way cislo 212605. Vyhovuje takhle source odkaz? Pavel <?xml version='1.0' encoding='UTF-8'?> <osm version='0.5' generator='shpupload'> <node id="-2" lon="14.669745" lat="50.014165"><tag k="created_by" v="shpupload"/><tag k="source" v="HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz"/></node> <node id="-3" lon="14.669612" lat="50.011872"><tag k="created_by" v="shpupload"/><tag k="source" v="HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz"/></node> <node id="-4" lon="14.669543" lat="50.010974"><tag k="created_by" v="shpupload"/><tag k="source" v="HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz"/></node> ... <way id='-1056'> <tag k="created_by" v="shpupload"/> <tag k="highway" v="motorway"/> <tag k="name" v="_D1"/> <tag k="ref" v="D1"/> <tag k="source" v="HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz"/> <nd ref='-1057' /> <nd ref='-1058' /> <nd ref='-1059' /> <nd ref='-1060' /> <nd ref='-1061' /> <nd ref='-1062' /> <nd ref='-1063' /> <nd ref='-1064' /> <nd ref='-1065' /> <nd ref='-1066' /> <nd ref='-1067' /> <nd ref='-1068' /> <nd ref='-1069' /> <nd ref='-1070' /> </way> </osm> Pavel -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
#!/usr/bin/perl use Geo::ShapeFile; open(OUT, ">out.osm"); print OUT "<?xml version='1.0' encoding='UTF-8'?>\n"; print OUT "<osm version='0.5' generator='shpupload'>\n"; open(OUTWAY, ">outway.osm"); $nodeid = -1; createCoasts("sil_cz12x.shx", 49.996, 14.756, 10.1); print OUTWAY "</osm>\n"; sub createCoasts(){ my ($Filename, $Lat, $Long, $Size) = @_; $X1 = $Long - $Size; $X2 = $Long + $Size; $Y1 = $Lat - $Size; $Y2 = $Lat + $Size; open(LOG, ">log.txt"); print LOG "Area $X1 to $X2, $Y1 to $Y2\n"; my $shapefile = new Geo::ShapeFile($Filename); printf "%d shapes\n", $shapefile->shapes(); for(1 .. $shapefile->shapes()) { $shapenum = $_; my $shape = $shapefile->get_shp_record($shapenum); $LastValid = 0; print LOG "Shape\n"; foreach $Point($shape->points()){ $Long = $Point->X(); $Lat = $Point->Y(); $InArea = ($Lat > $Y1 && $Lat < $Y2 && $Long > $X1 && $Long < $X2); if($InArea){ if (!$LastValid) { my %record = $shapefile->get_dbf_record($shapenum); print %record; print "\n"; print OUTWAY "<way id='$nodeid'>\n"; print OUTWAY " <tag k=\"created_by\" v=\"shpupload\"/>\n"; $kod = $record{'HSKOD'}; if (($kod =~ "S1") || ($kod =~ "S1T")) { print OUTWAY " <tag k=\"highway\" v=\"primary\"/>\n"; } if (($kod =~ "S2") || ($kod =~ "S2T")) { print OUTWAY " <tag k=\"highway\" v=\"secondary\"/>\n"; } if ($kod =~ "D[DR].*") { print OUTWAY " <tag k=\"highway\" v=\"motorway\"/>\n"; } if ($kod =~ ".*T") { print OUTWAY " <tag k=\"tunnel\" v=\"true\"/>\n"; print OUTWAY " <tag k=\"layer\" v=\"-1\"/>\n"; } print OUTWAY " <tag k=\"name\" v=\"$record{'NAZEV'}_$record{'OZNACENI'}\"/>\n"; print OUTWAY " <tag k=\"ref\" v=\"$record{'OZNACENI'}\"/>\n"; if ($record{'POZNAMKA'}) { print OUTWAY " <tag k=\"note\" v=\"$record{'POZNAMKA'}\"/>\n"; } print OUTWAY " <tag k=\"source\" v=\"HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz\"/>\n"; $nodeid--; } $Node = uploadNode($Lat, $Long); printf LOG "Node #%d: %f, %f\n", $Node, $Lat, $Long; $LastNode = $Node; $CountB++; $LastValid = 1; } else { if ($LastValid) { print OUTWAY "</way>\n" } $LastValid = 0; } $CountA++; } if ($LastValid) { print OUTWAY "</way>\n" } } print "Uploading $CountB of $CountA\n"; print LOG "Complete\n"; close LOG; print "Upload complete\n"; } sub uploadNode(){ ($Lat, $Long) = @_; $Tags = "<tag k=\"created_by\" v=\"shpupload\"/>"; $Tags .= "<tag k=\"source\" v=\"HELP SERVICE - REMOTE SENSING spol. s r.o. http://www.bnhelp.cz\"/>"; $Node = sprintf("<node id=\"$nodeid\" lon=\"%f\" lat=\"%f\">$Tags</node>", $Long, $Lat); print OUTWAY " <nd ref='$nodeid' />\n"; $nodeid--; print OUT " $Node\n"; return($response); }
_______________________________________________ Talk-cz mailing list Talk-cz@openstreetmap.org http://lists.openstreetmap.org/cgi-bin/mailman/listinfo/talk-cz