How to filter house numbers of a city in OSM map - openstreetmap

Does anyone have any documentation or know how to get all the house numbers of a city available on OpenStreetMap or Nominatim?
I've searched some documentation but it doesn't seem to work.
Or anyone have api documentation that can do it please help me.
Thanks,

There's no direct API for this that would just spit out all the addresses, or even just all the house numbers, for a specific city, at least not that I'd know off.
If you can import an OSM planet extract containing your city of choice into an osm2pgsql database it would be easy to run:
SELECT DISTINCT "addr:housenumber"
FROM planet_osm_point
WHERE "addr:city=..."
UNION
SELECT DISTINCT "addr:housenumber"
FROM planet_osm_polygon
WHERE "addr:city=..."
Overpass API could also be used, esp. with the OverPass Turbo frontend it can be given queries like "addr:housenumber=* in City_name", but by default it will return full object data and not just a single field like house number.
Raw Overpass API queries can probably do just that, but I'm not that deep into its query syntax. Maybe the examples can give you a hint towards what may work.
But the Overpass API query language is not necessarily for those faint at heart ... :O

Related

How to find a city(ies) only with partial search?

I am using Nominatim OpenStreetMap API to find city/ cities which matches search phrase.
For example, wind should work like Wind% - not an exact match but it does not work. The second problem is not able to get a city/cities. It returns, administrative, town, county, recreational and etc.
The Nominatim documentation suggests using special words but there is no example.
https://nominatim.openstreetmap.org/?format=json&addressdetails=1&q=winds&format=json&limit=5
The above URL returns 5 places but not a single city. I want to search for cities only. I can use the following which is kind of helpful but it does not search for a partial phrase and returns a result only with exact matcth:
https://nominatim.openstreetmap.org/?format=json&addressdetails=1&city=windsor&format=json&limit=5
If instead of city=windsor I use city=wind it does not return data.
Unfortunately Nominatim doesn't support partial matches. But photon does.

osm overpass query by country

I am using this Overpass query to extract all coworking amenities in Italy.
( area["ISO3166-1"="IT"];) ->.a;
node["amenity"="coworking_space"]
(area.a);
(._;>;);
out body;
If I try to do the same for France using FR as ISO3166 country code
( area["ISO3166-1"="FR"];) ->.a;
node["amenity"="coworking_space"]
(area.a);
(._;>;);
out body;
I get no results while I am sure there are nodes like that in France (i tested with a separate query using automatic bbox).
Question:
Am I getting wrong the ISO3166 country code of France?
In general, there is a better way to extract osm data from overpass by country?
Thanks,
Jacopo
You should query for the key ISO3166-1:alpha2 or ISO3166-1:alpha3 and use ISO3166-1 only as a fallback. These keys are explained in the country code wiki page.
The relation for the state of Italy has tag ISO3166-1 while the relation for the state of France doesn't. But both have the value you are looking for in the ISO3166-1:alpha2 key.

Overpass API way coordinates

I'm trying to query the OSM Overpass API to find any amenities within a bounding box. The actual query in my program will be generic but in my testing I noticed I cannot retrieve the coordinates(latitude, longitude) of any of the ways. Here is my script:
(
node
["amenity"="police"]
(39.235,-76.715,39.373,-76.525);
way
["amenity"="police"]
(39.235,-76.715,39.373,-76.525);
);
(._;>;);
out meta;
I need to use ways because I'm missing a significant amount of data without them. Unfortunately they do not include any coordinate data despite me adding out meta instead of the normal out. This was answered here, overpass-api ways query include coordinates about a year ago but that solution no longer works. Is this a bug? Or am I doing something wrong? I've also tried out center, out geom, and out skel to no success. I'm outputting the data in xml.
ANSWERED, I left on the recursion line on the end by accident. Thanks Tyr.

Getting Streets of a specific postcode using Open Street Maps

