2017-02-10 6 views
0

私の検索座標と私が探しているフィールドとの距離を返したいと思います。彼らは、次の例のクエリを使用 https://www.documentdb.com/sql/demo#geospatialDocumentDB - クエリのSELECT部分​​で距離を返すにはどうすればよいですか?

-- Find all volcanoes of type Stratovolcano 
-- (http://www.sciencedaily.com/terms/stratovolcano.htm) 
-- that are within 100 km of Redmond, WA. 
SELECT * 
FROM volcanoes v 
WHERE ST_DISTANCE(v.Location, { 
    "type": "Point", 
    "coordinates": [-122.19, 47.36] 
    }) < 100 * 1000 
AND v.Type = "Stratovolcano" 
AND v["Last Known Eruption"] = "Last known eruption from 1800-1899, inclusive" 

をそして、彼らは次のような結果を得る:

{ 
    "Volcano Name": "Rainier", 
    "Country": "United States", 
    "Region": "US-Washington", 
    "Location": { 
    "type": "Point", 
    "coordinates": [ 
     -121.758, 
     46.87 
    ] 
    }, 
    "Elevation": 4392, 
    "Type": "Stratovolcano", 
    "Status": "Dendrochronology", 
    "Last Known Eruption": "Last known eruption from 1800-1899, inclusive", 
    "id": "33eff74b-e331-bca5-bf32-f8ece733465a", 
    "_rid": "FX8tANMM6QEeBAAAAAAAAA==", 
    "_ts": 1438994836, 
    "_self": "dbs/FX8tAA==/colls/FX8tANMM6QE=/docs/FX8tANMM6QEeBAAAAAAAAA==/", 
    "_etag": "\"00008304-0000-0000-0000-55c551940000\"", 
    "_attachments": "attachments/" 
} 

例として、あなたはこの "クエリの遊び場" を使用することができます

私は、距離を火山([-121.758, 46.87])と検索座標の間のメートルで戻したいとします、

-- Find all volcanoes of type Stratovolcano 
-- (http://www.sciencedaily.com/terms/stratovolcano.htm) 
-- that are within 100 km of Redmond, WA. 
SELECT *, ST_DISTANCE(v.Location, { 
    "type": "Point", 
    "coordinates": [-122.19, 47.36] 
    }) 
FROM volcanoes v 
WHERE ST_DISTANCE(v.Location, { 
    "type": "Point", 
    "coordinates": [-122.19, 47.36] 
    }) < 100 * 1000 
AND v.Type = "Stratovolcano" 
AND v["Last Known Eruption"] = "Last known eruption from 1800-1899, inclusive" 

しかし動作しないこと:私の中[-122.19, 47.36]

T-SQLの開発者は、私はちょうどWHERE句から全体ST_DISTANCEビットを取り、そしてこのようなSELECTと一緒にそれを含めることができますと言いますそれはちょうど私の構文エラーを与える:

{ 
    "errors": [ 
    { 
     "severity": "Error", 
     "location": { 
     "start": 153, 
     "end": 154 
     }, 
     "code": "SC1001", 
     "message": "Syntax error, incorrect syntax near ','." 
    } 
    ] 
} 

私はASST_DISTANCEの結果をエイリアシング、v.*のように、物事の範囲を試してみたが、私はありませんよどこにいてもGoogleで必要なものを見つけることができません。

私は何をする必要がありますか?私にとっては、特定の距離内でクエリを行うことは非常に重要ですが、クライアント側のすべての距離を再計算する必要がある場合は、限られた使用になります。

答えて

1

クエリでは、SELECT *, ST_DISTANCE(...)の代わりにSELECT v, ST_DISTANCE(...)を使用する必要があります。 ANSI-SQLと同様に、DocumentDBのSELECT句には値のリストを含めることも、*を使用することもできますが、同時に両方を使用することはできません。

全クエリ:

-- Find all volcanoes of type Stratovolcano 
-- (http://www.sciencedaily.com/terms/stratovolcano.htm) 
-- that are within 100 km of Redmond, WA. 
SELECT v, ST_DISTANCE(v.Location, { 
    "type": "Point", 
    "coordinates": [-122.19, 47.36] 
    }) AS DistanceMetres 
FROM volcanoes v 
WHERE ST_DISTANCE(v.Location, { 
    "type": "Point", 
    "coordinates": [-122.19, 47.36] 
    }) < 100 * 1000 
AND v.Type = "Stratovolcano" 
AND v["Last Known Eruption"] = "Last known eruption from 1800-1899, inclusive" 
+0

私は*が異なる理由を説明するためにあなたの答えを編集しました。それを回答としてマークしていただけますか? –

関連する問題