You are not logged in.
- Topics: Active | Unanswered
Announcement
Please create new topics on the new site at community.openstreetmap.org. We expect the migration of data will take a few weeks, you can follow its progress here.***
#1 2015-08-13 20:32:35
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Filterung in Overpass nach der Zahl der Objekten
Hallo zusammen!
Erst, entschuldiget ihr mir bitte, wenn solches Thema schon existiert.
Also, ich brauche, im bestimmten Gebiet Polygonen mit dem Tag place=village, in deren es jeweils weniger als 20 Häuser gibt, zu finden. Mithilfe von dem Overpass. Wie kann ich das machen?
Vielleicht gibt es jetzt keine Weise, das zu tun. Wenn ja, könnet ihr vorschlägen, wie diese Option aussiehen kann und wie man sie in Overpass implementieren kann?
Ich siehe es so:
{{geocodeArea:Thüringen}}->.a; //zum Beispiel
relation
(area.a)
[place=village]
->.b;
map_to_area -> .c;
foreach.c -> .d (
way
(area.d)
[building]
(count<20)( // if count of objects in this input set is smaller than 20, then print .d
.d out meta;
);
);P. S. Ich suche Dörfer, wo es in OSM keine oder zu wenig Häuser gibt, um dort Häuser zu mappen.
P. P. S. Entschuldigung, wenn ich Verben mit "ihr" falsch schreibe ![]()
Viele Grüße
Eduard
Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#2 2015-08-13 21:44:14
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
So wäre es besser:
{{geocodeArea:Thüringen}}->.a; //zum Beispiel
relation
(area.a)
[place=village]
->.b;
map_to_area -> .c;
foreach.c -> .d (
way
(area.d)
[building]
->.e;
// Sintaxis is similar to "(user:*)" and "foreach":
// if condition in first parentheses is satisfied,
// Overpass must run code in second parentheses.
// This repeats for each object in input set.
(count_less:20).e( // if count of objects in input set ".e" is smaller than 20, then print an input set ".d"
.d out meta;
);
);Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#3 2015-08-15 12:04:26
- stephan75
- Member
- Registered: 2008-05-28
- Posts: 2,918
Re: Filterung in Overpass nach der Zahl der Objekten
Hallo Eduard,
mal ganz abgesehen von der Formuliering der Abfrage im teschnischen:
Bist du dir denn bewusst, ob in deinem Testgebiet die ganzen Objecte mit place=village wirklich auch als Relation erfasst sind, und nicht "nur" als eine einzige geschlossene Linie mit z.B. landuse=* oder als einzelner Node?
Und inwieweit bist du dir sicher, dass bei allen Dörfern mit place=village auch wirklich schon alle Häuser in den OSM-Daten enthalten sind? Denn was machst du mit Orten, die in der realen Welt dreißig Häuder haben, davon sind aber bisher nur 5 in OSM drin?
Offline
#4 2015-08-15 12:14:41
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
Hallo Stephan,
vielen Dank für die Antwort.
Bist du dir denn bewusst, ob in deinem Testgebiet die ganzen Objecte mit place=village wirklich auch als Relation erfasst sind, und nicht "nur" als eine einzige geschlossene Linie mit z.B. landuse=* oder als einzelner Node?
Relation und Linie - das kann man später korrigieren und ergänzen. Die oben genannte Abfrage ist nur Beispiel.
Und inwieweit bist du dir sicher, dass bei allen Dörfern mit place=village auch wirklich schon alle Häuser in den OSM-Daten enthalten sind? Denn was machst du mit Orten, die in der realen Welt dreißig Häuder haben, davon sind aber bisher nur 5 in OSM drin?
Ich suche genau diese Orten, um dort alle Häuser zu malen.
Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#5 2015-08-15 13:10:40
- mmd
- Member
- Registered: 2010-11-06
- Posts: 2,150
Re: Filterung in Overpass nach der Zahl der Objekten
Hallo,
Hier ein Beispiel, das im Umkreis von 1000m die Zahl der Buildings für alle place=village Nodes im Saarland ermittelt:
[out:csv(::id, name, ::count)];
{{geocodeArea:Saarland}};
node(area)[place=village];
foreach (
out;
way(around:1000)[building];
out count;
);
http://overpass-turbo.eu/s/aXr (bzw. http://overpass-turbo.eu/s/aXt)
Alles andere funktioniert leider nicht. Eine Diskussion dazu ist am besten auf Github oder auf der Overpass Dev-List aufgehoben. Hier im Forum geht das schlicht und einfach unter.
Gruß,
mmd
Last edited by mmd (2015-08-15 13:16:40)
Offline
#6 2015-08-15 13:26:07
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
Hallo mmd,
danke, aber über "out count;" weiß ich schon. Man kann natürlich deine Abfrage nutzen und dann selbstständig die Orte, wo es wäniger als 20 Häuser gibt, aussuchen. Ich möchte diesen Prozeß ein bisschen automatisieren.
Über GitHub und Mailing-List - danke, vestanden. Werde dort schreiben.
Grüße,
Eduard
Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#7 2015-08-15 15:58:38
- MHohmann
- Member

