1
|
|
|
<?php |
2
|
|
|
/** |
3
|
|
|
* @copyright Copyright (c) 2013-2019 2amigOS! Consulting Group LLC |
4
|
|
|
* @link http://2amigos.us |
5
|
|
|
* @license http://www.opensource.org/licenses/bsd-license.php New BSD License |
6
|
|
|
*/ |
7
|
|
|
namespace dosamigos\leaflet\plugins\geocoder; |
8
|
|
|
|
9
|
|
|
use yii\base\InvalidConfigException; |
10
|
|
|
use yii\helpers\Json; |
11
|
|
|
use yii\web\JsExpression; |
12
|
|
|
|
13
|
|
|
/** |
14
|
|
|
* ServiceNominatim provides the required code and js files to use Nominatim geocoding service |
15
|
|
|
* |
16
|
|
|
* @author Antonio Ramirez <[email protected]> |
17
|
|
|
* @link http://www.ramirezcobos.com/ |
18
|
|
|
* @link http://www.2amigos.us/ |
19
|
|
|
* @package dosamigos\leaflet\plugins\geocoder |
20
|
|
|
*/ |
21
|
|
|
class ServiceNominatim extends BaseService |
22
|
|
|
{ |
23
|
|
|
/** |
24
|
|
|
* @var string the URL of the service |
25
|
|
|
*/ |
26
|
|
|
public $serviceUrl = '//nominatim.openstreetmap.org/'; |
27
|
|
|
/** |
28
|
|
|
* @var array additional URL parameters (strings) that will be added to geocoding requests |
29
|
|
|
*/ |
30
|
|
|
public $geocodingQueryParams = []; |
31
|
|
|
/** |
32
|
|
|
* @var array additional URL parameters (strings) that will be added to reverse geocoding requests |
33
|
|
|
*/ |
34
|
|
|
public $reverseQueryParams = []; |
35
|
|
|
|
36
|
|
|
/** |
37
|
|
|
* @inheritdoc |
38
|
|
|
* @codeCoverageIgnore |
39
|
|
|
*/ |
40
|
|
|
public function registerAssetBundle($view) |
41
|
|
|
{ |
42
|
|
|
ServiceNominatimAsset::register($view); |
43
|
|
|
} |
44
|
|
|
|
45
|
|
|
/** |
46
|
|
|
* @return \yii\web\JsExpression the javascript code for the geocoder option to be set |
47
|
|
|
*/ |
48
|
3 |
|
public function getJs() |
49
|
|
|
{ |
50
|
3 |
|
$options['serviceUrl'] = $this->serviceUrl; |
|
|
|
|
51
|
3 |
|
$options['geocodingQueryParams'] = !empty($this->geocodingQueryParams) ? $this->geocodingQueryParams : '{}'; |
52
|
3 |
|
$options['reverseQueryParams'] = !empty($this->reverseQueryParams) ? $this->reverseQueryParams : '{}'; |
53
|
3 |
|
$options = Json::encode($options); |
54
|
3 |
|
return new JsExpression("L.Control.Geocoder.nominatim({$options})"); |
55
|
|
|
} |
56
|
|
|
|
57
|
|
|
} |
58
|
|
|
|
Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.
Let’s take a look at an example:
As you can see in this example, the array
$myArray
is initialized the first time when the foreach loop is entered. You can also see that the value of thebar
key is only written conditionally; thus, its value might result from a previous iteration.This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.