Overpass - do wyciągania danych z OSM

Listę zrobiłem przy pomocy Qgis. Jest to plik csv (id, lat, lon, kod).

Jakby co, teraz przypadkiem zobaczyłem, że kody pocztowe masz też w rejestrze PRG, który można pobrać bez opłat.
Edit: Choć widzę, że np. w Gdyni są trochę wybrakowane. Ale większość adresów w OSM i tak jest z importu.

No to przy tej liczbie obiektów widzi mi się, że prościej, niż załadować to do swojej tabeli i puścić jakąś prostą pętlę, ciągnącą po API OSM wg id z tabeli, to nie będzie.

RicoElectrico Byłem na tej stronie , ale “jakby diabeł ogonem przykrył”. Dzięki, ściągam, sprawdzę.
rmikke Tak, spróbuję w taki sposób.

Chciałbym sobie wyciągnąć zbiór ulic i budynków z adresami przy tych ulicach. Czyli żeby addr:street budynku miał wartość równą name jakiejś ulicy w zbiorze.

Czytam sobie manual i wychodzi mi, że powinienem użyć foreach i ewaluatorów (czy jak to się nazywa po naszemu), ale nigdzie nie widzę ani porządnego opisu składni, ani dobrego przykładu, względnie nie umiem poskładać dostępnych informacji do kupy.

Rzucicie jakiś przykład? Albo (wolno mi się rozmarzyć, nie?) wręcz zapytanie wyciągające wszystkie highway=residential z bboxa i pasujące do nich budynki i/lub punkty adresowe?

Tutaj masz przykład kwerendy z użyciem around. Nie jestem pewien czy o to chodziło.

http://overpass-turbo.eu/s/pEy

No nie o to.

Chcę w jakims bboksie wyciągnąć wszystkie highway=residential i wszystkie budynki i punkty adresowe, które mają addr:street takie same, jak nazwy wcześniej wyciągniętych ulic. Czyli muszę porównać addr:street budynków z nazwami wcześniej wyciągniętych ulic.

I widzę to jakoś tak, że wyciągam ulice do zbioru, następnie lecę po tym zbiorze pętlą foreach i dla każdej ulicy wyciągam budynki z addr:street=<nazwa_tej_ulicy> - i tu właśnie nie umiem znaleźć przykładu takiej pętli, ani zrobić jej sobie z dostępnych mi informacji.

Okej po wielu bojach z dokumentacją i wędrowaniu po ślepych uliczkach skleciłem coś takiego: http://overpass-turbo.eu/s/pJB

Nic a nic nie kumam. To ja już wolę PostGIS-a. :stuck_out_tongue: Trzy funkcje: ST_Intersects, ST_MakeEnvelope, ST_DWithin.

Dla mnie robienie kwerend na Overpass’ie jest jak dobre Sudoku. Ale rzeczywiście zgadzam się że w okolicach if’ów wygląda to makabrycznie a w szczególności - a.set(t[“name”])

Moim zdaniem powinno się rozwinąć wszystkie skrótowce i uporządkować sposoby wywoływania funkcji, byłoby o wiele przystępniejsze. Najgorszy jest znacznik t, bo to straszliwa niekonsekwencja. W normalnych kwerendach wystarczyłoby [“name”], ale ewaluatory (jakim jest* if:*) mają specjalną zasadę że ma być t[“name”].

O, to już jest mniej więcej to, czego szukam.

Ale nie rozumiem, czemu na Twoim bboksie wybiera ten i ten budynek, oba bez addr:street . Podejrzewam jakiś kawałek highjway=residential bez nazwy, bo po zmniejszeniu bboksa już tych budynków nie wybiera (więc raczej nie jest to błąd składni, tylko coś zależnego od wcześniej wybranych ulic), ale nie widzę nic takiego w obszarze…
EDIT: HEUREKA! To dalej już sobie poradzę, dzięki!!! :smiley:

A poza tym robi właśnie to, czego potrzebowałem…

EDIT2: Jeszcze nie do końca rozumiem kombinację ze zbiorem .container, a konkretnie: czemu nie można tego olać i puścić:


  (.buildings;.buildings >;)->.result; //get nodes for buildings geometry;
  
);

