Skip to content

Commit 5d4db0d

Browse files
committed
Merge pull request #265 from nicolas-grekas/patch-1
Update YandexProvider.php
2 parents d0fd842 + 0c006a6 commit 5d4db0d

File tree

2 files changed

+46
-39
lines changed

2 files changed

+46
-39
lines changed

src/Geocoder/Provider/YandexProvider.php

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -108,32 +108,39 @@ protected function executeQuery($query)
108108
$results = array();
109109

110110
foreach ($data as $item) {
111-
$item = $item['GeoObject'];
112-
$country = $item['metaDataProperty']['GeocoderMetaData']['AddressDetails']['Country'];
113-
$addressDetails = isset($country['AdministrativeArea']) ? $country['AdministrativeArea'] : $country;
114-
$locality = isset($addressDetails['Locality']) ? $addressDetails['Locality'] : null;
115-
$thoroughfare = isset($locality['Thoroughfare']) ? $locality['Thoroughfare'] : null;
116-
$coordinates = explode(' ', $item['Point']['pos']);
117-
$bounds = null;
118-
$lowerCorner = explode(' ', $item['boundedBy']['Envelope']['lowerCorner']);
119-
$upperCorner = explode(' ', $item['boundedBy']['Envelope']['upperCorner']);
120-
$bounds = array(
121-
'south' => isset($lowerCorner[1]) ? $lowerCorner[1] : null,
122-
'west' => isset($lowerCorner[0]) ? $lowerCorner[0] : null,
123-
'north' => isset($upperCorner[1]) ? $upperCorner[1] : null,
124-
'east' => isset($upperCorner[0]) ? $upperCorner[0] : null
111+
$bounds = null;
112+
$details = array('pos' => ' ');
113+
114+
array_walk_recursive(
115+
$item['GeoObject'],
116+
function($value, $key) use (&$details) {$details[$key] = $value;}
125117
);
126118

119+
if (! empty($details['lowerCorner'])) {
120+
$coordinates = explode(' ', $details['lowerCorner']);
121+
$bounds['south'] = $coordinates[1];
122+
$bounds['west'] = $coordinates[0];
123+
}
124+
125+
if (! empty($details['upperCorner'])) {
126+
$coordinates = explode(' ', $details['upperCorner']);
127+
$bounds['north'] = $coordinates[1];
128+
$bounds['east'] = $coordinates[0];
129+
}
130+
131+
$coordinates = explode(' ', $details['pos']);
132+
127133
$results[] = array_merge($this->getDefaults(), array(
128-
'latitude' => isset($coordinates[1]) ? $coordinates[1] : null,
129-
'longitude' => isset($coordinates[0]) ? $coordinates[0] : null,
134+
'latitude' => $coordinates[1],
135+
'longitude' => $coordinates[0],
130136
'bounds' => $bounds,
131-
'streetNumber' => isset($thoroughfare['Premise']['PremiseNumber']) ? $thoroughfare['Premise']['PremiseNumber'] : null,
132-
'streetName' => isset($thoroughfare['ThoroughfareName']) ? $thoroughfare['ThoroughfareName'] : null,
133-
'city' => isset($locality['LocalityName']) ? $locality['LocalityName'] : null,
134-
'cityDistrict' => isset($addressDetails['AdministrativeAreaName']) ? $addressDetails['AdministrativeAreaName'] : null,
135-
'country' => isset($country['CountryName']) ? $country['CountryName'] : null,
136-
'countryCode' => isset($country['CountryNameCode']) ? $country['CountryNameCode'] : null,
137+
'streetNumber' => isset($details['PremiseNumber']) ? $details['PremiseNumber'] : null,
138+
'streetName' => isset($details['ThoroughfareName']) ? $details['ThoroughfareName'] : null,
139+
'cityDistrict' => isset($details['DependentLocalityName']) ? $details['DependentLocalityName'] : null,
140+
'city' => isset($details['LocalityName']) ? $details['LocalityName'] : null,
141+
'region' => isset($details['AdministrativeAreaName']) ? $details['AdministrativeAreaName'] : null,
142+
'country' => isset($details['CountryName']) ? $details['CountryName'] : null,
143+
'countryCode' => isset($details['CountryNameCode']) ? $details['CountryNameCode'] : null,
137144
));
138145
}
139146

tests/Geocoder/Tests/Provider/YandexProviderTest.php

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ public function testGetGeocodedDataWithRealAddress()
102102
$this->assertEquals(48.864629, $results[0]['bounds']['north'], '', 0.01);
103103
$this->assertEquals(2.391064, $results[0]['bounds']['east'], '', 0.01);
104104
$this->assertEquals(10, $results[0]['streetNumber']);
105-
$this->assertEquals('Иль-Де-Франс', $results[0]['cityDistrict']);
105+
$this->assertEquals('Иль-Де-Франс', $results[0]['region']);
106106
$this->assertEquals('Avenue Gambetta', $results[0]['streetName']);
107107
$this->assertEquals('Франция', $results[0]['country']);
108108
$this->assertEquals('FR', $results[0]['countryCode']);
109109

110110
// not provided
111111
$this->assertNull($results[0]['zipcode']);
112112
$this->assertNull($results[0]['city']);
113-
$this->assertNull($results[0]['region']);
113+
$this->assertNull($results[0]['cityDistrict']);
114114
$this->assertNull($results[0]['regionCode']);
115115
$this->assertNull($results[0]['timezone']);
116116

@@ -147,15 +147,15 @@ public function testGetGeocodedDataWithRealAddressWithUALocale()
147147
$this->assertEquals(55.73259, $results[0]['bounds']['north'], '', 0.01);
148148
$this->assertEquals(12.65075, $results[0]['bounds']['east'], '', 0.01);
149149
$this->assertNull($results[0]['streetNumber']);
150-
$this->assertEquals('Столичная область', $results[0]['cityDistrict']);
150+
$this->assertEquals('Столичная область', $results[0]['region']);
151151
$this->assertNull($results[0]['streetName']);
152152
$this->assertEquals('Копенгаген', $results[0]['city']);
153153
$this->assertEquals('Данія', $results[0]['country']);
154154
$this->assertEquals('DK', $results[0]['countryCode']);
155155

156156
// not provided
157157
$this->assertNull($results[0]['zipcode']);
158-
$this->assertNull($results[0]['region']);
158+
$this->assertNull($results[0]['cityDistrict']);
159159
$this->assertNull($results[0]['regionCode']);
160160
$this->assertNull($results[0]['timezone']);
161161

@@ -191,15 +191,15 @@ public function testGetGeocodedDataWithRealAddressWithUSLocale()
191191
$this->assertEquals(-77.058078, $results[0]['bounds']['west'], '', 0.01);
192192
$this->assertEquals(38.90032, $results[0]['bounds']['north'], '', 0.01);
193193
$this->assertEquals(-77.012453, $results[0]['bounds']['east'], '', 0.01);
194-
$this->assertEquals('District of Columbia', $results[0]['cityDistrict']);
194+
$this->assertEquals('District of Columbia', $results[0]['region']);
195195
$this->assertEquals('Pennsylvania Ave NW', $results[0]['streetName']);
196196
$this->assertEquals('Washington', $results[0]['city']);
197197
$this->assertEquals('United States', $results[0]['country']);
198198
$this->assertEquals('US', $results[0]['countryCode']);
199199

200200
// not provided
201201
$this->assertNull($results[0]['zipcode']);
202-
$this->assertNull($results[0]['region']);
202+
$this->assertNull($results[0]['cityDistrict']);
203203
$this->assertNull($results[0]['regionCode']);
204204
$this->assertNull($results[0]['timezone']);
205205

@@ -226,15 +226,15 @@ public function testGetGeocodedDataWithRealAddressWithBYLocale()
226226
$this->assertEquals(53.899286, $result['bounds']['north'], '', 0.01);
227227
$this->assertEquals(27.565721, $result['bounds']['east'], '', 0.01);
228228
$this->assertEquals(19, $result['streetNumber']);
229-
$this->assertNull($result['cityDistrict']);
229+
$this->assertNull($result['region']);
230230
$this->assertEquals('улица Ленина', $result['streetName']);
231231
$this->assertEquals('Минск', $result['city']);
232232
$this->assertEquals('Беларусь', $result['country']);
233233
$this->assertEquals('BY', $result['countryCode']);
234234

235235
// not provided
236236
$this->assertNull($result['zipcode']);
237-
$this->assertNull($result['region']);
237+
$this->assertNull($result['cityDistrict']);
238238
$this->assertNull($result['regionCode']);
239239
$this->assertNull($result['timezone']);
240240
}
@@ -285,15 +285,15 @@ public function testGetReversedDataWithRealCoordinates()
285285
$this->assertEquals(48.877038, $results[0]['bounds']['north'], '', 0.01);
286286
$this->assertEquals(2.423214, $results[0]['bounds']['east'], '', 0.01);
287287
$this->assertNull($results[0]['streetNumber']);
288-
$this->assertEquals('Иль-Де-Франс', $results[0]['cityDistrict']);
288+
$this->assertEquals('Иль-Де-Франс', $results[0]['region']);
289289
$this->assertEquals('Avenue Gambetta', $results[0]['streetName']);
290290
$this->assertEquals('Франция', $results[0]['country']);
291291
$this->assertEquals('FR', $results[0]['countryCode']);
292292

