@@ -73,6 +73,22 @@ public function geocodeQuery(GeocodeQuery $query): Collection
73
73
$ url = sprintf ('%s&language=%s ' , $ url , $ query ->getLocale ());
74
74
}
75
75
76
+ return $ this ->executeQuery ($ url );
77
+
78
+ }
79
+
80
+ public function reverseQuery (ReverseQuery $ query ): Collection
81
+ {
82
+ throw new UnsupportedOperation ('The Ipstack provider is not able to do reverse geocoding. ' );
83
+ }
84
+
85
+ public function getName (): string
86
+ {
87
+ return 'ipstack ' ;
88
+ }
89
+
90
+ private function executeQuery (string $ url ): AddressCollection
91
+ {
76
92
$ body = $ this ->getUrlContents ($ url );
77
93
$ data = json_decode ($ body , true );
78
94
@@ -99,26 +115,17 @@ public function geocodeQuery(GeocodeQuery $query): Collection
99
115
return new AddressCollection ([]);
100
116
}
101
117
102
- $ locations [] = Address::createFromArray ([
103
- 'providedBy ' => $ this ->getName (),
104
- 'latitude ' => $ data ['latitude ' ] ?: null ,
105
- 'longitude ' => $ data ['longitude ' ] ?: null ,
106
- 'locality ' => $ data ['city ' ] ?: null ,
107
- 'postalCode ' => $ data ['zip ' ] ?: null ,
108
- 'country ' => $ data ['country_name ' ] ?: null ,
109
- 'countryCode ' => $ data ['country_code ' ] ?: null ,
118
+ return new AddressCollection ([
119
+ Address::createFromArray ([
120
+ 'providedBy ' => $ this ->getName (),
121
+ 'latitude ' => $ data ['latitude ' ] ?? null ,
122
+ 'longitude ' => $ data ['longitude ' ] ?? null ,
123
+ 'locality ' => $ data ['city ' ] ?? null ,
124
+ 'postalCode ' => $ data ['zip ' ] ?? null ,
125
+ 'country ' => $ data ['country_name ' ] ?? null ,
126
+ 'adminLevels ' => isset ($ data ['region_name ' ]) ? [['name ' => $ data ['region_name ' ], 'level ' => 1 ]] : [],
127
+ 'countryCode ' => $ data ['country_code ' ] ?? null ,
128
+ ])
110
129
]);
111
-
112
- return new AddressCollection ($ locations );
113
- }
114
-
115
- public function reverseQuery (ReverseQuery $ query ): Collection
116
- {
117
- throw new UnsupportedOperation ('The Ipstack provider is not able to do reverse geocoding. ' );
118
- }
119
-
120
- public function getName (): string
121
- {
122
- return 'ipstack ' ;
123
130
}
124
131
}
0 commit comments