アプリで objectify-appengine を使用しています。DBには、場所の緯度と経度を保存しています。ある時点で、(DB から) 特定のポイントに最も近い場所を見つけたいと思います。
私が理解している限り、通常の SQL のようなクエリを実行することはできません。だから私の質問は、どうすればそれを最善の方法で行うことができるでしょうか?
質問する
946 次
1 に答える
7
Google App Engine で地理空間クエリを有効にするGeoModelをご覧ください。
アップデート:
Objectify アノテーション付きモデル クラスに という GeoPt プロパティがあるとしcoordinates
ます。
プロジェクトには次の 2 つのライブラリが必要です。
地理クエリを実行するコードには、次のものがあります。
import com.beoui.geocell.GeocellManager;
import com.beoui.geocell.model.BoundingBox;
import you.package.path.GeoLocation;
// other imports
// in your method
GeoLocation specificPointLocation = GeoLocation.fromDegrees(specificPoint.latitude, specificPoint.longitude);
GeoLocation[] bc = specificPointLocation.boundingCoordinates(radius);
// Transform this to a bounding box
BoundingBox bb = new BoundingBox((float) bc[0].getLatitudeInDegrees(),
(float) bc[1].getLongitudeInDegrees(),
(float) bc[1].getLatitudeInDegrees(),
(float) bc[0].getLongitudeInDegrees());
// Calculate the geocells list to be used in the queries (optimize
// list of cells that complete the given bounding box)
List<String> cells = GeocellManager.bestBboxSearchCells(bb, null);
// calculate geocells of your model class instance
List <String> modelCells = GeocellManager.generateGeoCell(myInstance.getCoordinate);
// matching
for (String c : cells) {
if (modelCells.contains(c)) {
// success, do sth with it
break;
}
}
于 2012-12-02T17:38:09.763 に答える