2013-04-07 45 views
2

我收集了一個地理空間索引爲location: {lat:XX.XXXX, lng:XX.XXXX}的文檔。但是我希望它們能被TimeZone輸出。Ruby - 按時區對MongoDB記錄進行排序?

我正在考慮將地理位置轉換爲Timezone,並有一個基於此的索引,但我不知道如何做到這一點,或者它是否更容易使用地理空間索引。

+0

的解決方案取決於你需要如何訂購您的時區。如果它只是通常的東西向(反之亦然),那麼下面使用UTC偏移量的答案應該有所幫助。如果您需要進行DST調整,它會變得稍微複雜一點:您可以更新TZ集合或爲每個TZ創建多個文檔,其中包含開始/結束日期範圍和相應的UTC偏移量。您可以先根據當前時間進行過濾,然後您將擁有正確的(DST調整的)TZ順序。 – Sim 2013-04-08 02:56:14

+0

@Sim - 又見[這個社會的維基條目(http://stackoverflow.com/q/16086962/634824) – 2013-04-18 16:12:58

回答

0

的出色答卷SIM卡提供會讓你做這一切在自己的代碼 - 但它確實需要一些開銷。如果您只想解析時區的位置,並且不介意撥打外部服務,則可以使用Google's Time Zone API

this related question及其答案見。

+0

我很抱歉,但是如何通過電話調用外部API而不是開銷?那麼如何處理邊緣情況的複雜性,如網絡問題或處理API由於某種原因而不可用的情況? – Sim 2013-04-11 06:44:16

+0

@Sim - 我認爲這兩種解決方案都是有效的,這取決於你的情況。對於一些人來說,處理空間數據是不值得的。他們可能只有有限的查找。也許他們可以在提交文檔時解決時區問題,而只是將其存儲起來。總的來說,我確實同意你的解決方案。我實際上在不久前寫了[對RavenDB的實現](https://github.com/mj1856/Raven.TimeZones)。 :) – 2013-04-11 14:59:58

+0

當然,這是「頭頂」的定義引起了我的注意。 – Sim 2013-04-13 04:31:20

2

使用$geoWithin查詢條件,MongoDB可以執行檢查以包含GeoJSON中描述的任意多邊形中的點。您可以使用它們的位置多邊形創建一個新的時區文檔集合,其格式爲GeoJSON。爲此,請嘗試this GitHub repo。我對this related SO question的回答也可能有用。

一旦你的時區集合,你可以預先計算TZ,將其存儲在您的文件和索引它已獲得更快的查詢。你需要想出一個時區的排序。 UTC的偏移可能是一個很好的起點。

+0

這也是優秀的,謝謝。 – 2013-04-10 14:00:19