1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* Class Reverse |
4
|
|
|
* |
5
|
|
|
* @package maxh\nominatim |
6
|
|
|
* @author Maxime Hélias <[email protected]> |
7
|
|
|
*/ |
8
|
|
|
|
9
|
|
|
namespace maxh\Nominatim; |
10
|
|
|
|
11
|
|
|
use maxh\Nominatim\Exceptions\InvalidParameterException; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* Reverse Geocoding a OSM nominatim service for places. |
15
|
|
|
* |
16
|
|
|
* @see http://wiki.openstreetmap.org/wiki/Nominatim |
17
|
|
|
*/ |
18
|
|
|
class Reverse extends Query |
19
|
|
|
{ |
20
|
|
|
|
21
|
|
|
/** |
22
|
|
|
* Output format accepted |
23
|
|
|
* @var array |
24
|
|
|
*/ |
25
|
|
|
public $accepteFormat = ['xml', 'json']; |
26
|
|
|
|
27
|
|
|
/** |
28
|
|
|
* OSM Type accepted (Node/Way/Relation) |
29
|
|
|
* @var array |
30
|
|
|
*/ |
31
|
|
|
public $osmType = ['N', 'W', 'R']; |
32
|
|
|
|
33
|
|
|
|
34
|
|
|
/** |
35
|
|
|
* Constructo |
36
|
|
|
* @param array $query Default value for this query |
37
|
|
|
*/ |
38
|
|
|
public function __construct(array $query = []) |
39
|
|
|
{ |
40
|
|
|
parent::__construct(); |
41
|
|
|
|
42
|
|
|
$this->setPath('reverse'); |
43
|
|
|
|
44
|
|
|
} |
45
|
|
|
|
46
|
|
|
// -- Builder methods ------------------------------------------------------ |
47
|
|
|
|
48
|
|
|
/** |
49
|
|
|
* [osmType description] |
50
|
|
|
* |
51
|
|
|
* @param string $type |
52
|
|
|
* |
53
|
|
|
* @return maxh\Nominatim\Reverse |
54
|
|
|
* @throws maxh\Nominatim\Exceptions\InvalidParameterException if osm type is not supported |
55
|
|
|
*/ |
56
|
|
|
public function osmType($type) |
57
|
|
|
{ |
58
|
|
|
if(in_array($type, $this->osmType)) |
59
|
|
|
{ |
60
|
|
|
$this->query['osm_type'] = $type; |
61
|
|
|
|
62
|
|
|
return $this; |
63
|
|
|
} |
64
|
|
|
|
65
|
|
|
throw new InvalidParameterException("OSM Type is not supported"); |
66
|
|
|
|
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* A specific osm node / way / relation to return an address for. |
71
|
|
|
* |
72
|
|
|
* @param integer $id |
73
|
|
|
* |
74
|
|
|
* @return maxh\Nominatim\Reverse |
75
|
|
|
*/ |
76
|
|
|
public function osmId($id) |
77
|
|
|
{ |
78
|
|
|
$this->query['osm_id'] = $id; |
79
|
|
|
|
80
|
|
|
return $this; |
81
|
|
|
} |
82
|
|
|
|
83
|
|
|
/** |
84
|
|
|
* The location to generate an address for |
85
|
|
|
* |
86
|
|
|
* @param float $lat The latitude |
87
|
|
|
* @param float $lon The longitude |
88
|
|
|
* |
89
|
|
|
* @return maxh\Nominatim\Reverse |
90
|
|
|
*/ |
91
|
|
|
public function latlon($lat, $lon) |
92
|
|
|
{ |
93
|
|
|
$this->query['lat'] = $lat; |
94
|
|
|
|
95
|
|
|
$this->query['lon'] = $lon; |
96
|
|
|
|
97
|
|
|
return $this; |
98
|
|
|
} |
99
|
|
|
|
100
|
|
|
/** |
101
|
|
|
* Level of detail required where 0 is country and 18 is house/building |
102
|
|
|
* |
103
|
|
|
* @param integer $zoom |
104
|
|
|
* |
105
|
|
|
* @return maxh\Nominatim\Reverse |
106
|
|
|
*/ |
107
|
|
|
public function zoom($zoom) |
108
|
|
|
{ |
109
|
|
|
$this->query['zoom'] = strval($zoom); |
110
|
|
|
|
111
|
|
|
return $this; |
112
|
|
|
} |
113
|
|
|
|
114
|
|
|
/** |
115
|
|
|
* Output format for the geometry of results |
116
|
|
|
* |
117
|
|
|
* @param string $polygon |
118
|
|
|
* |
119
|
|
|
* @return maxh\Nominatim\Reverse |
120
|
|
|
* @throws maxh\Nominatim\Exceptions\InvalidParameterException if polygon format is not supported |
121
|
|
|
*/ |
122
|
|
View Code Duplication |
public function polygon($polygon) |
|
|
|
|
123
|
|
|
{ |
124
|
|
|
if(in_array($polygon, $this->polygon)) |
125
|
|
|
{ |
126
|
|
|
$this->query['polygon_'.$polygon] = "1"; |
127
|
|
|
|
128
|
|
|
return $this; |
129
|
|
|
} |
130
|
|
|
|
131
|
|
|
throw new InvalidParameterException("This polygon format is not supported"); |
132
|
|
|
} |
133
|
|
|
|
134
|
|
|
|
135
|
|
|
} |
136
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.