2017-10-10 45 views
0

我對存儲由GPS座標(經度&緯度)和時間戳組成的GPS軌道的最有效(或最智能)方式感興趣。MongoDB:如何存儲包括時間戳在內的GPS軌跡

我在想這兩個思路:

gpsTrack = { 
     "gps_track" : { 
     "type": "FeatureCollection", 
      "features": [ 
       { "type": "Feature", 
       "geometry": {"type": "Point", "coordinates": [104.0, 0.3]}, 
       "properties": { 
        "absolute_timestamp" : "2011-12-31T23:50:59Z" 
       } 
       }, 

      { "type": "Feature", 
       "geometry": {"type": "Point", "coordinates": [128.0, 0.5]}, 
       "properties": { 
        "absolute_timestamp" : "2011-12-31T23:59:59Z" 
       } 
       } 
      ] } 
} 

或者使用以GeoJSON點對多點和時間戳作爲數組。

gpsTrack = { 
     "geometry": {"type": "MultiPoint", "coordinates": [[104.0, 0.3], [128.0, 0.5]]}, 
     "properties": { 
      "timestamps" : ["2011-12-31T23:50:59Z", "2011-12-31T23:59:59Z"] 
} 

航點總數假設爲4.000至10.000,但肯定低於100.000。對於第一個想法,恐怕集合會變得很長,因爲每個點和它的時間戳都是分開存儲的。而第二個想法更加緊湊並且使用MultiPoint GeoJSON類型。

感謝您的輸入。

+0

是不是[LineString](https://docs.mongodb.com/manual/reference/geojson/#linestring)更適合跟蹤數據的'MultiPoint'? – barbakini

+0

可能是,但你不能在MongoDB中做任何地理空間查詢。但我更關心如何加入時間戳。 – Matthias

+0

MongoDB地理查詢也支持LineString。在lineString或MultiPoint旁邊,用於時間戳部分;如果你把座標子數組中的時間標記作爲第三個元素呢?我沒有嘗試,但很可能mongodb會忽略它的地理查詢,但你可以使用它,並且將不需要匹配座標數組和時間戳數組 – barbakini

回答

1

也可以使用座標數組作爲時間戳。很可能mongodb只會對前兩個座標對象感興趣。你可以把時間戳作爲第三個對象。

gpsTrack = { 
    "geometry": { 
     "type": "MultiPoint", 
     "coordinates": [ 
      [104.0, 0.3, "2011-12-31T23:50:59Z"], 
      [128.0, 0.5, "2011-12-31T23:59:59Z"]] 
    } 
} 

就像我說的,我沒有嘗試,如果這違反了MongoDB中,使地理查詢過coordinates

+0

插入,索引創建和查詢工作正常。不知道您可以將字段添加到現有的數據類型,如Point或MultiPoint。在接受解決方案之前,我會等待其他想法。謝謝! – Matthias