User:Tagtheworld/Sprachen und Techniken
Techniken
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
Overpass-Turbo.eu
viele Beispiele zu dem Abfrage-Editor in Overpass-Turbo:
https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example
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
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]]