293293
// not provided
294294
$this->assertNull($results[0]['zipcode']);
295295
$this->assertNull($results[0]['city']);
296-
$this->assertNull($results[0]['region']);
296+
$this->assertNull($results[0]['cityDistrict']);
297297
$this->assertNull($results[0]['regionCode']);
298298
$this->assertNull($results[0]['timezone']);
299299

@@ -322,15 +322,15 @@ public function testGetReversedDataWithRealCoordinatesWithUSLocaleAndStreeTopony
322322
$this->assertEquals(48.877038, $results[0]['bounds']['north'], '', 0.01);
323323
$this->assertEquals(2.423214, $results[0]['bounds']['east'], '', 0.01);
324324
$this->assertNull($results[0]['streetNumber']);
325-
$this->assertEquals('Ile-de-France', $results[0]['cityDistrict']);
325+
$this->assertEquals('Ile-de-France', $results[0]['region']);
326326
$this->assertEquals('Avenue Gambetta', $results[0]['streetName']);
327327
$this->assertEquals('France', $results[0]['country']);
328328
$this->assertEquals('FR', $results[0]['countryCode']);
329329

330330
// not provided
331331
$this->assertNull($results[0]['zipcode']);
332332
$this->assertNull($results[0]['city']);
333-
$this->assertNull($results[0]['region']);
333+
$this->assertNull($results[0]['cityDistrict']);
334334
$this->assertNull($results[0]['regionCode']);
335335
$this->assertNull($results[0]['timezone']);
336336