(.result;.highways;)-> .result; //merge buildings and highways

.result out;

Próbowałem i gubiło budynki - nie bardzo wiem czemu. Zbiory mają jakieś zakresy i mam inny .result wewnątrz pętli foreacz, a inny poza nią? Zainicjowanie .result w miejscu, gdzie inicjowałeś .container nie pomaga…

EDIT 2,5: Już rozumiem, czemu tak nie można - union wewnątrz pętli buduje nowy zbiór (u Ciebie: .container) po kawałku, czyli dodaje .buildings do dotychczasowej zawartości .container. Powinienem więc dać w pętli (.result; .buildings; .buildings > ) → .result; żeby zadziałało.

EDIT3: Oraz dlaczego nie można zamiast szukać ulic dwukrotnie zrobić:


(
  way["highway"="residential"]["name"]({{bbox}});
); //nodeless

(._; ._ >;)->.highways;

tu są wybierane wyłącznie budynki bez addr:street. Ki czort?

EDIT4: Żeby było zabawniej, taki kod:


(
  way["highway"="residential"]["name"]({{bbox}});
)->.nodeless; //nodeless

(.nodeless; .nodeless >;)->.highways;

()->.container; //initialize empty set

foreach(
    (.nodeless;) -> .a; //get node free highways
  (
  	way["building"]
    (if: t["addr:street"] == a.set(t["name"]))
    ({{bbox}});
  	relation["building"]
    (if: t["addr:street"] == a.set(t["name"]))
    ({{bbox}});
    )-> .buildings;
  
  (.buildings;.buildings >;)->.buildings; //get nodes for buildings geometry;
  
  (.buildings; .container;)->.container; //append to container
);

(.container;.highways;)-> .result; //merge buildings and highways

.result out;

różniący się od poprzedniego wyłącznie użyciem zbioru .nodeless zamiast domyślnego - nie zwraca budynków w ogóle.

Mam wrażenie że nie rozumiem czegoś bardzo istotnego.

Zauważyłem sporo rezerwatów przyrody (protection_title=Nature Reserve) dodanych w OSM.
Większości brakuje tagów które kierują do opisu danego rezerwatu na Wikipedii

Trzeba by uzupełnić te braki

Dlatego potrzebny mi kod:
który pokaże wszystkie
protection_title=Nature Reserve
które posiadają name=jakąś nazwę
ale brakuje im
wikipedia=pl:

Prosz: http://overpass-turbo.eu/s/pKs

Dzięki :slight_smile:
A jak zrobić aby wyświetlało wszystkie punkty amenity ale bez np. amenity=school

W kreatorze:

amenity=* and amenity!=school

Ostatecznie kod wygląda tak:

