Skip to content

Commit bb39c8f

Browse files
authored
Merge pull request #46 from Nyholm/geocodio
Street number on Geocodio
2 parents 4d1a000 + 446d478 commit bb39c8f

File tree

2 files changed

+70
-1
lines changed

2 files changed

+70
-1
lines changed

src/Geocoder/Provider/GeocodioProvider.php

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,19 @@ protected function executeQuery($query)
126126

127127
$coordinates = $location['location'];
128128
$address = $location['address_components'];
129-
$street = $address['street'] ?: null;
129+
130+
//Geocodio does not always return a street, number, or suffix
131+
if (!isset($address['street']) && isset($json['input']['address_components']['street'])) {
132+
//Sometimes Geocodio returns parsed information in the input
133+
$addressInput = $json['input']['address_components'];
134+
$address['street'] = $addressInput['street'];
135+
$address['number'] = $addressInput['number'];
136+
$address['suffix'] = $addressInput['suffix'];
137+
} elseif (!isset($address['street'])) {
138+
$address['street'] = '';
139+
$address['number'] = ''; // No Street = No Number
140+
$address['suffix'] = '';
141+
}
130142

131143
if (!empty($address['suffix'])) {
132144
$address['street'] .= ' ' . $address['suffix'];

tests/Geocoder/Tests/Provider/GeocodioProviderTest.php

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,63 @@ public function testGetGeocodedDataWithRealAddress()
7373
$this->assertNull($result['timezone']);
7474
}
7575

76+
public function testGetGeocodedDataWithRealAddressThatDoesNotReturnStreet()
77+
{
78+
$api_key = $this->getApiKey('GEOCODIO_API_KEY');
79+
80+
if ($api_key === false) {
81+
$this->markTestSkipped(self::MISSING_API_KEY);
82+
}
83+
84+
$provider = new GeocodioProvider($this->getAdapter(), $api_key);
85+
//Geocodio currently incorrectly parses this address, but Geocodio does know of the bug
86+
$results = $provider->getGeocodedData('386 Branam Rd Old Fort TN 37362');
87+
88+
$this->assertInternalType('array', $results);
89+
90+
$result = $results[0];
91+
$this->assertEquals(35.049196999999999, $result['latitude'], '', 0.01);
92+
$this->assertEquals(-84.735365999999999, $result['longitude'], '', 0.01);
93+
$this->assertNull($result['bounds']);
94+
$this->assertEquals('386', $result['streetNumber']);
95+
$this->assertEquals('Branam Rd Old Ft', $result['streetName']); // Testing bad parsing
96+
$this->assertEquals(37362, $result['zipcode']);
97+
$this->assertEquals('Oldfort', $result['city']);
98+
$this->assertNull($result['county']);
99+
$this->assertEquals('TN', $result['region']);
100+
$this->assertEquals('US', $result['country']);
101+
$this->assertNull($result['countryCode']);
102+
$this->assertNull($result['timezone']);
103+
}
104+
105+
public function testGetGeocodedDataWithRealAddressWithoutStreet()
106+
{
107+
$api_key = $this->getApiKey('GEOCODIO_API_KEY');
108+
109+
if ($api_key === false) {
110+
$this->markTestSkipped(self::MISSING_API_KEY);
111+
}
112+
113+
$provider = new GeocodioProvider($this->getAdapter(), $api_key);
114+
$results = $provider->getGeocodedData('Old Fort TN 37362');
115+
116+
$this->assertInternalType('array', $results);
117+
118+
$result = $results[0];
119+
$this->assertEquals(35.049196999999999, $result['latitude'], '', 0.01);
120+
$this->assertEquals(-84.735365999999999, $result['longitude'], '', 0.01);
121+
$this->assertNull($result['bounds']);
122+
$this->assertEquals('', $result['streetNumber']);
123+
$this->assertEquals('', $result['streetName']);
124+
$this->assertEquals(37362, $result['zipcode']);
125+
$this->assertEquals('Oldfort', $result['city']);
126+
$this->assertNull($result['county']);
127+
$this->assertEquals('TN', $result['region']);
128+
$this->assertEquals('US', $result['country']);
129+
$this->assertNull($result['countryCode']);
130+
$this->assertNull($result['timezone']);
131+
}
132+
76133
/**
77134
* @expectedException \Geocoder\Exception\NoResult
78135
*/

0 commit comments

Comments
 (0)