Mir fällt da nur die Entfernungssuche ein. Geht aber halt oft in die Hose, weil Gemeinden nicht kreisförmig sind…

Alle Restaurants im Umkreis von 500 Metern um den Node 22281426:

select osm_id,name from osm_point where amenity='restaurant' and distance((select way from osm_point where osm_id=22281426),way) <500;
   osm_id   |          name          
------------+------------------------
  440673818 | Station Karwendelblick
  440683734 | da Mamma Lucia
 1102296676 | Amalfi Da Francesco
  440683942 | Dubrovnik
  684507857 | Platzl
 1094868694 | Zur Kutsche
  684507872 | Gasthof Stern

Die nächsten 5 Gemeinden um den “Gasthof Stern”:

select osm_id,name,place,distance((select way from osm_point where osm_id=684507872),way) as entfernung from osm_point where  place in ('town','city','hamlet')  order by entfernung limit 5;
  osm_id   |     name     | place  |    entfernung    
-----------+--------------+--------+------------------
  22281426 | Mittenwald   | town   | 442.255007126766
 295561265 | Aschaualm    | hamlet | 5677.14077266822
 868310644 | Unterkirchen | hamlet | 7119.16013808037
 366475858 | Kranzbach    | hamlet | 7271.41171456213
 868308776 | Lochlehn     | hamlet | 9988.93895602725

Alles nicht wirklich schön… In besser gemappten Gegenden könntest Du noch den nächsten Node mit “addr:city” suchen, ist sicher oft besser als der Gemeinde-Node, in diesem Beispiel aber nicht, der nächste liegt 12km weit weg.

Grüße, Max

PS: Das da oben ist alles unoptimierter Code, ich weiss nicht, wie viele Restaurants da gesucht werden und wie oft die Entfernung berechnet wird. Eventuell wär noch eine vorangestellte Abfrage mit bounding box gut, damit nicht sämtliche Kneipen der Welt durchgerechnet werden um dann die im 500m-Radius auszugeben. Ich habs mal damit probiert, aber bei meiner winzigen Gegend gabs keinen Unterschied, könnte bei einer Deutschlandkarte anders sein…