Overpass - do wyciągania danych z OSM

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?

Zdefiniuj problem. Problemem jest to, że nie możesz zwizualizować swoich punktów, czy że zwracane są wszystkie obszary, a nie tylko te, które obejmują Twoje punkty?

is_in pozwoli Ci zwrócić te obszary, które obejmują Twoje punkty.

Jak chcesz teraz na wynik z Overpassa nałożyć swoje punkty - to jest to problem do którego potrzebujesz innego narzędzia.

Do wyniku z Overpassa chciałbym właśnie nałożyć swoje punkty. A wiesz może jakim narzędziem mogę to zrobić?

O ile dane pasują do OSM to dodaj je w OSM. A jeśli nie to możesz ściągnąć czyste dane jako geojson i obrobić w QGIS’ie

Zasadniczo Overpass wyciąga to, co jest w bazie, więc jeśli Twoich punktów w bazie nie ma…
A co właściwie chcesz z tym zrobić? Może czym innym da się to osiągnąć, np uMap pozwoli Ci pokazać na mapie obiekty wyciągnięte Overpassem plus cokolwiek sobie zechcesz dorysować…

EDIT: Znalazłem osobny wątek na ten sam temat, w którym jest częściowa odpowiedź na moje pytanie. Pozwoliłem sobie wątki połączyć, z dwóch zapytań pozostawiając to, które było w osobnym wątku, jako precyzyjniej opisujące problem.

I tak, uMap powinien Ci pomóc sobie te punkty zobrazować, możesz wynik overpassa wyeksportować do GeoJSON i zaczytać do uMap, a ze swoich punktów musiałbyś też zrobić jakiś format importowalny do uMap, chociażby również GeoJSON.

Pytanko mam. Czy dane overpassturbo w ogóle są aktualizowane? Przydałaby mi się one teraz zaktualizowane, a jak patrzę sobie na lewą część strony to niestety. Dane dla terenu, który chciałem prześledzić pochodzą z 7 lipca 2016 roku. Jest jakaś szansa na aktualizację danych?

Patrzysz na parki itp. w wiadomym nam :wink: celu?
Usuń [date:…] z góry.

A nie korzystasz z jakiegoś serwera testowego? Jedynie słuszny serwer pokazuje stan aktualny.
Albo po prostu widzisz w zapytaniu wpis, żeby wyszukiwał według stanu na 7 lipca 2016, wtedy wystarczy go usunąć i odświeżyć zapytanie.

Przerabiając przykłady z Wiki stworzyłem kwerendę, która może podpowiedzieć gdzie rysować budynki.
Korzystamy oczywiście z faktu, że zaimportowanymi adresami pokryta jest niemal cała Polska.

Wersja z bbox-em: http://overpass-turbo.eu/s/FpW
Wersja dla obszaru (np. gminy, powiatu): http://overpass-turbo.eu/s/FpV

Super. Działa. Warto też zmniejszyć sobie odległość do np. 100m. A z tymi adresami jak to jest, one są co jakiś czas aktualizowane z jakieś zewnętrznej bazy państwowej?

Najczęściej są importowane z bazy ewidencji miejscowości, ulic i adresów ( EMUiA) poprzez serwis iMPA na prośbę wyrażoną w tym wątku.