Condividi tramite


ST_DISTANCE (query NoSQL)

SI APPLICA A: NoSQL

Restituisce la distanza tra due espressioni GeoJSON Point, Polygon, MultiPolygon o LineString.

Nota

Per altre informazioni, vedere Dati località geospaziale e GeoJSON.

Sintassi

ST_DISTANCE(<spatial_expr_1>, <spatial_expr_2>)  

Argomenti

Descrizione
spatial_expr_1 Qualsiasi espressione GeoJSON Point, Polygon, MultiPolygon o LineString valida.
spatial_expr_2 Qualsiasi espressione GeoJSON Point, Polygon, MultiPolygon o LineString valida.

Tipi restituiti

Restituisce un'espressione numerica che enumera la distanza tra due espressioni.

Esempi

Nell'esempio seguente si presuppone che un contenitore esista con due elementi.

[
  {
    "name": "Headquarters",
    "location": {
      "type": "Point",
      "coordinates": [
        -122.12826822304672,
        47.63980239335718
      ]
    },
    "category": "business-offices"
  },
  {
    "name": "Research and development",
    "location": {
      "type": "Point",
      "coordinates": [
        -96.84368664765994,
        46.81297794314663
      ]
    },
    "category": "business-offices"
  }
]

Nell'esempio viene illustrato come usare la funzione come filtro per restituire gli elementi entro una distanza specificata.

SELECT
    o.name,
    ST_DISTANCE(o.location, {
        "type": "Point", 
        "coordinates": [-122.11758113953535, 47.66901087006131]
    }) / 1000 AS distanceKilometers
FROM
    offices o
WHERE
    o.category = "business-offices"
[
  {
    "name": "Headquarters",
    "distanceKilometers": 3.345269817267368
  },
  {
    "name": "Research and development",
    "distanceKilometers": 1907.438421299902
  }
]

Osservazioni:

  • Il risultato è espresso in metri per il sistema di riferimento predefinito.
  • Questa funzione trae vantaggio da un indice geospaziale, ad eccezione delle query con aggregazioni.
  • La specifica GeoJSON richiede che i punti all'interno di un poligono siano specificati in ordine antiorario. Un poligono specificato in senso orario rappresenta l'inverso dell'area al suo interno.