2

アプリで objectify-appengine を使用しています。DBには、場所の緯度と経度を保存しています。ある時点で、(DB から) 特定のポイントに最も近い場所を見つけたいと思います。
私が理解している限り、通常の SQL のようなクエリを実行することはできません。だから私の質問は、どうすればそれを最善の方法で行うことができるでしょうか?

4

1 に答える 1

7

Google App Engine で地理空間クエリを有効にするGeoModelをご覧ください。

アップデート:

Objectify アノテーション付きモデル クラスに という GeoPt プロパティがあるとしcoordinatesます。

プロジェクトには次の 2 つのライブラリが必要です。

  1. GeoLocation.java
  2. Java ジオモデル

地理クエリを実行するコードには、次のものがあります。

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 に答える