Overpass - do wyciągania danych z OSM

Możesz. Grupujesz obszary w dodatkowe nawiasy:

(
  {{geocodeArea:Poznań}};
  {{geocodeArea:Kraków}};
)->.searchArea;

a potem resztę wykonujesz tak samo używając (area.searchArea).

Możesz też zawęzić do mniejszych obszarów, jak nie interesuje cię cało miasto. Ja często korzystam z kluczy/wartości teryt:simc np. do wybrania poszczególnych dzielnic Warszawy.


[out:json];

(
  area["teryt:simc"="0919884"];  // Wola
  area["teryt:simc"="0918643"];  // Ochota
  area["teryt:simc"="0918130"];  // Mokotów

)->.a;

Dzięki!

A co zrobić, gdy nazwa nie jest unikalna, jak np. “Stare Miasto”, “Nowa Wieś” i może być wiele obiektów o takiej samej nazwie.
Da się jakoś wpisać ID linii z OSM?

Np. po wpisaniu {{geocodeArea:Stare Miasto}} znajduje obiekty w… Jerozolimie;)

Obejrzyj drugi z podanych przykładów :wink:

Nie każdy obiekt ma tag “teryt:simc”. Chodziło mi o numer “way” w OSM.

Stare Miasto we Wrocławiu i Poznaniu:

area(id:3602341619,3601849136)->.searchArea;

id są powiększone o 3600000000, bo to relacje. Dla linii należy powiększyć o 2400000000.

Mógłby ktoś pomóc ?

Potrzebuję wyciągnąć z bazy te drogi unclassified i residental dla których surface nie ma wartości.
Drugi temat to drogi dla których surface=xxx (coś sobie podstawię)

Z góry dzięki.

http://overpass-turbo.eu/s/123o

http://overpass-turbo.eu/s/123p
dla innych nawierzchni podmieniasz [“surface”=“gravel”] na [“surface”=“xxx”]

niestety pierwsza kwerenda zwraca tylko drogi unclassified, nie działa dla residental

W pierwszej kwerendzie była literówka - zamiast ‘residential’ było wpisane ‘residental’. Poniżej poprawiona kwerenda:
http://overpass-turbo.eu/s/12gX

dzięki

Opcjonalnie, po małej optymalizacji - 2w1: https://overpass-turbo.eu/s/12hz
Dla poprawnego działania jedna z opcji powinna być ‘zakomentowana’.

Ciekawostka dla użytkowników overpass.
Można uprościć algorytm wyszukiwania i zamiast 3 linii:


(
  node["amenity"="pharmacy"]({{bbox}});
  way["amenity"="pharmacy"]({{bbox}});
  relation["amenity"="pharmacy"]({{bbox}});
);

użyć jednej:


(
  nwr["amenity"="pharmacy"]({{bbox}});
);

Ktoś kiedyś pokazywał gdzieś kwerendę do wyszukiwania dróg track obok adresów.
Nie mogę teraz jej odnaleźć…
Podpowie ktoś ?

Pewnie chodzi o coś takiego:


[out:json][timeout:8000][bbox:{{bbox}}];
(way["highway"~"^(service|living_street|residential|unclassified|tertiary|tertiary|secondary|primary|trunk|motorway)(_link)*$"];)->.highways;
(nwr["addr:housenumber"];)->.addresses;
(nwr.addresses(around.highways:200);)->.addressesNearHighways;
(.addresses; - .addressesNearHighways;);
out geom meta;

edit:
Aczkolwiek jest to odwrotna kwerenda - czyli wyszukująca adresy, do której brakuje drogi o kategorii > track :slight_smile:

Czy da się znajdować obiekty, które nie są za blisko siebie?

Próbuję wyłapać podwójne adresy po wsiach, czyli ma się zgadzać addr:place i addr:housenumber, ale chciałbym z wyników wykluczyć POI z adresem, znajdujące się w obrębie tego samego budynku. Wymyśliłem, że można by wyszukać takie pary, które nie są za blisko siebie, ale nie mam pojęcia, czy w ogóle da się taki warunek skonstruować…

Może być łatwiej przetworzyć pobrane dane, zwłaszcza jak chce się mieć sensowną wydajność

Ja mam trochę podobne zapytanie już gotowe i możesz je raczej łatwo dostosować do swoich potrzeb:

[out:json][timeout:30][bbox:{{bbox}}];

way[building]->.ww;

foreach.ww->.w
(
  node['addr:housenumber'](area.w);

  // ilość node adresowych wewnątrz obrysu,
  // uwaga! sam obrys też może mieć już adres
  if (count(nodes) == 1) {
    .w out meta;
    ._ out meta;
  }
);

Ale tak jak Mateusz powiedział, jak chcesz dobry performance to najlepiej jest pobrać całe dane i przetworzyć je lokalnie. Overpass ma dosyć ciężko z takimi operacjami :stuck_out_tongue:.

2 Likes

I’m sorry for answering in English. I do not speak Polish and have not found the translation feature.

The following request tabulates all addresses with the number of items bearing this address and the size of the bounding box that contains the addresses in approximate meters:

[out:csv(count, sn, we, addr)];
area[name="Wuppertal"];
nwr["addr:housenumber"]["addr:street"](area);
for (t["addr:street"] + " " + t["addr:housenumber"])
{
  if (count(nwr) > 1)
  {
    make info addr=_.val,count=count(nwr),
        sn=(max(lat())-min(lat()))*1000000/9,we=(max(lon())-min(lon()))*1600000/9;
    if (u(t["sn"]) > 100 || u(t["we"]) > 100)
    {
      out;
    }
  }
}

Line 2 needs to be adapted to the respective administration unit to search, and lines 3 and 4 can be adapted to the desired format of addresses. The bounding box sizes are in very approximate meters, but exact enough to identify unusual clusters of the same address.

3 Likes

Uważaj na false-positives, adresacja w Polsce może być zepsuta urzędowo.

@drolbr logged in users have “translate” button (“globe” icon) at the bottom of each message, it translates message to auto-detected language user’s browser prefers, you can overwrite it in settings.

Zgadza się, Miłocin wylazł :slight_smile: