Share via


geo_intersects_line_with_polygon()

Calcula si una línea o una intersección multilínea con un polígono o un multipolígono.

Syntax

geo_intersects_line_with_polygon(Linestring,Polígono)

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
Linestring dynamic ✔️ LineString o MultiLineString en el formato GeoJSON.
Polígono dynamic ✔️ Polígono o MultiPolygon en formato GeoJSON.

Devoluciones

Indica si la línea o varias líneas se intersecan con un polígono o un multipolígono. Si lineString o multiLineString o un polígono o un multipolygon no son válidos, la consulta generará un resultado nulo.

Nota

  • Las coordenadas geoespaciales se interpretan como representadas por el sistema de referencia de coordenadas WGS-84 .
  • La referencia geodética utilizada para medir la distancia en la Tierra es una esfera. Los bordes de línea son geodesics en la esfera.
  • Si la línea de entrada o los bordes de un polígono son líneas cartesianas rectas, considere la posibilidad de usar geo_line_densify() o un geo_polygon_densify() para convertir bordes planales en geodesics.

Definición y restricciones lineString

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • La matriz de coordenadas LineString debe contener al menos dos entradas.
  • Las coordenadas [longitud, latitud] deben ser válidas donde la longitud es un número real en el intervalo [-180, +180] y la latitud es un número real en el intervalo [-90, +90].
  • La longitud del borde debe ser inferior a 180 grados. Se elegirá el borde más corto entre los dos vértices.

Definición y restricciones de polígono

dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell es necesario y se define como una counterclockwise matriz ordenada de coordenadas [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Solo puede haber un shell.
  • LinearRingHole es opcional y se define como una clockwise matriz ordenada de coordenadas [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Puede haber cualquier número de anillos interiores y agujeros.
  • Los vértices linearRing deben ser distintos con al menos tres coordenadas. La primera coordenada debe ser igual a la última. Se requieren al menos cuatro entradas.
  • Las coordenadas [longitud, latitud] deben ser válidas. La longitud debe ser un número real en el intervalo [-180, +180] y la latitud debe ser un número real en el intervalo [-90, +90].
  • LinearRingShell incluye como máximo la mitad de la esfera. LinearRing divide la esfera en dos regiones. Se elegirá el menor de las dos regiones.
  • La longitud del borde linearRing debe ser inferior a 180 grados. Se elegirá el borde más corto entre los dos vértices.
  • LinearRings no debe cruzar y no compartir bordes. LinearRings puede compartir vértices.
  • Polygon no contiene necesariamente sus vértices.

Sugerencia

Use literal LineString o MultiLineString para mejorar el rendimiento.

Ejemplos

En el ejemplo siguiente se comprueba si un lineString literal se interseca con un polygon.

let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275],[-73.974552,40.779761]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});
print intersects = geo_intersects_line_with_polygon(lineString, polygon)

Salida

Intersecta
True

En el ejemplo siguiente se buscan todas las carreteras de la tabla de carreteras de NYC GeoJSON que se intersecan con el área de interés literal polígono.

let area_of_interest = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});
NY_Manhattan_Roads
| project name = features.properties.Label, road = features.geometry
| where geo_intersects_line_with_polygon(road, area_of_interest)
| project name

Salida

name
Central Park W
Frederick Douglass Cir
W 110th St
Dr. oeste

En el ejemplo siguiente se buscan todos los condados de EE. UU. que se cruzan con el área de interés literal LineString.

let area_of_interest = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});
US_Counties
| project name = features.properties.NAME, county = features.geometry
| where geo_intersects_line_with_polygon(area_of_interest, county)
| project name

Salida

name
Nueva York

En el ejemplo siguiente se devolverá un resultado nulo porque LineString no es válido.

let lineString = dynamic({"type":"LineString","coordinates":[[-73.985195,40.788275]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.95768642425537,40.80065354924362],[-73.9582872390747,40.80089719667298],[-73.95869493484497,40.80050736035672],[-73.9580512046814,40.80019873831593],[-73.95768642425537,40.80065354924362]]]});
print isnull(geo_intersects_2lines(lineString, polygon))

Salida

print_0
True

En el ejemplo siguiente se devolverá un resultado nulo porque el polígono no es válido.

let lineString = dynamic({"type":"LineString","coordinates":[[-73.97159099578857,40.794513338780895],[-73.96738529205322,40.792758888618756],[-73.96978855133057,40.789769718601505]]});
let polygon = dynamic({"type":"Polygon","coordinates":[]});
print isnull(geo_intersects_2lines(lineString, polygon))

Salida

print_0
True