原文地址: https://www.elastic.co/guide/cn/elasticsearch/guide/current/lat-lon-formats.html, 版权归 www.elastic.co 所有
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/lat-lon-formats.html
英文版地址: https://www.elastic.co/guide/en/elasticsearch/guide/current/lat-lon-formats.html
请注意:
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
本书基于 Elasticsearch 2.x 版本,有些内容可能已经过时。
经纬度坐标格式 (Lat/Lon Formats)edit
如上例,location
字段被声明为 geo_point
后,我们就可以索引包含了经纬度信息的文档了。经纬度信息的形式可以是字符串、数组或者对象:
PUT /attractions/restaurant/1 { "name": "Chipotle Mexican Grill", "location": "40.715, -74.011" } PUT /attractions/restaurant/2 { "name": "Pala Pizza", "location": { "lat": 40.722, "lon": -73.989 } } PUT /attractions/restaurant/3 { "name": "Mini Munchies Pizza", "location": [ -73.983, 40.719 ] }
可能所有人都至少踩过一次这个坑:地理坐标点用字符串形式表示时是纬度在前,经度在后("latitude,longitude"
),而数组形式表示时是经度在前,纬度在后([longitude,latitude]
) — 顺序刚好相反。
其实,在 Elasticesearch 内部,不管字符串形式还是数组形式,都是经度在前,纬度在后。不过早期为了适配 GeoJSON 的格式规范,调整了数组形式的表示方式。
因此,在使用地理位置的路上就出现了这么一个“捕熊器”,专坑那些不了解这个陷阱的使用者。