回答
SimpleDB目前不提供任何內置的空間搜索操作,但這並不意味着它無法完成。在非地理空間數據庫(如SimpleDB)中實施地理空間搜索有幾種方法,它們都圍繞使用數據庫檢索基於地理空間邊界框的粗略首選項,然後使用應用程序中的返回數據進行篩選更精確的算法,如Haversine formula。
您可能商店的緯度和經度(零填充和標準化)數值屬性,然後執行雙範圍查詢(lat >= minLat and lat <= maxLat and lon >= minLat and lon <= maxLat
),但因爲沒有theese謂詞的選擇性(每個謂詞很多項目的比賽)這並不理想(參見Tuning Queries)。
更好的方法是使用GeoHashes。
Geohashes提供像任意精度特性,對於附近的位置的相似前綴 ,並且逐漸從代碼的末尾去除 字符以減小其尺寸(並逐漸失去 精度)的可能性。
作爲一個實際的例子中,地理散列6gkzwgjzn820解碼爲 座標-25.382708 -49.265506和,而地理散列6gkzwgjz將 解碼到-25.383和-49.266,如果我們採取 同一區域相似的位置,如-25.427和-49.315,我們可以看到它是 編碼爲6gkzmg1w(注意類似的前綴)。
從http://geohash.org/site/tips.html
與您的項目位置爲GeoHashes您可以使用like
操作符來搜索邊界框(where GeoHash like '6gkzmg1w%'
),但由於like
操作是昂貴的(Comparison Operators)更好的方式將非規範化通過將每個GeoHash前綴級別(多少取決於您所需的搜索精度)作爲單獨的屬性(GeoHash6 GeoHash8等)存儲數據,然後使用簡單的相等謂詞(where Geohash8 = '6gkzmg1w'
)。
現在是GeoHashes的缺點。由於您無法假設您的搜索框中的GeoHash居中,因此您還必須搜索所有相鄰的前綴。該方法極好地通過geohash-js
描述地理散列還具有作爲的位數減少 (右)的財產,精度下降。這個屬性可以用來做 邊界框搜索,因爲彼此相鄰的點將共享 類似的Geohash前綴。但是,由於給定的點可能出現在給定的邊界處的Geohash邊界框中,因此有必要生成一個Geohash值列表,以便在點周圍執行真正的鄰近搜索。 由於Geohash算法使用的是基本32編號系統,因此可以使用簡單的查找表推導圍繞任何其他給定012的Geohash值的Geohash值。
因此,例如,賓夕法尼亞大道1600號,華盛頓特區解析爲: 38.897,-77.036
使用地理散列算法,這個緯度和經度轉換 到:dqcjqcp84c6e
一個簡單的邊框在該點周圍可以通過 描述截斷此地理散列到:dqcjqc
然而,「dqcjqcp84c6e」不居中「內dqcjqc」,和搜索「dqcjqc」內 可能錯過某些所需圓盾TS。
所以相反,我們可以使用Geohash的數學屬性來 快速計算'dqcjqc'的鄰居;我們發現,它們是: 'dqcjqf', 'dqcjqb', 'dqcjr1', 'dqcjq9', 'dqcjqd', 'dqcjr4', 'dqcjr0', 'dqcjq8'
這給了我們周圍邊框「 dqcjqcp84c6e'大約2km x 1.5km 並且允許僅在9個鍵上進行數據庫搜索:SELECT * FROM表 WHERE LEFT(geohash,6)IN('dqcjqc', 'dqcjqf','dqcjqb','dqcjr1', 'dqcjq9', 'dqcjqd', 'dqcjr4', 'dqcjr0', 'dqcjq8');
轉換爲SimpleDB的查詢會是where GeoHash6 in('dqcjqc', 'dqcjqf', 'dqcjqb', 'dqcjr1', 'dqcjq9', 'dqcjqd', 'dqcjr4', 'dqcjr0', 'dqcjq8')
,然後你會做你的結果半正矢過濾,以僅獲得搜索半徑範圍內是這樣的項目。
我要離開這裏,因爲它可能會幫助你!
14年前,我們試圖做一個半徑範圍內地理位置的地理查詢表。顯然沒有地理空間索引或類似的東西。 從字面上看,只有標準的SQL和Oracle ...無論如何,我們最終將固定平面字段中的所有緯度/經度變換爲千米。基本上什麼是地理空間索引。
爲了解釋它究竟做了什麼,它將世界變成了一個平坦的表面,並且有一點SQL技巧,你甚至可以通過半徑選擇,甚至可以從你選擇的兩點得到距離。由於它也是原始的完整整數,查詢速度非常快。
這裏是PHP一個簡單的例子和一個非常複雜的尋找,但很容易,一旦你瞭解它的SQL查詢:
- 1. 關於SimpleDB查詢
- 2. 與亞馬遜SDB(simpledb)運行「複雜」的查詢 - aws-sdb + ActiveResource
- 3. EC2服務器或AWS SimpleDB上的MongoDB?
- 4. AWS SimpleDB包含值
- 5. python boto aws simpleDB查詢中限制被忽略
- 6. 亞馬遜simpleDB查詢
- 7. 我如何可以查詢到獲得的SimpleDB(AWS)的多重價值
- 8. DynamoDB中的地理空間查詢
- 9. MySQL空間查詢
- 10. Mongo報告AWS上的空間不足
- 11. SimpleDB時間戳插入
- 12. AWS的SimpleDB同步與谷歌日曆
- 13. AWS的SimpleDB選擇表達iPhone
- 14. rails2和aws-simple(simpledb):數據不能從amazon simpledb中刪除?
- 15. 關於屬性名稱SimpleDB查詢
- 16. reg空間查詢值很多空間
- 17. 空名稱空間的XPath查詢xmlns =「」
- 18. AWS Elastic Map Reduce:輸出到SimpleDB
- 19. AWS SimpleDB CLI:如何使用'select'命令?
- 20. 「上的空函數查詢」
- 21. 查詢爲Amazon SimpleDB中的所有項目設置值
- 22. 緩存空間查詢
- 23. 空間數據查詢2008
- 24. Postgres空間SQL查詢
- 25. 如何從空間查詢
- 26. 微風空間查詢
- 27. 空間數據查詢
- 28. Postgresql空間查詢太慢
- 29. SQL查詢空間值
- 30. 查詢空間數據庫
出色答卷,感謝上Geohashes討論 – user293895 2012-08-09 01:44:11