Skip to content

Commit 48e85cf

Browse files
pschockejbelien
andauthored
[Nominatim] add support for optional address fields and extra tags (#1127)
* added shop, amenity and tourism * added ability to get extratags and storing of additional address data * fixed styling * Update Nominatim.php Force extratags parameter. * Rename addressData to details * Update & Fix tests * Apply StyleCI fix Co-authored-by: Jonathan Beliën <[email protected]>
1 parent 8cec203 commit 48e85cf

File tree

24 files changed

+135
-46
lines changed

24 files changed

+135
-46
lines changed

src/Provider/Nominatim/Model/NominatimAddress.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ final class NominatimAddress extends Address
5454
*/
5555
private $type;
5656

57+
/**
58+
* @var array|null
59+
*/
60+
private $details;
61+
62+
/**
63+
* @var array|null
64+
*/
65+
private $tags;
66+
5767
/**
5868
* @return string|null
5969
*/
@@ -222,4 +232,42 @@ public function withQuarter(string $quarter = null): self
222232

223233
return $new;
224234
}
235+
236+
/**
237+
* @return array|null
238+
*/
239+
public function getDetails(): ?array
240+
{
241+
return $this->details;
242+
}
243+
244+
/**
245+
* @param array|null $details
246+
*/
247+
public function withDetails(array $details = null): self
248+
{
249+
$new = clone $this;
250+
$new->details = $details;
251+
252+
return $new;
253+
}
254+
255+
/**
256+
* @return array|null
257+
*/
258+
public function getTags(): ?array
259+
{
260+
return $this->tags;
261+
}
262+
263+
/**
264+
* @param array|null $tags
265+
*/
266+
public function withTags(array $tags = null): self
267+
{
268+
$new = clone $this;
269+
$new->tags = $tags;
270+
271+
return $new;
272+
}
225273
}

src/Provider/Nominatim/Nominatim.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ public function geocodeQuery(GeocodeQuery $query): Collection
9696
'format' => 'jsonv2',
9797
'q' => $address,
9898
'addressdetails' => 1,
99+
'extratags' => 1,
99100
'limit' => $query->getLimit(),
100101
]);
101102

@@ -233,10 +234,16 @@ private function jsonResultToLocation(\stdClass $place, bool $reverse): Location
233234
$location = $location->withAttribution($place->licence);
234235
$location = $location->withDisplayName($place->display_name);
235236

237+
$includedAddressKeys = ['city', 'town', 'village', 'state', 'county', 'hamlet', 'postcode', 'road', 'pedestrian', 'house_number', 'suburb', 'country', 'country_code', 'quarter'];
238+
239+
$location = $location->withDetails(array_diff_key((array) $place->address, array_flip($includedAddressKeys)));
240+
241+
if (isset($place->extratags)) {
242+
$location = $location->withTags((array) $place->extratags);
243+
}
236244
if (isset($place->address->quarter)) {
237245
$location = $location->withQuarter($place->address->quarter);
238246
}
239-
240247
if (isset($place->osm_id)) {
241248
$location = $location->withOSMId(intval($place->osm_id));
242249
}

src/Provider/Nominatim/Tests/.cached_responses/nominatim.openstreetmap.org_08a4a6fa86e15d460984b411fffa3351225b3c7c

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/Provider/Nominatim/Tests/.cached_responses/nominatim.openstreetmap.org_0b7c89ad04ee5a2d884a2fb4b718a1d54ff09d87

Lines changed: 0 additions & 1 deletion
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
s:1737:"[{"place_id":259070493,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":1879842,"boundingbox":["51.5032573","51.5036483","-0.1278356","-0.1273038"],"lat":"51.50344025","lon":"-0.12770820958562096","display_name":"Prime Minister’s Office, 10, Downing Street, Westminster, Covent Garden, Westminster, London, Greater London, England, SW1A 2AA, United Kingdom","place_rank":30,"category":"tourism","type":"attraction","importance":0.9187064122051384,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_point_of_interest.p.20.png","address":{"tourism":"Prime Minister’s Office","house_number":"10","road":"Downing Street","quarter":"Westminster","suburb":"Covent Garden","city":"Westminster","state_district":"Greater London","state":"England","postcode":"SW1A 2AA","country":"United Kingdom","country_code":"gb"},"extratags":{"website":"http://www.number10.gov.uk/","wikidata":"Q169101","wikipedia":"en:10 Downing Street"}},{"place_id":18621002,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":1931404517,"boundingbox":["51.5032302","51.5033302","-0.1276858","-0.1275858"],"lat":"51.5032802","lon":"-0.1276358","display_name":"10, Downing Street, Westminster, Covent Garden, Westminster, London, Greater London, England, SW1, United Kingdom","place_rank":30,"category":"place","type":"house","importance":0.42099999999999993,"address":{"house_number":"10","road":"Downing Street","quarter":"Westminster","suburb":"Covent Garden","city":"Westminster","state_district":"Greater London","state":"England","postcode":"SW1","country":"United Kingdom","country_code":"gb"},"extratags":{"entrance":"yes"}}]";