I want to write a code that has the Countrycode and Postcode as an input and the ouput are the streets that are in the given postcode using some apis that use GSM.
My tactic is as follows:
I need to get the relation Id of the district. For Example 1991416 is the relation id for the third district in Vienna - Austria. It's provided by the nominatim api: http://nominatim.openstreetmap.org/details.php?place_id=158947085
Put the id in this api url: http://polygons.openstreetmap.fr/get_wkt.py?id=1991416&params=0
After downloading the polygon I can put the gathered polygon in this query on the overpass api
(
way
(poly: "polygone data")
["highway"~"^(primary|secondary|tertiary|residential)$"]
["name"];
);
out geom;
And this gives me the streets of the searched district. My two problems with this solution are
1. that it takes quite a time, because asking three different APIs per request isn't that easy on ressources and
2. I don't know how to gather the relation Id from step one automatically. When I enter a Nominatim query like http:// nominatim.openstreetmap.org/search?format=json&country=austria&postalcode=1030 I just get various point in the district, but not the relation id of the searched district in order to get the desired polygone.
So my questions are if someone can tell my how I can get the relation_Id in order to do the mentioned workflow or if there is another, maybe better way to work this issue out.
Thank you for your help!
Best Regards
Daniel
You can simplify your approach quite a bit, down to a single Overpass API call, assuming you define some relevant tags to match the relation in question. In particular, you don't have to resort to using poly at all, i.e. there's no need to convert a relation to a list of lat/lon pairs. Nowadays the concept of an area can be used instead to query for certain objects in a polygon defined by a way or relation. Please check out the documentation for more details on areas.
To get the matching area for relation 1991416, I have used postal_code=1030 and boundary=administrative as filter criteria. Using that area you can then search for ways in this specific polygon:
//uncomment the following line, if you need csv output
//[out:csv(::id, ::type, name)];
//adjust area to your needs, filter critera are the same as for relations
area[postal_code=1030][boundary=administrative]->.a;
// Alternative: {{geocodeArea:name}} -> see
// http://wiki.openstreetmap.org/wiki/Overpass_turbo/Extended_Overpass_Queries
way(area.a)["highway"~"^(primary|secondary|tertiary|residential)$"]["name"];
(._;>;);out meta;
// just for checking if we're looking at the right area
rel(pivot.a);out geom;
Try it on overpass turbo link: http://overpass-turbo.eu/s/6uN
Note: not all ways/relations have a corresponding area, i.e. some area generation rules apply (see wiki page above). For your particular use case you should be ok, however.

Openstreetmap Geocoding with housenumber in query

For some geocoding data i use OpenStreetMap.
My adresses are located in germany. The big problem with openstreetmap is, that i have problems to search with my housenumber. The Documentation says that the format is
Because of this my searchquery is:
5 Glogauerstraße
The result is the following:
http://nominatim.openstreetmap.org/search/?format=xml&addressdetails=1&limit=10&q=5%20Glogauerstra%C3%9Fe
This is cool, but there are a lot of results because in germany are a lot of adresses like this. so i will add that this adress must be in BERLIN with the ZIP-Code 10999.
New search-Query:
5 Glogauerstraße, Berlin 10999
Now the result is:
http://nominatim.openstreetmap.org/search/?format=xml&addressdetails=1&limit=10&q=5%20Glogauerstra%C3%9Fe,%20Berlin%2010999
This is nice! Now there is just 1 result!
But the problem is that in this result there isnt the housenumber 5 i was searched for. So the query just "delete" the information of the housenumber.
How can i solve this search query like the way i need it ? Its a big confusing why the openstreet map just delete this information ...
Correct me if I'm wrong but apparently (after searching for the address in the OSM map) OpenStreetMap does not know the housenumbers in this street.
It can correctly geocode this address to approximately accurate coordinates, it is just not accurate enough to know where the house 5 is.
You could possibly try Google Maps services, in my experience it is more accurate in most places.