2009年9月28日月曜日

geohashの解像度をナントカする

geohashは賢いのだが,どうも解像度が低いようで,実際に表示されている地図外の情報を取得してしまう場合がある。

bigtableではgeohashを使わざるを得ないので,データベースレベルの話ではこの問題を解決できない。

となると,大まかに取得した情報をサーバーサイドかクライアントサイドでフィルタリングする他ない。

サーバー負荷とプログラミングのし易さを考えて,今回はクライアントサイドでフィルタリングすることにした。

//フィルター済みリスト構築
var filteredList:ArrayCollection = new ArrayCollection();
var latLngBounds:LatLngBounds = map.getLatLngBounds();
for each (var item:Object in list) {
  var latlng:LatLng = new LatLng(Number(item.latitude), Number(item.longitude));
  if (latLngBounds.containsLatLng(latlng)) {
    log.info("地図表示内アイテムのため追加");        
    filteredList.addItem(item);
  } else {
    log.info("地図表示外アイテムのため削除");        
  }
}