2011-11-19 21 views
2

当我添加:ElasticSearch脚本场返回不正确的经度值

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

到我的查询,经度值不同的是什么在源文件中的显示。

在这里你能看到我拿来了DOC [“纬度”] lon和.lat和_source.Latitude比较查询结果:

https://gist.github.com/d9533170f1f50fd27e87(注意 - 这些都已经穿过json_decode in PHP,但数据在使用json_decode之前是相同的。)

当我使用“doc ['field_name']。distance(lat,lon)”来尝试添加距离作为字段到我的查询。我尝试了“script_fields”和“fields”键,每个键都有相同的结果。

更新:我注意到, “DOC [ '位置'] LON。” 正在恢复了我认为应该是DOC [ '位置'] LAT(lat和LON切换。)

回答

5

的。问题是,当使用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 
+0

David,不幸的是,这是使用Spatial数据时常见的问题。 x,y!= y,x和美国许多人经常把x与纬度联系起来。 – aeupinhere