src/Provider/Nominatim/Tests/.cached_responses/nominatim.openstreetmap.org_388d03935611eb4bd1d69d1d91b5af2fd70ec24f

Lines changed: 0 additions & 1 deletion
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
s:6812:"[{"place_id":257906993,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"relation","osm_id":3299902,"boundingbox":["50.8411653","50.8428129","4.3601343","4.3646336"],"lat":"50.8419916","lon":"4.3619888303182375","display_name":"Palais Royal - Koninklijk Paleis, 1, Place des Palais - Paleizenplein, Quartier Royal - Koninklijke Wijk, Pentagone - Vijfhoek, Bruxelles / Brussel, Ville de Bruxelles - Stad Brussel, Brussel-Hoofdstad - Bruxelles-Capitale, Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest, 1000, België / Belgique / Belgien","place_rank":30,"category":"tourism","type":"attraction","importance":1.0389733784428217,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//poi_point_of_interest.p.20.png","address":{"tourism":"Palais Royal - Koninklijk Paleis","house_number":"1","road":"Place des Palais - Paleizenplein","neighbourhood":"Quartier Royal - Koninklijke Wijk","suburb":"Pentagone - Vijfhoek","city_district":"Bruxelles / Brussel","city":"Ville de Bruxelles - Stad Brussel","county":"Brussel-Hoofdstad - Bruxelles-Capitale","region":"Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest","postcode":"1000","country":"België / Belgique / Belgien","country_code":"be"},"extratags":{"image":"https://images.mapillary.com/2Ny81XTLPOeb52kp3yoAHQ/thumb-2048.jpg","wikidata":"Q635307","mapillary":"https://www.mapillary.com/map/im/2Ny81XTLPOeb52kp3yoAHQ","wikipedia":"en:Royal Palace of Brussels","start_date":"1826","castle_type":"palace","description":"https://photos.app.goo.gl/5C1gu5fHnmqaESFPA"}},{"place_id":47175961,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":3860604720,"boundingbox":["50.8426684","50.8427684","4.3604791","4.3605791"],"lat":"50.8427184","lon":"4.3605291","display_name":"Coudenberg, Place des Palais - Paleizenplein, Quartier Royal - Koninklijke Wijk, Pentagone - Vijfhoek, Bruxelles / Brussel, Ville de Bruxelles - Stad Brussel, Brussel-Hoofdstad - Bruxelles-Capitale, Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest, 1000, België / Belgique / Belgien","place_rank":30,"category":"tourism","type":"museum","importance":0.9744633789338841,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//tourist_museum.p.20.png","address":{"tourism":"Coudenberg","road":"Place des Palais - Paleizenplein","neighbourhood":"Quartier Royal - Koninklijke Wijk","suburb":"Pentagone - Vijfhoek","city_district":"Bruxelles / Brussel","city":"Ville de Bruxelles - Stad Brussel","county":"Brussel-Hoofdstad - Bruxelles-Capitale","region":"Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest","postcode":"1000","country":"België / Belgique / Belgien","country_code":"be"},"extratags":{"wikidata":"Q1131821","wikipedia":"fr:Palais du Coudenberg","wheelchair":"limited","contact:email":"[email protected]","contact:phone":"+32 2 500 45 54","description:fr":"Ancien Palais de Bruxelles","description:nl":"Voormalig Paleis van Brussel","contact:website":"https://www.coudenberg.com"}},{"place_id":24442199,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":2514258901,"boundingbox":["50.8426856","50.8427856","4.3604126","4.3605126"],"lat":"50.8427356","lon":"4.3604626","display_name":"Musée BELvue - BELvue Museum, Place des Palais - Paleizenplein, Quartier Royal - Koninklijke Wijk, Pentagone - Vijfhoek, Bruxelles / Brussel, Ville de Bruxelles - Stad Brussel, Brussel-Hoofdstad - Bruxelles-Capitale, Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest, 1000, België / Belgique / Belgien","place_rank":30,"category":"tourism","type":"museum","importance":0.8785144183561604,"icon":"https://nominatim.openstreetmap.org/ui/mapicons//tourist_museum.p.20.png","address":{"tourism":"Musée BELvue - BELvue Museum","road":"Place des Palais - Paleizenplein","neighbourhood":"Quartier Royal - Koninklijke Wijk","suburb":"Pentagone - Vijfhoek","city_district":"Bruxelles / Brussel","city":"Ville de Bruxelles - Stad Brussel","county":"Brussel-Hoofdstad - Bruxelles-Capitale","region":"Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest","postcode":"1000","country":"België / Belgique / Belgien","country_code":"be"},"extratags":{"wikidata":"Q728437","wikipedia":"en:BELvue Museum","wheelchair":"limited","opening_hours":"Mo off; Tu-Fr 09:00-17:00; Sa-Su 10:00-18:00; Jul-Aug Tu-Fr 10:00-18:00; Jan 1 off; Dec 24 09:00-16:00; Dec 25 off; Dec 31 09:00-16:00","contact:website":"https://belvue.be/"}},{"place_id":24692458,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":2514258857,"boundingbox":["50.8418523","50.8419523","4.3621672","4.3622672"],"lat":"50.8419023","lon":"4.3622172","display_name":"1, Place des Palais - Paleizenplein, Quartier Royal - Koninklijke Wijk, Pentagone - Vijfhoek, Bruxelles / Brussel, Ville de Bruxelles - Stad Brussel, Brussel-Hoofdstad - Bruxelles-Capitale, Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest, 1000, België / Belgique / Belgien","place_rank":30,"category":"place","type":"house","importance":0.621,"address":{"house_number":"1","road":"Place des Palais - Paleizenplein","neighbourhood":"Quartier Royal - Koninklijke Wijk","suburb":"Pentagone - Vijfhoek","city_district":"Bruxelles / Brussel","city":"Ville de Bruxelles - Stad Brussel","county":"Brussel-Hoofdstad - Bruxelles-Capitale","region":"Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest","postcode":"1000","country":"België / Belgique / Belgien","country_code":"be"},"extratags":{"ref:UrbIS":"8187967"}},{"place_id":69329727,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":6187308685,"boundingbox":["50.8426692","50.8427692","4.3603905","4.3604905"],"lat":"50.8427192","lon":"4.3604405","display_name":"Place des Palais - Paleizenplein, Quartier Royal - Koninklijke Wijk, Pentagone - Vijfhoek, Bruxelles / Brussel, Ville de Bruxelles - Stad Brussel, Brussel-Hoofdstad - Bruxelles-Capitale, Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest, 1000, België / Belgique / Belgien","place_rank":30,"category":"emergency","type":"defibrillator","importance":0.611,"address":{"road":"Place des Palais - Paleizenplein","neighbourhood":"Quartier Royal - Koninklijke Wijk","suburb":"Pentagone - Vijfhoek","city_district":"Bruxelles / Brussel","city":"Ville de Bruxelles - Stad Brussel","county":"Brussel-Hoofdstad - Bruxelles-Capitale","region":"Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest","postcode":"1000","country":"België / Belgique / Belgien","country_code":"be"},"extratags":{"description:fr":"musée belvue, entrée place des palais puis à droite"}}]";

src/Provider/Nominatim/Tests/.cached_responses/nominatim.openstreetmap.org_587636b4f0e7139858b4390498946009583bc32d

Lines changed: 0 additions & 1 deletion
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
s:789:"{"place_id":"6844569","licence":"Data © OpenStreetMap contributors, ODbL 1.0. https:\/\/osm.org\/copyright","osm_type":"node","osm_id":"700309516","lat":"48.8600408","lon":"2.3499857","place_rank":"30","category":"amenity","type":"cafe","importance":"0","addresstype":"amenity","name":"Bistrot Beaubourg","display_name":"Bistrot Beaubourg, 25, Rue Quincampoix, Beaubourg, St-Merri, 3e, Paris, Île-de-France, France métropolitaine, 75004, France","address":{"cafe":"Bistrot Beaubourg","house_number":"25","pedestrian":"Rue Quincampoix","neighbourhood":"Beaubourg","suburb":"St-Merri","city_district":"3e","city":"Paris","county":"Paris","state":"Île-de-France","country":"France","postcode":"75004","country_code":"fr"},"boundingbox":["48.8599408","48.8601408","2.3498857","2.3500857"]}";
1+
s:777:"{"place_id":7323219,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":855292284,"lat":"48.8604416","lon":"2.3503543","place_rank":30,"category":"amenity","type":"cafe","importance":0,"addresstype":"amenity","name":"Starbucks","display_name":"Starbucks, Rue Quincampoix, Beaubourg, Quartier Saint-Merri, Paris 4e Arrondissement, Paris, Île-de-France, France métropolitaine, 75004, France","address":{"amenity":"Starbucks","road":"Rue Quincampoix","neighbourhood":"Beaubourg","suburb":"Paris 4e Arrondissement","city":"Paris","municipality":"Paris","county":"Paris","state":"Île-de-France","country":"France","postcode":"75004","country_code":"fr"},"boundingbox":["48.8603916","48.8604916","2.3503043","2.3504043"]}";

src/Provider/Nominatim/Tests/.cached_responses/nominatim.openstreetmap.org_5ff6cd6f94ae2f70cf5300217327b77f9eda7435

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)