同じ問題がありました。特に AWS と DynamoDB を使用しています。CloudSearch サービスを使用してこの問題を解決しました。データベースに「地理検索可能な」データを保存するたびに、緯度、経度をフィルターとして CloudSearch インスタンスのデータにインデックスを付けます (これを行うには、緯度と経度で変換を行う必要があります)。 lon を使用して uint に変換します)。
次に、特定の緯度/経度と半径で検索を行い、対応するジオボックス ( latmin、latmax 、 lonmin、lonmax ) を計算し、特定のフィルターを使用して CloudSearch インスタンスにクエリを実行して、データのキー スキーマを取得するとします。その後、DynamoDB にクエリを実行して情報を取得できます。
上記を行うJavaのコード:
Tyler Coles による com.javadocmd.simplelatlng.window パッケージの RectangularWindows を使用して、境界ボックスを計算し、 lat / lon の変換を行います。
RectangularWindow rectangularWindow = new RectangularWindow(newLatLng(location.getLat().doubleValue(), location.getLon().doubleValue()), radius.doubleValue(), radius.doubleValue(), LengthUnit.KILOMETER);
latMin = (long) ((180 + rectangularWindow.getMinLatitude()) * 100000);
latMax = (long) ((180 + rectangularWindow.getMaxLatitude()) * 100000);
lonMin = (long) ((360 + rectangularWindow.getLeftLongitude()) * 100000);
lonMax = (long) ((360 + rectangularWindow.getRightLongitude()) * 100000);
次に、CloudSearch インスタンスに対するクエリの例:
http://[SEARCHURL]/2011-02-01/search?bq=(and lat:22300347..22309340 (and lon:28379282..28391589))
それが最善の解決策かどうかはわかりませんが、それが私たちが思いついたものです