2017-03-13 5 views
1

私は自分のプロジェクトを行います。これはMongoDBとJavaに関連しています。私はMongoDBからポリゴン内のデータを取得する必要があります。mongodb用のJavaで地理空間クエリを作成します。

しかし、私のクエリは常にレコードを返しません。

string coords = "28.56402,79.93652a27.27569,26.16394a42.69404,20.02808a48.61541,51.37207a" 
String[] coors = coords.split("a") 
final LinkedList<double[]> polygon = new LinkedList<double[]>(); 
for(int i= 0;i<coors.length;i++) 
{ 
    String[] coo = coors[i].split(","); 
    System.out.println("coors" + i + " : " + coors[i]); 
    polygon.addLast(new double[]{Double.parseDouble(coo[0]),Double.parseDouble(coo[1])}); 
} 
BasicDBObject query = new BasicDBObject("loc", new BasicDBObject("$within", new BasicDBObject("$polygon", polygon))); 
FindIterable<Document> results = this.getMongoCollectionProcessor().queryDocument(query); 
MongoCursor<Document> resultsIterator = results.iterator(); 

この私の出力クエリ:

{ "loc" : { "$within" : { "$polygon" : [ [ 28.56402 , 79.93652] , [ 27.27569 , 26.16394] , [ 42.69404 , 20.02808] , [ 48.61541 , 51.37207]]}}} 

クエリーカウントがゼロである

は、ここに私のJavaコードです。

私は間違っていますか?手伝って頂けますか?おかげさまで

答えて

0

以下のクエリを試すことができます。

Geopolygonは、配列の配列を座標として受け取ります。 Filters.geoWithinPolygonヘルパーメソッドを使用してください。withinは推奨されていません。

String coords = "28.56402,79.93652a27.27569,26.16394a42.69404,20.02808a48.61541,51.37207a"; 
String[] coors = coords.split("a"); 
final List<List<Double>> polygons = new ArrayList<>(); 

for(int i= 0;i<coors.length;i++) 
    { 
     String[] coo = coors[i].split(","); 
     System.out.println("coors" + i + " : " + coors[i]); 
     polygons.add(Arrays.asList(Double.parseDouble(coo[0]),Double.parseDouble(coo[1]))); 
    } 

Bson query = Filters.geoWithinPolygon("loc", polygons); 
FindIterable<Document> results = this.getMongoCollectionProcessor().queryDocument(query); 
MongoCursor<Document> resultsIterator = results.iterator(); 

予想されるクエリ:

{ 
    loc: { 
     $geoWithin: { 
      $geometry: { 
       type: "Polygon", 
       coordinates: [ 
        [ 
         [28.56402, 79.93652], 
         [27.27569, 26.16394], 
         [42.69404, 20.02808], 
         [48.61541, 51.37207] 
        ] 
       ] 
      } 
     } 
    } 
} 
+0

あなたの答えをありがとうございましたが、それは再びゼロを返します。オペレータフィルタ{fieldName = 'loc'、演算子= '$ geoWithin'、値= {"$ polygon":[13.82608,128.03467]、[13.82608,128.03467]、[13.82608、128.03467]、[13.82608 、128.03467]]}}。そして、私がmongoBoosterでこのクエリを実行したとき、私は "Loop is not closed"を受け取りました。 – hisoka

+0

最新のコードを試しましたか?なぜすべての座標は同じですか?私はテストするデータがありません。 '[[13.82608、128.03467]、[13.82608、128.03467]、[13.82608、128.03467]、[13.82608、128.03467]]' – Veeram

+0

はい、試しました。これらの座標にはデータがあるため、同じ座標になります。 – hisoka

関連する問題