Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 990ab98

Browse files
committed
Yandex Provider support 2 admin levels (+minor fixes)
1 parent 34284c2 commit 990ab98

File tree

2 files changed

+28
-16
lines changed

2 files changed

+28
-16
lines changed

src/Geocoder/Provider/Yandex.php

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -122,27 +122,28 @@ function ($value, $key) use (&$details) {$details[$key] = $value;}
122122

123123
if (! empty($details['lowerCorner'])) {
124124
$coordinates = explode(' ', $details['lowerCorner']);
125-
$bounds['south'] = $coordinates[1];
126-
$bounds['west'] = $coordinates[0];
125+
$bounds['south'] = (float) $coordinates[1];
126+
$bounds['west'] = (float) $coordinates[0];
127127
}
128128

129129
if (! empty($details['upperCorner'])) {
130130
$coordinates = explode(' ', $details['upperCorner']);
131-
$bounds['north'] = $coordinates[1];
132-
$bounds['east'] = $coordinates[0];
131+
$bounds['north'] = (float) $coordinates[1];
132+
$bounds['east'] = (float) $coordinates[0];
133133
}
134134

135135
$coordinates = explode(' ', $details['pos']);
136136

137137
$adminLevels = [];
138-
139-
if (isset($details['AdministrativeAreaName'])) {
140-
$adminLevels[] = ['name' => $details['AdministrativeAreaName'], 'level' => 1];
138+
foreach (['AdministrativeAreaName', 'SubAdministrativeAreaName'] as $i => $detail) {
139+
if (isset($details[$detail])) {
140+
$adminLevels[] = ['name' => $details[$detail], 'level' => $i + 1];
141+
}
141142
}
142143

143144
$results[] = array_merge($this->getDefaults(), array(
144-
'latitude' => $coordinates[1],
145-
'longitude' => $coordinates[0],
145+
'latitude' => (float) $coordinates[1],
146+
'longitude' => (float) $coordinates[0],
146147
'bounds' => $bounds,
147148
'streetNumber' => isset($details['PremiseNumber']) ? $details['PremiseNumber'] : null,
148149
'streetName' => isset($details['ThoroughfareName']) ? $details['ThoroughfareName'] : null,

tests/Geocoder/Tests/Provider/YandexTest.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,15 @@ public function testGeocodeWithRealAddress()
108108
$this->assertEquals('Avenue Gambetta', $result->getStreetName());
109109
$this->assertEquals('Париж', $result->getLocality());
110110
$this->assertEquals('XX округ', $result->getSubLocality());
111-
$this->assertCount(1, $result->getAdminLevels());
111+
$this->assertCount(2, $result->getAdminLevels());
112+
$this->assertEquals('Париж', $result->getAdminLevels()->get(2)->getName());
112113
$this->assertEquals('Иль-Де-Франс', $result->getAdminLevels()->get(1)->getName());
113114
$this->assertEquals('Франция', $result->getCountry()->getName());
114115
$this->assertEquals('FR', $result->getCountry()->getCode());
115116

116117
// not provided
117118
$this->assertNull($result->getPostalCode());
119+
$this->assertNull($result->getAdminLevels()->get(2)->getCode());
118120
$this->assertNull($result->getAdminLevels()->get(1)->getCode());
119121
$this->assertNull($result->getTimezone());
120122
}
@@ -140,7 +142,7 @@ public function testGeocodeWithRealAddressWithUALocale()
140142
$this->assertNull($result->getStreetNumber());
141143
$this->assertNull($result->getStreetName());
142144
$this->assertEquals('Копенгаген', $result->getLocality());
143-
$this->assertCount(1, $result->getAdminLevels());
145+
$this->assertCount(2, $result->getAdminLevels());
144146
$this->assertEquals('Столичная область', $result->getAdminLevels()->get(1)->getName());
145147
$this->assertEquals('Данія', $result->getCountry()->getName());
146148
$this->assertEquals('DK', $result->getCountry()->getCode());
@@ -197,7 +199,8 @@ public function testGeocodeWithRealAddressWithUSLocale()
197199
$this->assertEquals(1600, $result->getStreetNumber());
198200
$this->assertEquals('Pennsylvania Ave NW', $result->getStreetName());
199201
$this->assertEquals('Washington', $result->getLocality());
200-
$this->assertCount(1, $result->getAdminLevels());
202+
$this->assertCount(2, $result->getAdminLevels());
203+
$this->assertEquals('District of Columbia', $result->getAdminLevels()->get(2)->getName());
201204
$this->assertEquals('District of Columbia', $result->getAdminLevels()->get(1)->getName());
202205
$this->assertEquals('United States', $result->getCountry()->getName());
203206
$this->assertEquals('US', $result->getCountry()->getCode());
@@ -293,13 +296,15 @@ public function testReverseWithRealCoordinates()
293296
$this->assertEquals('Avenue Gambetta', $result->getStreetName());
294297
$this->assertEquals('Париж', $result->getLocality());
295298
$this->assertEquals('XX округ', $result->getSubLocality());
296-
$this->assertCount(1, $result->getAdminLevels());
299+
$this->assertCount(2, $result->getAdminLevels());
300+
$this->assertEquals('Париж', $result->getAdminLevels()->get(2)->getName());
297301
$this->assertEquals('Иль-Де-Франс', $result->getAdminLevels()->get(1)->getName());
298302
$this->assertEquals('Франция', $result->getCountry()->getName());
299303
$this->assertEquals('FR', $result->getCountry()->getCode());
300304

301305
// not provided
302306
$this->assertNull($result->getPostalCode());
307+
$this->assertNull($result->getAdminLevels()->get(2)->getCode());
303308
$this->assertNull($result->getAdminLevels()->get(1)->getCode());
304309
$this->assertNull($result->getTimezone());
305310

@@ -338,13 +343,15 @@ public function testReverseWithRealCoordinatesWithUSLocaleAndStreeToponym()
338343
$this->assertEquals('Avenue Gambetta', $result->getStreetName());
339344
$this->assertEquals('20e Arrondissement', $result->getSubLocality());
340345
$this->assertEquals('Paris', $result->getLocality());
341-
$this->assertCount(1, $result->getAdminLevels());
346+
$this->assertCount(2, $result->getAdminLevels());
347+
$this->assertEquals('Paris', $result->getAdminLevels()->get(2)->getName());
342348
$this->assertEquals('Ile-de-France', $result->getAdminLevels()->get(1)->getName());
343349
$this->assertEquals('France', $result->getCountry()->getName());
344350
$this->assertEquals('FR', $result->getCountry()->getCode());
345351

346352
// not provided
347353
$this->assertNull($result->getPostalCode());
354+
$this->assertNull($result->getAdminLevels()->get(2)->getCode());
348355
$this->assertNull($result->getAdminLevels()->get(1)->getCode());
349356
$this->assertNull($result->getTimezone());
350357

@@ -395,13 +402,15 @@ public function testReverseWithRealCoordinatesWithUALocaleAndHouseToponym()
395402
$this->assertEquals('Bangårdsgatan', $result->getStreetName());
396403
$this->assertEquals('Турку', $result->getLocality());
397404
$this->assertEquals('Кескуста', $result->getSubLocality());
398-
$this->assertCount(1, $result->getAdminLevels());
405+
$this->assertCount(2, $result->getAdminLevels());
406+
$this->assertEquals('Исконная Финляндия', $result->getAdminLevels()->get(2)->getName());
399407
$this->assertEquals('Юго-Западная Финляндия', $result->getAdminLevels()->get(1)->getName());
400408
$this->assertEquals('Фінляндія', $result->getCountry()->getName());
401409
$this->assertEquals('FI', $result->getCountry()->getCode());
402410

403411
// not provided
404412
$this->assertNull($result->getPostalCode());
413+
$this->assertNull($result->getAdminLevels()->get(2)->getCode());
405414
$this->assertNull($result->getAdminLevels()->get(1)->getCode());
406415
$this->assertNull($result->getTimezone());
407416
}
@@ -427,14 +436,16 @@ public function testReverseWithRealCoordinatesWithTRLocaleAndLocalityToponym()
427436
$this->assertNull($result->getStreetName());
428437
$this->assertNull($result->getStreetNumber());
429438
$this->assertEquals('Adalar', $result->getLocality());
430-
$this->assertCount(1, $result->getAdminLevels());
439+
$this->assertCount(2, $result->getAdminLevels());
440+
$this->assertEquals('Adalar', $result->getAdminLevels()->get(2)->getName());
431441
$this->assertEquals('İstanbul', $result->getAdminLevels()->get(1)->getName());
432442
$this->assertEquals('Türkiye', $result->getCountry()->getName());
433443
$this->assertEquals('TR', $result->getCountry()->getCode());
434444

435445
// not provided
436446
$this->assertNull($result->getPostalCode());
437447
$this->assertNull($result->getSubLocality());
448+
$this->assertNull($result->getAdminLevels()->get(2)->getCode());
438449
$this->assertNull($result->getAdminLevels()->get(1)->getCode());
439450
$this->assertNull($result->getTimezone());
440451
}

0 commit comments

Comments
 (0)