http://overpass-turbo.eu/s/pLl

  1. Potrzebna kwerenda wyszukująca poligony (konkretny tag), nie mających wewnątrz way (konkretny tag).
    Widziałem kiedyś kwerendę pokazującą budynki, które przecinają drogi więc zapewne się da ją odwrócić.

  2. Potrzebna kwerenda dla poligonów a:h które stykają się tylko z jednym a:h Czyli nieciągłość systemu a:h.

  3. Potrzebna kwerenda dla poligonów a:h z brakującym junction, mających wewnątrz więcej niż 1 way (z klucza highway). Czyli błąd braku junction

  4. potrzebna kwerenda dla poligonów z konkretnym tagiem np. a:h które przecina way np. z kluczem highway, ale na przecięciu brak punktu wspólnego.Najlepiej aby wynik wizualizował nie poligony a punkt braku przecięcia (oczywiście wdzięczny będę też za kwerendę bez tego utrudnienia)

  5. potrzebna kwerenda poligonów (np.a:h) mających wewnątrz dwie way (z klucza highway) ale stykających się tylko z 1 lub 2 poligonami a:h Czyli przerwany system a:h na skrzyżowaniach.Może być prościej czyli brak styku z 2 poligonami, bo z jednym sprawę załatwi kwerenda nr2.

  6. potrzebna kwerenda wyszukująca poligony np a:h mająca value niższe niż jedna z dróg ją przecinających lub kończących się od wewnątrz. Waga value w kolejności: motorway, trunk, primary, secondary, tertiary, unclassified, residential, road, living_street, pedestrian, raceway, motorway_link, trunk_link, primary_link, secondary_link, tertiary_link, service, cycleway, footway, track, bridleway, path, construction, proposed, steps, bus_guideway, escape

  7. potrzebna kwerenda na wyszukanie way nie mających na sobie noda z konkretnym tagiem

  8. też odwrotnie jak wyżej , czyli otagowany nod, nie leżący na way z konkretnym tagiem

  9. potrzebna kwerenda dla way nie zamkniętych w poligon np. way otagowane a:h

  10. da się zsumować overpassem długości dróg rowerowych z jednakowym surface?

  11. da się wyszukać poligony np a:h od których w promieniu np 20 m jest mniej niż 2 szt np highway z value footway lub path pod warunkiem, że są one dłuższe niż 20 m? Czyli brak drugich chodników wzdłuż a:h.
    Aby było skuteczne trzeba by chyba sprawdzić czy ze 3-4 nody tej footway czy patch mieszczą się w promieniu 20 m aby wyszukać tylko brakujące równoległe chodniki a aby wyniku nie fałszowały prostopadłe.

@rowers2
Marek ostatnimi czasy postulował potrzebę usprawnień dla a:h także może ktoś podejmie wyzwanie i przygotuje reguły overpass pomagające w utrzymaniu tego kodu

@All
Przy tej okazji na nowo znalazłem, że swego czasu podniesiony został temat ujednolicenia wszystkich nazw banków PKO S.A. Może i do tego udało by się zaprząc by overpassa?

Muszę sprawdzić czy pewne punkty na mapie należą do danego obszaru.
Mam uszykowaną kwerendę w overpass turbo, która zaznacza mi obszar.
Ale jak to zrobić aby na mapie zaznaczone były również moje punkty (mam ich współrzędne)

Przykładowe punkty (ogólnie mam ich 460):

52.396491, 16.893310
52.397499, 16.896593

Obecna kwerenda:

[date:“2016-07-17T00:00:00Z”]
[timeout:620]
[bbox:{{bbox}}];
(

way[leisure=park];
way[landuse=recreation_ground];
way[leisure=recreation_ground];
way[leisure=pitch];
way[leisure=garden];
way[leisure=golf_course];
way[leisure=playground];
way[landuse=meadow];
way[landuse=grass];
way[landuse=greenfield];
way[natural=scrub];
way[natural=grassland];
way[landuse=farmyard];


way[natural=plateau];
way[boundary=national_park]; 
way[leisure=nature_reserve];
way[natural=heath];
way[natural=moor];
way[landuse=farmland];
way[landuse=orchard];
way[landuse=vineyard];

);
out body;

;
out skel qt;

//Confirmed OSM tags will appear in blue
//Unconfirmed OSM tags will appear in grey

{{style:

way[leisure=park],
way[landuse=recreation_ground], 
way[leisure=recreation_ground],
way[leisure=pitch],
way[leisure=garden],
way[leisure=golf_course],
way[leisure=playground],
way[landuse=meadow],
way[landuse=grass],
way[landuse=greenfield],
way[natural=scrub],
way[natural=grassland],
way[landuse=farmyard]

{ color:blue; fill-color:blue; }

way[leisure=nature_reserve],
way[natural=plateau],
way[natural=heath],
way[natural=moor],
way[landuse=farmland],
way[landuse=orchard],
way[landuse=vineyard]

{ color:grey; fill-color:grey; }
}}

Pomoże ktoś?
Nie znam się na tym :frowning:

Tutaj coś jest: https://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_QL#Query_for_areas_.28is_in.29

Tylko jak to zrobić?
Próbuję i nic :frowning:
Cały czas zaznacza mi tylko obszary. Jak sprawdzić teraz czy jakieś współrzędne należą do tego obszaru czy nie?