2016-09-02 1 views
0

Ich versuche, ein gültiges Ergebnis von der folgenden Spatialabfrage von DocumentDB zu erhalten.DocumentDB Spatial Distance Query - Leeres Set

In beiden LINQ oder SQL -

SELECT * FROM root 
WHERE (ST_Distance(root["Address"]["Location"]["Queryable"], 
{"type": "Point", "coordinates": [-36.******, 174.******]}) < 10000) 

... und/oder:

FeedOptions queryOptions = new FeedOptions { MaxItemCount = -1, EnableScanInQuery = true }; 
IQueryable<Store> documentQuery = client.CreateDocumentQuery<Store>(
UriFactory.CreateDocumentCollectionUri(this.databaseName, this.collection), queryOptions) 
.Where(s => s.Address.Location.Queryable.Distance(store.Address.Location.Queryable) < 10000); 

... beiden Ansätze geben Sie mir das gleiche Ergebnis - leere Menge.

Es gibt jedoch zwei "Store" -Dokumente in der Datenbank, die durch diese Abfrage aufgelöst werden sollen.

Meine DB-Instanz ist in Australien Ost - das sollte wohl in Ordnung sein.

Was mache ich hier falsch? Meine Sammlung hat keinen räumlichen Index - ist es erforderlich?

+0

Wie sieht 'root [" Adresse "] [" Location "] [" Queryable "]' aus? –

+0

Fragezeichen: {Typ: Punkt, Koordinaten: [-36.908, 174.123 ] } – Bernard

Antwort

0

In GeoJSON werden Punkte mit [Länge, Breite] angegeben, damit sie mit unseren normalen Erwartungen übereinstimmt, dass x Ost-West und y Nord-Süd ist. Leider ist dies das Gegenteil der herkömmlichen Art, GEO-Koordinaten anzuzeigen.

174.xxx ist kein gültiger Wert für den Breitengrad. Der Bereich für den Breitengrad ist -90 bis +90. Die Länge ist zwischen -180 und +180 angegeben.

Vertauschen Sie die Koordinaten und es sollte wie erwartet funktionieren.