[Talk-cz] D, I, II versus Planet071003
Pavel Machek
pavel na ucw.cz
Pondělí Říjen 15 13:58:50 UTC 2007
Ahoj!
> 0. Jachymova data obsahuji (zaokrouhleno na tisice): 14000 prvku coz je
> 22000 km.
> 1. Z planet071003 byly vytazeny highway [1]
> 2. pomoci obalove zony 50m na kazdou stranu vytvorena ochranna zona.
> 3. Jachymova data byla rozbita na usecky (184000 prvku)
> 4. A pote byla dotazovana vuci ochranne zone: [2]
>
> * z toho 142000 bylo shledano jako nic nekrizici (zelena)
>
> * a 42000 bylo shledano jako konfliktni (cervena)
>
> 5. data od Jachyma byla seskupena zpet podle puvodniho deleni na puvodnich
> 14000 prvku
Tak mam novou versi skriptu, naucil jsem ho vzit z jednoho .shp seznam
toho co uploadovat, a z druheho .shp seznam co vynechat, a zda se, ze
se chova slusne...
Pavel
#!/usr/bin/perl
use Geo::ShapeFile;
# ../shpupload; cat out.osm | cstocs il2 utf8 > result-full.osm
%excluded_nodes = {};
createExcludes("sil_cz12x-NE.shx");
open(OUT, ">out.osm");
print OUT "<?xml version='1.0' encoding='UTF-8'?>\n";
print OUT "<osm version='0.5' generator='shpupload'>\n";
%nodes = {};
$nodeid = -1;
$way = "";
createCoasts("sil_cz12x.shx", 50.0, 14.5, 0.5);
print OUT "</osm>\n";
sub createExcludes() {
my ($Filename) = @_;
my $shapefile = new Geo::ShapeFile($Filename);
printf "%d shapes excluded\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();
$Node = sprintf("lon=%f lat=%f", $Long, $Lat);
$excluded_nodes{$Node} = 1;
}
}
}
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();
$Node = sprintf("lon=%f lat=%f", $Long, $Lat);
$InArea = ($Lat > $Y1 && $Lat < $Y2 && $Long > $X1 && $Long < $X2) &&
!$excluded_nodes{$Node};
if($InArea){
if (!$LastValid) {
my %record = $shapefile->get_dbf_record($shapenum);
print %record;
print "\n";
$way .= "<way id='$nodeid'>\n";
$way .= " <tag k=\"created_by\" v=\"shpupload\"/>\n";
$kod = $record{'HSKOD'};
if (($kod =~ "S1") || ($kod =~ "S1T")) {
$way .= " <tag k=\"highway\" v=\"primary\"/>\n";
}
if (($kod =~ "S2") || ($kod =~ "S2T")) {
$way .= " <tag k=\"highway\" v=\"secondary\"/>\n";
}
if ($kod =~ "D[DR].*") {
$way .= " <tag k=\"highway\" v=\"motorway\"/>\n";
}
if ($kod =~ ".*T") {
$way .= " <tag k=\"tunnel\" v=\"true\"/>\n";
$way .= " <tag k=\"layer\" v=\"-1\"/>\n";
}
$way .= " <tag k=\"name\" v=\"$record{'NAZEV'}_$record{'OZNACENI'}\"/>\n";
$way .= " <tag k=\"ref\" v=\"$record{'OZNACENI'}\"/>\n";
if ($record{'POZNAMKA'}) {
$way .= " <tag k=\"note\" v=\"$record{'POZNAMKA'}\"/>\n";
}
$way .= " <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 OUT "$way</way>\n";
$way = "";
}
$LastValid = 0;
}
$CountA++;
}
if ($LastValid) {
print OUT "$way</way>\n";
$way = "";
}
}
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("lon=%f lat=%f", $Long, $Lat);
if ($nodes{$Node} < 0) {
$way .= " <nd ref='$nodes{$Node}' />\n";
} else {
$way .= " <nd ref='$nodeid' />\n";
$nodes{$Node} = $nodeid;
$Node = sprintf("<node id=\"$nodeid\" lon=\"%f\" lat=\"%f\">$Tags</node>", $Long, $Lat);
print OUT " $Node\n";
$nodeid--;
}
return($response);
}
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
Další informace o konferenci talk-cz