Żabka - pobranie lokalizacji - problem - API

Witam,

Chciałbym pobrać przez API OpenStreetMaps lokaliacje (lat/log) wszystkich Żabek w Polsce. Jednak podczas pobierania danych część z Żabek nie jest załączana. Pobiera się 7.3k lokalizacji, a Żabek w Polsce powinno być około 10500 (rozumiem, że część może nie być ale cały czas dużo brakuje). W czym jest problem? Kod którego używam poniżej. Jeżeli komuś uda się pomóc wspomnę w artykule, który piszę :slight_smile:

import requests
import json
import pandas as pd

# Define the Overpass API endpoint
overpass_url = "http://overpass-api.de/api/interpreter"

# Define the Overpass QL query to get all elements with "Żabka" in the name in Poland
overpass_query = """
[out:json];
area["ISO3166-1"="PL"]->.searchArea;
(
  node["name"~"Żabka|Zabka|Zabka Polska"](area.searchArea);
  way["name"~"Żabka|Zabka|Zabka Polska"](area.searchArea);
  relation["name"~"Żabka|Zabka|Zabka Polska"](area.searchArea);
);
out center;
"""

# Send the request to the Overpass API
response = requests.get(overpass_url, params={'data': overpass_query})

# Check for successful response
if response.status_code == 200:
    data = response.json()
else:
    print("Error: Unable to fetch data")
    data = None

# Function to extract addresses from the OSM data
def extract_addresses(osm_data):
    addresses = []
    if osm_data:
        for element in osm_data['elements']:
            address = {}
            address['id'] = element['id']
            if 'lat' in element and 'lon' in element:
                address['lat'] = element['lat']
                address['lon'] = element['lon']
            elif 'center' in element:
                address['lat'] = element['center']['lat']
                address['lon'] = element['center']['lon']
            if 'tags' in element:
                tags = element['tags']
                address['name'] = tags.get('name')
                address['street'] = tags.get('addr:street')
                address['housenumber'] = tags.get('addr:housenumber')
                address['postcode'] = tags.get('addr:postcode')
                address['city'] = tags.get('addr:city')
            addresses.append(address)
    return addresses

# Extract addresses from the response data
zabka_addresses = extract_addresses(data)

# Convert the list of addresses to a pandas DataFrame
df_zabka_addresses = pd.DataFrame(zabka_addresses)

# Print the DataFrame
print(df_zabka_addresses)
df_zabka_addresses.to_csv('zabka_addresses1.csv', index=False)

  1. Zabka|Zabka Polska raczej zbędne jest
  2. zauważ że to ci też pobierze restauracje czy teatry czy drogi o takiej nazwie - ja bym dał jeszcze filtr shop=convenience
  3. tak, tysięcy Żabek brakuje - mój Experimental All The Places <-> OpenStreetMap matcher znajduje ponad 2400, patrz ATP <-> OSM zabka_pl - missing shops? (a pewnie sporo pomija ze względu na znaczną ostrożność tego raportu)

Może dane z https://www.alltheplaces.xyz/ będą pomocne? Zasysają dane bezpośrednio od Żabki - lokalizacje mogą być mniej dokładne, mogą mieć inne wady ale jak Żabka jest na stronie Żabki to się załapie

Dzięki!

Tylko właśnie jak patrzyłem na mape “manualnie” to te Żabki są tylko z jakiegoś powodu się nie pobierają…

All The Places | Map ?

Możesz pobrać https://matkoniecz.codeberg.page/improving_openstreetmap_using_alltheplaces_dataset/missing_shops_zabka_pl.geojson jako suplementacje danych OSM (to też jest na licencji ODBL, (C) OpenStreetMap contributors)

Lub pobrać pełne dane ATP i wyjąć Żabki z tego

1 Like

Porównywanie po regexach jest bardzo-bardzo wolne, możesz zamiast tego spróbować coś takiego:

[out:json];
area["ISO3166-1"="PL"]->.searchArea;
(
  nw[name="Żabka"][shop](area.searchArea);
);
out center;

Overpass znajduje właśnie 7301 miejsc, masz przykład jakiejś która powinna być a nie ma?

https://matkoniecz.codeberg.page/improving_openstreetmap_using_alltheplaces_dataset/missing_shops_zabka_pl.html

udało się zescrapować z tego https://www.alltheplaces.xyz/map/#1/0/0

Mam około 10448 Żabek więc mniej więcej tyle ile być powinno (+/- kikaset, + podczas analizy coś tam wypada ale to nie musi byc az tak dokalne).

Dzięki wielki za pomoc. Z ciekawostek z pierwszej analizy wynika, że patrząc na powiaty najwięcej mieszkańców na żabkę jest w:
Zrzut ekranu 2024-08-06 212002

Off topic:
wiecie może jak mógłbym stworzyć taką mapę (infografika) z tymi danymi? coś jak tworzy gościu z kartografi ekstremalnej

Myślałem że coś w OSM się nie zgadza w porównaniu z ręcznym przeglądaniem, a eksportem

1 Like