Sdílet prostřednictvím


geo_intersects_line_with_polygon()

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Vypočítá, zda čára nebo víceřádkový protíná mnohoúhelník nebo multipolygon.

Syntaxe

geo_intersects_line_with_polygon(mnohoúhelník lineString,)

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
lineString dynamic ✔️ A LineString nebo MultiLineString ve formátu GeoJSON.
mnohoúhelník dynamic ✔️ Polygon nebo MultiPolygon ve formátu GeoJSON.

Návraty

Určuje, zda čára nebo víceřádkový protíná mnohoúhelník nebo multipolygon. Pokud je řetězec lineString nebo multiLineString nebo mnohoúhelník nebo multipolygon neplatný, dotaz vytvoří výsledek null.

Poznámka:

  • Geoprostorové souřadnice jsou interpretovány jako reprezentované referenčním systémem souřadnic WGS-84 .
  • Geodetické datum použité k měření vzdálenosti na Zemi je sféra. Hrany čar jsou geodesics na kouli.
  • Pokud jsou vstupní čára nebo mnohoúhelníkové hrany rovné kartézské čáry, zvažte použití geo_line_densify() nebo geo_polygon_densify() k převodu planárních hran na geodesické čáry.

Definice a omezení řetězce řádků

dynamic({"type": "LineString";"souřadnice": [[lng_1;lat_1], [lng_2;lat_2], ...; [lng_N;lat_N]]})

dynamic({"type": "MultiLineString";"souřadnice": [[line_1; line_2; ..., line_N]})

  • Matice souřadnic linestringu musí obsahovat alespoň dvě položky.
  • Souřadnice [zeměpisná délka, zeměpisná šířka] musí být platné, pokud je zeměpisná délka skutečným číslem v rozsahu [-180, +180] a zeměpisná šířka je reálné číslo v rozsahu [-90, +90].
  • Délka okraje musí být menší než 180 stupňů. Vybere se nejkratší hrana mezi dvěma vrcholy.

Definice mnohoúhelníku a omezení

dynamic({"type": "Polygon";"souřadnice": [ LinearRingShell, LinearRingHole_1; ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon";"souřadnice": [[LinearRingShell, LinearRingHole_1; ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1; ..., LinearRingHole_M]})

  • LinearRingShell je povinný a definovaný jako counterclockwise uspořádané pole souřadnic [[lng_1;lat_1], ...;[lng_i;lat_i], ...;[lng_j;lat_j], ...;[lng_1;lat_1]]. Může existovat pouze jedno prostředí.
  • LinearRingHole je nepovinný a definovaný jako clockwise uspořádaná matice souřadnic [[lng_1;lat_1], ...;[lng_i;lat_i], ...;[lng_j;lat_j], ...;[lng_1;lat_1]]. Může existovat libovolný počet vnitřních kroužků a otvorů.
  • Vrcholy linearring musí být odlišné s alespoň třemi souřadnicemi. První souřadnice musí být rovna poslední. Vyžaduje se aspoň čtyři položky.
  • Souřadnice [zeměpisná délka, zeměpisná šířka] musí být platné. Zeměpisná délka musí být reálné číslo v oblasti [-180, +180] a zeměpisná šířka musí být reálné číslo v oblasti [-90, +90].
  • LinearRingShell uzavře většinu poloviny sféry. LinearRing rozdělí sféru do dvou oblastí. Zvolí se menší ze dvou oblastí.
  • Délka hrany linearring musí být menší než 180 stupňů. Vybere se nejkratší hrana mezi dvěma vrcholy.
  • LinearRings nesmí křížovat a nesmí sdílet hrany. LinearRings může sdílet vrcholy.
  • Mnohoúhelník nemusí nutně obsahovat jeho vrcholy.

Tip

K lepšímu výkonu použijte literál LineString nebo MultiLineString.

Příklady

Následující příklad zkontroluje, zda literál LineString protíná s 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)

Výstup

Protíná
True

Následující příklad najde všechny cesty v tabulce cest NYC GeoJSON, které protínají s oblastmi literálového mnohoúhelníku.

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

Výstup

name
Centrální park W
Frederick Douglass Cir
W 110th St
West Dr.

Následující příklad najde všechny okresy v USA, které protínají s oblastí zájmu literál 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

Výstup

name
New York

Následující příklad vrátí výsledek null, protože LineString je neplatný.

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))

Výstup

print_0
True

Následující příklad vrátí výsledek null, protože mnohoúhelník je neplatný.

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))

Výstup

print_0
Pravda