[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