User:Brogo

From OpenStreetMap Wiki
Jump to: navigation, search

Public-images-osm logo.svg

I support OSM by being a
member of the
OpenStreetMap Foundation

Are you?


I support the license
upgrade to ODbL v 1.0

ODbL-Supporter.png


Ein Hügel, von dem man nicht wisse, wie hoch er sei, beleidige die Vernunft und mache ihn unruhig. Ohne stetig die eigene Position zu bestimmen, könne ein Mensch sich nicht fortbewegen.

Alexander von Humboldt in Daniel Kehrmanns "Die Vermessung der Welt"


weitere Themen auf Unterseiten
OpenLayers Datenbankanbindung
Animation der zeitlichen Entwicklung
Kartenraster und Straßenverzeichnis


Werkzeug-Karten

Bounding-Box-Auswahl

Bei dem Umgang mit OSM-Daten kommt man immer wieder an einen Punkt, wo man ein bestimmtes Rechteck ausschneiden will, eine sogenannte Bounding-Box. Leider haben die unterschiedlichen Tools auch eine unterschiedliche Syntax für diese Bounding-Box, inkl. der Reihenfolge der Koordinaten. Ich habe nun eine Karte erstellt, mit der man ganz einfach mit der Maus und der STRG-Taste einen Bereich aufziehen kann und man bekommt im unteren Teil des Fensters den entsprechenden String für die Bounding-Box für die unterschiedlichen Anwendungen.

Bounding-Box-Auswahl

Anzahl der Tiles

Wenn man selbst Karten erstellt und diese auf einen normalen Webspace hochlädt, muß die Grenzen des Providers (Speicherplatz, Dateianzahl (!)) berücksichtigen. Um im Vorfeld abzuschätzen, wie groß ein Projekt wird, habe ich eine Karte erstellt, in der man mit der Maus und der STRG-Taste einen Bereich auswählen kann und dazu die gewünschten Zoomlevel einstellt. Alternativ kann man die Grenzen des Bereiches auch manuell eingeben. Als Ergebnis bekommt man die Anzahl der Tiles und des geschätzten (!) Speicherbedarf. Dabei ist zu beachten, daß die Tiles, je nach Filesystem auf dem sie liegen, deutlich mehr Speicherplatz benötigen können.

Berechnung Anzahl Tiles

Darstellung von WKT-Elementen

Wenn man mit PostGIS arbeitet bekommt man die Geometrien als WKB bzw WKT-Felder angezeigt. Das ist wenig anschaulich. Um diese zu visualieren, kann man ein GIS wie QuantumGIS oder OpenJUMP nutzen. Man kann die Geometrien aber auch einfach mit Openlayers darstellen. Auf meiner Seite gibt es ein Eingabefeld, in welches man den WKT-String einfügen kann und auf Tastendruck die Geometrei angezeigt bekommt.

Wenn man die String aus pgAdmin kopiert, erhält man am Anfang und am Ende Anführungszeichen, diese sind zu löschen.

Sind die Daten im WKT-Format gespeichert, kann man sie mit der Funktion ST_ASTEXT(geometrie) in WKT konvertieren.

Die Anwendung ist auf das Osmosis-Snapshot-Schema ausgelegt, in dem die Daten in EPSG4326-Projektion gespeichert werden. Hat man z.B. das osm2pgsql-Schema mit der Spherical Mercator projection (EPSG3857, bzw 900913), kann man sie mit ST_TRANSFORM(geometrie,4326) konvertieren.

Anzeige von WKT

Alte OpenStreetBugs

Die OpenStreetBugs sind ein tolles Tool um Fehler in der Karte zu markieren; insbesondere für Nicht-Mapper. Deswegen erwähnen wir das Tool ja auch gerne gegenüber Laien. Leider hängen dort viele Einträge schon seit mehreren Jahren ohne Bearbeitung rum. Das wirft kein gutes Licht auf uns.

Auf der Original-Seite gibt es keine zeitliche Auswahl und nicht in allen Texten steht ein Datum drin. Im Datenbank-Dump sind diese Daten aber enthalten. Es gibt für jeden Bug ein Erstellungsdatum und das Datum der letzten Bearbeitung.

Ich habe eine Karte erstellt, in der man alte OSB nach Erstellungsjahr (hier 2008-2010) selektieren kann.

Ich denke wir sollten das mal angehen und ein wenig entrümpeln. Für Bugs die einer Vor-Ort-Inspektion bedürfen, kann man ja seinen Sonntagsspaziergang danach planen


Mit Hilfe alter Karten die Lübecker Gänge einzeichnen

Lubeck 1910.jpg


Das Bild stammt aus http://commons.wikimedia.org/wiki/File:Map_lubeck_1910.jpg und ist Public Domain, darf also uneingeschränkt verwendet werden.


  • JOSM-Plugin 'PicLayer' muß installiert sein
  • Bild lokal speichern
  • Folgenden Text als Lubeck_1910.jpg.cal im gleichen Verzeichnis speichern
#JOSM PicLayer-Plugin Kalibrierdatendaten
#Mon Aug 30 21:45:10 CEST 2010
SCALEY=0.6199999999999992
INITIAL_SCALE=255.3708692976324
SCALEX=0.6199999999999992
POSITION_Y=7144833.63360013
POSITION_X=1189357.86341359
INITIAL_POS_y=7145357.29096396
INITIAL_POS_X=1189704.12603801
ANGLE=0.0

SHEARX=0.0
SHEARY=0.0
  • Datei über PicLayer-Menü öffnen (geht nur wenn bereits Daten geladen sind)
  • Im Ebenen-Menü Rechtsklick auf PicLayer-Ebene
  • Über 'Lade Bildeinstellungen' die cal-Datei öffnen
  • Bitte beachten, daß einige Viertel im zweiten Weltkrieg total zerstört wurden. Es ist daher im Zweifelsfall noch zu klären, ob die Gänge überhaupt noch existieren.

