GeocodeQuery WithBounds not strictly used across providers that support it
还没有人认领这个 Issue。
评估
调研方向
首先检查 Nominatim provider 现有的 viewbox 和 bounded 处理方式,然后通过 getGeocodeQueryUrl 跟踪 Pelias providers。比较 GeocodeQuery 如何提供 getBounds() 与各 provider 支持的 request 参数。对于支持矩形边界的 provider,只要能够一致地使用 query bounds,而不需要重复的 provider-specific 数据,就算完成。
由索引模型根据 Issue 内容生成。
描述
The WithBounds logic needs to be added to providers, as the method is a base method in the query.
E.g. in Nominatims provider we see:
$viewbox = $query->getData('viewbox');
if (!is_null($viewbox) && is_array($viewbox) && 4 === count($viewbox)) {
$url .= '&'.http_build_query([
'viewbox' => implode(',', $viewbox),
], '', '&', PHP_QUERY_RFC3986);
$bounded = $query->getData('bounded');
if (!is_null($bounded) && true === $bounded) {
$url .= '&'.http_build_query([
'bounded' => 1,
], '', '&', PHP_QUERY_RFC3986);
}
}
The above should instead or in-addition accept $query->getBounds(), because otherwise it forces us to write code like:
// Bounds of EU/UK where our customers are
$euBounds = new Bounds(34.857764, -30.428009, 75.400203, 41.642303);
$geocodeQuery = GeocodeQuery::create($query)
->withBounds($euBounds)
// For Nominatim
->withData('viewbox', $euBounds->toArray());
Pelias Providers and those that extend it don't support it at all -even though Pelias does:
https://github.com/pelias/documentation/blob/master/search.md#search-within-a-rectangular-region
/**
* @param array<string, mixed> $query_data additional query data (API key for instance)
*
* @throws \Geocoder\Exception\Exception
*/
protected function getGeocodeQueryUrl(GeocodeQuery $query, array $query_data = []): string
{
$address = $query->getText();
// This API doesn't handle IPs
if (filter_var($address, FILTER_VALIDATE_IP)) {
throw new UnsupportedOperation(sprintf('The %s provider does not support IP addresses, only street addresses.', $this->getName()));
}
$data = [
'text' => $address,
'size' => $query->getLimit(),
'layers' => null !== $query->getData('layers') ? implode(',', $query->getData('layers')) : null,
'boundary.country' => null !== $query->getData('boundary.country') ? implode(',', $query->getData('boundary.country')) : null,
];
return sprintf('%s/search?%s', $this->root, http_build_query(array_merge($data, $query_data)));
}
- 主要语言
- PHP
- 星标
- 4k
- 派生
- 525
- 平均合并
- 8 分钟
- 30 天内合并 PR
- 1
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
geocoder-php/Geocoder 的其他 Issue
-
难度 1/5 1 小时以内 新手友好度 78/100
geocoder-php/Geocoder#1272 ·
-
question
难度 4/5 3-5 天 新手友好度 25/100
geocoder-php/Geocoder#1267 · 2 条评论 ·
-
难度 1/5 1 小时以内 新手友好度 38/100
geocoder-php/Geocoder#1244 · 2 条评论 · 2 个 reaction ·
-
provider
难度 4/5 3-5 天 新手友好度 30/100
geocoder-php/Geocoder#1243 ·
-
provider
难度 4/5 3-5 天 新手友好度 35/100
geocoder-php/Geocoder#1237 · 1 条评论 · 1 个 reaction ·
查看 geocoder-php/Geocoder 的全部 Issue
相似的 Issue
-
sync-en
难度 1/5 1-3 小时 新手友好度 85/100
-
sync-en
难度 1/5 1-3 小时 新手友好度 85/100
-
Перевод устарел
难度 1/5 1-3 小时 新手友好度 78/100
-
难度 1/5 1 小时以内 新手友好度 90/100
-
难度 2/5 1-3 小时 新手友好度 85/100