User:Tagtheworld/Sprachen und Techniken

From OpenStreetMap Wiki
Jump to: navigation, search


Techniken


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.
[[1]]


hier will ich verschiedene Techniken vorstellen, deren Einsatz mich interessieren.

osmconvert; Osmfilter, usw.

PHP Ruby

Perl


osmconvert  --drop-version --drop-author --hash-memory=4096 --max-objects=1000000000 --all-to-nodes --emulate-osmosis  --out-o5m germany.osm.pbf > germany-Z.o5m
osmfilter --keep= --keep-nodes="amenity=restaurant" germany-Z.o5m> germany-R.o5m
osmconvert  germany-R.o5m --csv-separator="," --csv="@id @lon @lat name cuisine addr:city addr:postcode addr:street addr:housenumber phone email website contact:phone contact:email contact:website" --csv-headline --out-csv> restauant.csv


http://forum.openstreetmap.org/viewtopic.php?pid=365034#p365034

Die osmconvert-Zeile lässt sich noch verkürzen:
--drop-author ist in --drop-version schon drin.
--hash-memory ist vermutlich nicht notwendig, so hohe Objekt-IDs gibt es bei der Input-Datei noch nicht.
--emulate-osmosis hat nur bei XML-Ausgabe-Format Auswirkungen.
--out-o5m ist überflüssig, wenn man -o= verwendet.

osmconvert --drop-version --max-objects=1000000000 --all-to-nodes germany.osm.pbf -o=germany-Z.o5m
osmfilter --keep="amenity=restaurant" germany-Z.o5m -o=germany-R.o5m
osmconvert germany-R.o5m --csv-separator="," --csv="@id @lon @lat name cuisine addr:city addr:postcode addr:street addr:housenumber phone email website contact:phone contact:email contact:website" --csv-headline -o=restauant.csv



mit Ruby / ein Beispiel von User Suncobald

cf: http://forum.openstreetmap.org/viewtopic.php?pid=364748#p364748 http://pastebin.com/apT3wYmF


    require 'open-uri'
    require "net/http"
    require 'rexml/document'
     
    def query_overpass(object_type, left,bottom,right,top, key, value)
       base_url = "http://www.overpass-api.de/api/xapi?"
       query_string = "#{object_type}[bbox=#{left},#{bottom},#{right},#{top}][#{key}=#{value}]"
       url = "#{base_url}#{URI.encode(query_string)}"
       resp = Net::HTTP.get_response(URI.parse(url))
       data = resp.body
       return data
    end
     
    overpass_result = REXML::Document.new(query_overpass("node", 7.1,51.2,7.2,51.3,"amenity","restaurant|pub|ice_cream|food_court|fast_food|cafe|biergarten|bar|bakery|steak|pasta|pizza|sushi|asia|nightclub"))
     
    overpass_result.elements.each('osm/node') {|x|
      if !x.elements["tag[@k='name']"].nil?
        print x.elements["tag[@k='name']"].attributes["v"]
      end
      print " | "
     
      if !x.elements["tag[@k='addr:postcode']"].nil?
        print x.elements["tag[@k='addr:postcode']"].attributes["v"]
        print ", "
      end
      if !x.elements["tag[@k='addr:city']"].nil?
        print x.elements["tag[@k='addr:city']"].attributes["v"]
        print ", "
      end
      if !x.elements["tag[@k='addr:street']"].nil?
        print x.elements["tag[@k='addr:street']"].attributes["v"]
        print ", "
      end
      if !x.elements["tag[@k='addr:housenumber']"].nil?
        print x.elements["tag[@k='addr:housenumber']"].attributes["v"]
      end
      print " | "
      print x.attributes["lat"]
      print " | "
      print x.attributes["lon"]
      print " | "
      if !x.elements["tag[@k='website']"].nil?
        print x.elements["tag[@k='website']"].attributes["v"]
      end
      print " | "
      if !x.elements["tag[@k='amenity']"].nil?
        print x.elements["tag[@k='amenity']"].attributes["v"]
        print " | "
      end
      puts
    }

