【问题标题】:ElasticSearch Script Field Returns Incorrect Longitude ValueElasticSearch 脚本字段返回不正确的经度值
【发布时间】:2012-01-02 00:56:02
【问题描述】:

当我添加时:

fields: [ "doc['Location'].lon" ]

对于我的查询,经度值与文档源中显示的不同。

您可以在此处查看我获取 doc['Latitude'].lon 和 .lat 以及要比较的 _source.Latitude 的查询结果:

https://gist.github.com/d9533170f1f50fd27e87(注意——这些在PHP中是通过json_decode传递的,但是使用json_decode之前的数据是一样的。)

当我使用 "doc['field_name'].distance(lat, lon)" 尝试将距离作为字段添加到我的查询时,我首先注意到了这一点。我尝试了“script_fields”和“fields”键,结果都一样。

更新:我注意到“doc['Location'].lon”正在返回我认为应该是 doc['Location'].lat 的内容(lat 和 lon 已切换。)

【问题讨论】:

    标签: geolocation geospatial elasticsearch


    【解决方案1】:

    问题在于,当使用 GeoJSON 格式(或使用 lat/long 作为数组)时,您必须switch the order of lat/lng to lng/lat

    我正在重建我的索引,但是,为了解决这个问题,我现在使用了这个查询:

    doc['Location'].distance( lon + 180, lat ) // Temporary bandaid
    

    用正确的值重建索引后,我将切换回:

    doc['field_name'].distance(lat, lon) // The correct method
    

    【讨论】:

    • 大卫,是的,不幸的是,这是处理空间数据时的常见问题。 x,y != y,x 在美国,很多人经常将 x 与纬度联系起来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多