Erfassung von Knicks (Wallhecken)

barrier=hedge_bank

siehe DE:Tag:barrier=hedge bank

Mapnikdastellung

Darstellung der Entwicklung von OSM in 'meinem' Bereich

Ich wollte mal wissen, wie es aussieht, wenn man einen Zeitraffer von den Änderungen in OSM erstellt.

Ich habe das mal für den Bereich Lübeck, Ostholstein getan. Die Daten umfassen Januar 2007 bis September 2009. Das Ergebnis kann man sich hier ansehen (AVI, XVID, ca.4,7 MB)

Eine Erläuterung, wie ich vorgegangen bin findet sich hier

Hochladen vieler Tiles auf einen Webserver

Oft kommt es vor, daß jemand lokal Tiles für eine Online-Karte rechnet und diese dann auf einen Webserver hochladen will. Der Overhead von FTP ist bei einer Übertragung von vielleicht mehreren zigtausend oder noch mehr Dateien enorm. Daher bietet es sich an, die einzelnen tiles-Dateien in eine ZIP-Datei zu packen, diese hochzuladen und dort zu entpacken. Viele Webhoster bieten diese Möglichkeit über ein Webinterface an, doch es geht noch einfacher (sofern der Hoster die Funktion unterstützt).

Die vorherige Version nutzte das exec-Kommande, welches nicht alle Webhoster unterstüzen, deshalb habe ich nun hier eine andere Lösung gefunden.

Die komplette Verzeichnisstruktur zippen (ich habe 7-Zip benutzt, welches sich auch über die Kommandozeile steuern und skripten läßt) und hochladen. Folgende Datei als unzip.php erstellen (bei mir im Unterverzeichnis php).


<?php
/**
 * Unzip the source_file in the destination dir
 *
 * @param   string      The path to the ZIP-file.
 * @param   string      The path where the zipfile should be unpacked, if false the directory of the zip-file is used
 * @param   boolean     Indicates if the files will be unpacked in a directory with the name of the zip-file (true) or not (false) (only if the destination directory is set to false!)
 * @param   boolean     Overwrite existing files (true) or not (false)
 * 
 * @return  boolean     Succesful or not
 */
 
function unzip($src_file, $dest_dir=false, $create_zip_name_dir=true, $overwrite=true)
{
  if ($zip = zip_open($src_file))
  {
    if ($zip)
    {
      $splitter = ($create_zip_name_dir === true) ? "." : "/";
      if ($dest_dir === false) $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter))."/";
 
      // Create the directories to the destination dir if they don't already exist
      create_dirs($dest_dir);
 
      // For every file in the zip-packet
      while ($zip_entry = zip_read($zip))
      {
        // Now we're going to create the directories in the destination directories
 
        // If the file is not in the root dir
        $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/");
        if ($pos_last_slash !== false)
        {
          // Create the directory where the zip-entry should be saved (with a "/" at the end)
          create_dirs($dest_dir.substr(zip_entry_name($zip_entry), 0, $pos_last_slash+1));
        }
 
        // Open the entry
        if (zip_entry_open($zip,$zip_entry,"r"))
        {
 
          // The name of the file to save on the disk
          $file_name = $dest_dir.zip_entry_name($zip_entry);
 
          // Check if the files should be overwritten or not
          if ($overwrite === true || $overwrite === false && !is_file($file_name))
          {
            // Get the content of the zip entry
            $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
 
            file_put_contents($file_name, $fstream );
            // Set the rights
            chmod($file_name, 0777);
            echo "save: ".$file_name."<br />";
          }
 
          // Close the entry
          zip_entry_close($zip_entry);
        }      
      }
      // Close the zip-file
      zip_close($zip);
    }
  }
  else
  {
    return false;
  }
 
  return true;
}
 
/**
 * This function creates recursive directories if it doesn't already exist
 *
 * @param String  The path that should be created
 * 
 * @return  void
 */
function create_dirs($path)
{
  if (!is_dir($path))
  {
    $directory_path = "";
    $directories = explode("/",$path);
    array_pop($directories);
 
    foreach($directories as $directory)
    {
      $directory_path .= $directory."/";
      if (!is_dir($directory_path))
      {
        mkdir($directory_path);
        chmod($directory_path, 0777);
      }
    }
  }
}
 
$userpath = "/absoluter/pfad/zum/eigenen/webspace/";
$filename = $userpath.$_GET[file];
print $filename;
unzip($filename, $userpath, true, true);
 
?>

Nun ruft man die Datei mit php/unzip.php?file=dateiname.zip auf. Das Script entpackt die im Hauptverzeichnis liegende Zip-Datei und überschreibt gegebenenfalls die vorhandenen Dateien.

Leider klappt das nur mit einer gewissen Anzahl von Dateien. Bei mir kommt nach ca. 40.000 Dateien zu einem Timeout und das PHP-Script bricht ab. Leider ermöglicht mein Provider nicht die Erhöhung des Time-Out-Limits durch setzen von set_time_limit(900);.

Wichtig: Ohne weitere Einschränkungen ist die PHP-Datei von jedem ausführbar. Man sollte also darüber nachdenken, diese nach Benutzung wieder zu löschen oder durch Setzen entsprechender Rechte zu schützen.


Public domain
All my contributions to OpenStreetMap are released into the public domain. This applies worldwide.
In case this is not legally possible, I grant anyone the right to use my contributions for any purpose, without any conditions, unless such conditions are required by law.