die Resultate koennen gespeichert werden wie folgt:


1) Install the mysql2 gem:

gem install mysql2

2) Install mysql on your local machine. If you already have it installed(which I assume you do), then start the mysql server.

3) Retrieve, insert, or create stuff:

require 'mysql2'

begin
  client = Mysql2::Client.new(:host => "localhost", :username => "root")
  client.query("USE my_db")
  results = client.query("SELECT * FROM people")

  results.each do |row|
    puts row['name']
  end

  client.query("INSERT INTO people(name, info) VALUES('Diane', '7 8
9')")
  results = client.query("SELECT * FROM people")

  results.each do |row|
    puts "#{row['id']} #{row['name']} #{row['info']}"
  end

rescue Mysql2::Error => e
  puts e.errno
  puts e.error
ensure
  client.close if client
end


Another way using the Sequel gem:

$ gem install sequel
$ gem install mysql

=====>

require 'sequel'
require 'mysql'

DB = Sequel.connect('mysql://root:@localhost/my_db')
#Or more generally: mysql://user:password@localhost/db_name

#select * from people:
p DB[:people].select.to_a

#Create a table:
DB.create_table :dogs do
  primary_key :id
  String      :name, :size => 50
  Integer     :age
end

#Create a DataSet for the dogs table:
dogs = DB.from(:dogs)

#Use the DataSet to insert a new row into the table:
dogs.insert(
  :name => "Ralph",
  :age  => 10,
)

p dogs.select.to_a

--output:--
[{:id=>1, :name=>"Ralph", :age=>10}]

Report post Edit Delete Reply with quote
Re: storing a result in mysql-database - how to ?
54404bcac0f45bf1c8e8b827cd9bb709?d=identicon&s=25 7stud -- (7stud)
on 2014-06-11 02:53


Another way with DataMapper:


$ gem install dm-mysql-adapter
$ gem install data_mapper

====>


require 'data_mapper'

DataMapper.setup(:default, 'mysql://root:@localhost/my_db')
#mysql://user:password@hostname/database_name'

#Define a table named cat*s*:
class Cat
  include DataMapper::Resource

  property :id,       Serial #An auto-increment integer key
  property :name,     String #A varchar type string, for short strings
  property :breeding, Text   #For longer strings
end

#Check all defined tables for validity:
DataMapper.finalize

#Create all the tables you defined:
DataMapper.auto_migrate!  #drops table first if it already exists!

#Insert a row in the cats table:
my_cat = Cat.create(
  :name     =>  "Fluffy",
  :breeding =>  "Lot's of breeding history here.."
)

p Cat.all   #=>[#<Cat @id=1 @name="Fluffy" @breeding=<not loaded>>]

my_cat.name = "Roger"
my_cat.save

p Cat.all  #=>[#<Cat @id=1 @name="Roger" @breeding=<not loaded>>]


Perl


OsmDB.pm - what it does for us;

   Install mysql server
   change root password (maybe create user/password for osm use)
   create osmdb.ini in program folder and put in two lines (user=name AND password=abc)
   create database(s) (tables, indexes etc. will be handled by osmDB.pm)
   Install perl DBI module
   put osmDB.pm in module folder (like osm.pm)


   cf.     http://wiki.openstreetmap.org/wiki/OsmDB.pm


OSM::Tree

Open Street Map ist ein offenes System zum Aufzeichnen und Verwalten von Straßenkarten. Ein Form des Exports sind XML basierte Dateien, in denen die Karten als Koordinatenlisten abgelegt sind. OSM::Tree kann diese Dateien lesen, schreiben und modifizieren. Es fuktioniert als "standalone" Modul, benutzt aber XML::Parser und Math::Polygon , wenn es verfügbar ist.

jan tappenbeck osm@tappenbeck.net http://www.topeg.de/ -> Perl > Module > osm::tree http://www.topeg.de/public/perl/modules/osm_tree


OpenStreetMap - Overpass-Api Data Query (Linux, OS X, Windows) opaQuery.pl ist ein kleines, aber doch recht mächtiges Perl-Programm für Windows, Linux und OS X. Das Utility benutzt das Overpass-Api, und hier die Overpass-QueryLanguage (QL), um Daten aus der OpenStreetMap-Datenbank abzufragen. Das Tool wird von der Kommandozeile (Terminal, Konsole) aus benutzt und kann auch in automatisierten Batchabläufen eingesetzt werden.

Die opaQuery.pl stammt von user KLAUS TOCKLOTH

freizeitkarte-osm.de freizeitkarte@googlemail.com http://www.freizeitkarte-osm.de/ KLAUS TOCKLOTH freizeitkarte-osm.de freizeitkarte@googlemail.com http://www.freizeitkarte-osm.de/


opaQuery.pl

opaQuery.pl a tiny but powerful tool to work with Overpass-Api, cf http://easyclasspage.de/maptools/seite-2.html

und hier die Overpass-QueryLanguage (QL), um Daten aus der OpenStreetMap-Datenbank abzufragen. Das Tool wird von der Kommandozeile (Terminal, Konsole) aus benutzt und kann auch in automatisierten Batchabläufen eingesetzt werden.

http://easyclasspage.de/maptools/seite-2.html

man kann opaQuery.pl sehr unterschiedlich benutzen: - als Vorlage zur Erstellung / Erweiterung eines speziellen Programms - als Teil deiner Toolchain

Letzteres paßt dann ganz gut zu einer generellen Unix-Philosphie von "vielen kleinen Programmen die man intelligent verkettet“. Das Tool opaQuery.pl erzeugt eine XML-Datei, die du „leicht" mit einem weiterem Programm weiterverarbeiten kannst. Dies könnte z.B. wiederum ein Perl-Programm sein, wo du die XML-Datei z.B. über das Modul „XML::Simple“ wieder einliest und nach deinen Vorstellungen verarbeitest. Was für dich optimal ist, hängt stark von deinen Zielen ab. Aber vielleicht hilft dir das schon …

Dies gibt dir die Programmhilfe aus: perl opaQuery.pl

Und dies fragt alle Nodes des Typs „amenity“ für den Grossraum Hamburg ab: perl opaQuery.pl '[timeout:180]; node ["amenity"] (53.5, 9.5, 53.8, 10.4); out meta;'


Zit: der Autor von opaQuery.pl - Klaus.


PostgreSQL at openSuSE 13.1:

how to start and configure PostgreSQL at openSuSE 13.1:

If you really want to set postgresql "DATADIR" to an other directory (for example */home/postgres92/data*) it's important to create this directory and change the owner of this directory to user "postgres":

Code:


mkdir -p /home/postgres92/data


Code:


chown postgres:postgres /home/postgres92/data


To start the postgresql server type in as user root:

Code:


systemctl start postgresql.service


To stop the postgresql server just type in as user root:

Code:


systemctl stop postgresql.service


You can enable postgresql server so postgresql server will start on every boot:

Code:


systemctl enable postgresql.service


"pgadmin3" is a good GUI program for postgresl.


die Installation der Overpass-Api

Der Entwickler Roland Olbrich am 11.6.14

Meine generelle Empfehlung wäre: - ein tar.gz werde ich am Freitag auf overpass-api.de/misc mit der aktuellen Version ablegen - dieses tar.gz lässt sich mit "configure" - "make install" installieren, es muss dann nur Expat vorhanden sein. - Googlen nach "expat devel opensuse" liefert http://software.opensuse.org/package/libexpat-devel (sieht von außen nach einer brauchbaren Quelle für das RPM aus), aber ich kann das so spontan nicht testen.

Es tut mir leid, erst einmal keine echte Lösung zu haben, aber über Rückmeldung zu dem obigen Ansatz freue ich mich, ggf. gleich direkt nach wiki.osm.org/wiki/Overpass_API/install


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.
[[2]]