- From: Tartu, Estonia
- Registered: 2009-06-07
- Posts: 1,600
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
Man kann natürlich deine Abfrage nutzen und dann selbstständig die Orte, wo es wäniger als 20 Häuser gibt, aussuchen. Ich möchte diesen Prozeß ein bisschen automatisieren.
Du könntest die Daten, die du als CSV bekommst, z.B. mit einem Python- oder AWK-Skript einlesen und nur die Orte Filtern, die weniger als 20 in der Spalte "count" stehen haben.
SotM Baltics, 3.-4. August 2013, Tartu, Estonia: amenity=university, mappers=yes
Offline
#8 2015-08-15 18:01:24
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
Du könntest die Daten, die du als CSV bekommst, z.B. mit einem Python- oder AWK-Skript einlesen und nur die Orte Filtern, die weniger als 20 in der Spalte "count" stehen haben.
Danke, das ist ja klar. Das sieht aber unschön
wegen der größer Anzahl der Schritten.
Nebenbei gesagt:
Wenn ich diese Abfrage (http://overpass-turbo.eu/s/aXr) starte, bekomme ich die Ergebnis in Form:
@id name @count
<id> <name>
<count>Das bedeutet, dass <count> nicht an der Zeile mit <id> und <name> steht, sondern an nächster Zeile. Wie kann man <count> in richtige Zeile setzen?
Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#9 2015-08-15 18:19:38
- mmd
- Member
- Registered: 2010-11-06
- Posts: 2,150
Re: Filterung in Overpass nach der Zahl der Objekten
Wie kann man <count> in richtige Zeile setzen?
Das geht heute nur über Post-Processing. Über die Query selbst lässt sich das nicht beeinflussen.
Gruß,
mmd
Offline
#10 2015-08-15 18:23:54
- edward17
- Member
- Registered: 2013-08-26
- Posts: 1,849
- Website
Re: Filterung in Overpass nach der Zahl der Objekten
Das geht heute nur über Post-Processing. Über die Query selbst lässt sich das nicht beeinflussen.
Shade.
Na, danke für die Information!
Grüße
Eduard
Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.
Offline
#11 2015-08-15 18:29:06
- mmd
- Member
- Registered: 2010-11-06
- Posts: 2,150
Re: Filterung in Overpass nach der Zahl der Objekten
Post-Processing ist nicht soo schwierig:
tail -n +2 result.csv | paste - - -d"\t"...und die beiden Extra-Tabs lassen sich bestimmt auch gut rauswerfen:
tail -n +2 result.csv | sed 's/\t\t//g' | paste - - -d"\t" | sort -t$'\t' -k3 -nLast edited by mmd (2015-08-15 18:37:52)
Offline