@@ -367,15 +367,15 @@ public function testGetReversedDataWithRealCoordinatesWithUALocaleAndHouseTopony
367367
$this->assertEquals(60.455474, $results[0]['bounds']['north'], '', 0.01);
368368
$this->assertEquals(22.258609, $results[0]['bounds']['east'], '', 0.01);
369369
$this->assertEquals(36, $results[0]['streetNumber']);
370-
$this->assertEquals('Исконная Финляндия', $results[0]['cityDistrict']);
370+
$this->assertEquals('Исконная Финляндия', $results[0]['region']);
371371
//$this->assertEquals('Bangårdsgatan', $results[0]['streetName']);
372372
$this->assertEquals('Турку', $results[0]['city']);
373373
$this->assertEquals('Фінляндія', $results[0]['country']);
374374
$this->assertEquals('FI', $results[0]['countryCode']);
375375

376376
// not provided
377377
$this->assertNull($results[0]['zipcode']);
378-
$this->assertNull($results[0]['region']);
378+
$this->assertNull($results[0]['cityDistrict']);
379379
$this->assertNull($results[0]['regionCode']);
380380
$this->assertNull($results[0]['timezone']);
381381
}
@@ -396,15 +396,15 @@ public function testGetReversedDataWithRealCoordinatesWithTRLocaleAndLocalityTop
396396
$this->assertEquals(40.960403, $results[0]['bounds']['north'], '', 0.01);
397397
$this->assertEquals(29.204508, $results[0]['bounds']['east'], '', 0.01);
398398
$this->assertNull($results[0]['streetNumber']);
399-
$this->assertEquals('İstanbul', $results[0]['cityDistrict']);
399+
$this->assertEquals('İstanbul', $results[0]['region']);
400400
$this->assertNull($results[0]['streetName']);
401+
$this->assertEquals('Dragos', $results[0]['city']);
401402
$this->assertEquals('Türkiye', $results[0]['country']);
402403
$this->assertEquals('TR', $results[0]['countryCode']);
403404

404405
// not provided
405406
$this->assertNull($results[0]['zipcode']);
406-
$this->assertNull($results[0]['city']);
407-
$this->assertNull($results[0]['region']);
407+
$this->assertNull($results[0]['cityDistrict']);
408408
$this->assertNull($results[0]['regionCode']);
409409
$this->assertNull($results[0]['timezone']);
410410

0 commit comments

Comments
 (0)