Elasticsearch 中 [GeoDistanceSort] 的非法纬度值

illegal latitude value for [GeoDistanceSort] in Elasticsearch

使用 elasticsearch 进行地理距离排序时出现问题,在尝试定义位置 pin 时返回错误。使用 Elastica PHP 客户端。

$base->addSort([
    '_geo_distance' => [
        'location' => $location,
        'order' => 'asc',
        'unit' => 'm'
    ]
]);

错误是;

illegal latitude value [269.58378318697214] for [GeoDistanceSort] [reason: all shards failed]

这表明纬度值 >180,但该值仅为 51.561965753874624,经度为 -0.38245278430174103(从 google 地图中检索)。

在输入排序函数之前,我已经检查过这些值仍然如上。

我发现问题在于 elasticsearch 不喜欢地图位置的精确度!

我实施了以下操作将值四舍五入到小数点后 6 位,效果很好。

foreach ($mapcentre as $deg) {
    $location[] = round($deg, 6);
}