Curious results of query - churches of cologne

I am trying to understand the concepts of queries on overpass-turbo.

In this query I wanted to find all churches of cologne and have started with a query on nodes of buildings. The result had only few results. So, I added a query on areas, but got only timeouts and big datasets, but no results on the map. After more and more restrictions, I noticed, the filter has no effect on the dataset (result contained churches from Karsruhe).

So I started to wonder if I can control, when the filter gets effect, on the database level or on the json result and effects only on the presentation layer.

So my questions are:

  1. Why do I get over 100MB on data, but see no results on the map?
  2. Am I able to control the query to filter first on the location AND dataset (amenity=place_of_worship) and retrieve only a small json result, to display then?

Cheers,
Michael

/*
Query Churches of Cologne
*/
[out:json][timeout:250];
area[name=“Cologne”][admin_level=6][boundary=administrative]->.cgn;
// gather results
(
//node"amenity"=“place_of_worship”;
area[“amenity”=“place_of_worship”]“protect_class”!~“.*”;

//area"building"=“church”;
//node"building"=“church”;

);
// print results
out body;

;
out skel qt;

result contains:
},
{
“type”: “area”,
“id”: 2404051009,
“tags”: {
“addr:city”: “Karlsruhe”,
“addr:country”: “DE”,
“addr:housenumber”: “50”,
“addr:postcode”: “76137”,
“addr:street”: “Augartenstraße”,
“amenity”: “place_of_worship”,
“building”: “yes”,
“denomination”: “catholic”,
“name”: “Unsere Liebe Frau”,
“religion”: “christian”,
“service_times”: “Su 10:15;Tu 15:00;Th 18:30;Fr 18:30”,
“source”: “LA-KA”,
“start_date”: “1891”,
“website”: “http://ka.stadtwiki.net/Unsere_Liebe_Frau”,
“wheelchair”: “yes”
}

I would be surprised if Cologne were tagged as name=Cologne instead of name=Köln and name:en=Cologne.

This probably isn’t what you want. “Areas” are artificially-created Overpass API objects that are derived from the OSM database. If what you want is every church, you’ll need to search for nodes, ways, and relations to get the actual OSM objects. You can modify your query to add each of these, or you could simply use the Overpass Turbo wizard to create the query using something like:

amenity=place_of_worship and protect_class!=* in "Cologne"

I’m not the best Overpass query writer, so I typically use use the Wizard on Overpass Turbp.

So I started with “church in Cologne” in the Wizard. It proposed to replace it with “place_of_worship”.
So I ended up with this query.

When I added your restriction on protect class I got this result.

p.s. it seems that Overpass Turbo can handle “Cologne”, but perhaps the Overpass API cannot.

Overpass API doesn’t use any geocoder, you have to specify tag keys and values as they occur in the OSM data. Instead of name=“Cologne” you would have to use name=“Köln”, i.e. the name in German.

{{geocodeArea:Cologne}} is an overpass turbo extension, which is unknown to Overpass API. It’s an instruction to do a Nominatim lookup for “Cologne” before sending the query to Overpass API. Behind the scenes, it will eventually send the following query to Overpass API:



[out:json][timeout:25];

area(3600062578)->.searchArea;
(
  // query part for: “"place of worship"”
  node["amenity"="place_of_worship"](area.searchArea);
  way["amenity"="place_of_worship"](area.searchArea);
  relation["amenity"="place_of_worship"](area.searchArea);
);
out body;
>;
out skel qt;