[Talk-cz] dalnice, silnice I a II tridy: nyni v .osm formatu
Pavel Machek
pavel na ucw.cz
Pátek Říjen 12 13:45:39 UTC 2007
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
------------- další část ---------------
#!/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);
}
Další informace o konferenci talk-cz