Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Przełączanie usług przy użyciu listy rozwijanej Wersja . Dowiedz się więcej o nawigacji.
Dotyczy: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Oblicza przecięcie linii lub wielowiersza z wielokątem lub wielokątem.
Składnia
geo_intersection_line_with_polygon(
lineString,— wielokąt)
Dowiedz się więcej na temat konwencji składni.
Parametry
| Nazwisko | Typ | Wymagania | opis |
|---|---|---|---|
| lineString | dynamic |
✔️ | Ciąg lineString lub MultiLineString w formacie GeoJSON. |
| wielokąt | dynamic |
✔️ | Wielokąt lub MultiPolygon w formacie GeoJSON. |
Zwraca
Skrzyżowanie w formacie GeoJSON i dynamiczny typ danych. Jeśli ciąg lineString lub multiLineString lub wielokąt lub wielokąt są nieprawidłowe, zapytanie spowoduje wygenerowanie wyniku null.
Uwaga
- Współrzędne geoprzestrzenne są interpretowane jako reprezentowane przez system odniesienia współrzędnych WGS-84 .
- Geodetyczne datum używane do mierzenia odległości na Ziemi jest sferą. Krawędzie linii są geodesykami na sferze.
- Jeśli linia wejściowa lub krawędzie wielokątne są liniami kartezjańskimi, rozważ użycie geo_line_densify() lub geo_polygon_densify() w celu przekonwertowania krawędzi planarnych na geodesykę.
Definicja i ograniczenia linestring
dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})
dynamic({"type": "MultiLineString","współrzędne": [[line_1, line_2, ..., line_N]]})
- Tablica współrzędnych LineString musi zawierać co najmniej dwa wpisy.
- Współrzędne [długość geograficzna, szerokość geograficzna] muszą być prawidłowe, gdzie długość geograficzna jest liczbą rzeczywistą w zakresie [-180, +180], a szerokość geograficzna jest liczbą rzeczywistą w zakresie [-90, +90].
- Długość krawędzi musi być mniejsza niż 180 stopni. Zostanie wybrana najkrótsza krawędź między dwoma wierzchołkami.
Definicja i ograniczenia wielokątne
dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})
dynamic({"type": "MultiPolygon","współrzędne": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N],..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})
- Program LinearRingShell jest wymagany i zdefiniowany jako uporządkowana tablica współrzędnych
counterclockwise[[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Może istnieć tylko jedna powłoka. - Funkcja LinearRingHole jest opcjonalna i zdefiniowana jako uporządkowana tablica współrzędnych
clockwise[[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Może istnieć dowolna liczba pierścieni i otworów wewnętrznych. - Wierzchołki liniowe muszą być odrębne z co najmniej trzema współrzędnymi. Pierwsza współrzędna musi być równa ostatniej. Wymagane są co najmniej cztery wpisy.
- Współrzędne [długość geograficzna, szerokość geograficzna] muszą być prawidłowe. Długość geograficzna musi być liczbą rzeczywistą w zakresie [-180, +180], a szerokość geograficzna musi być liczbą rzeczywistą w zakresie [-90, +90].
- LinearRingShell otacza co najwyżej połowę kuli. Funkcja LinearRing dzieli sferę na dwa regiony. Zostaną wybrane mniejsze z dwóch regionów.
- Długość krawędzi liniowej musi być mniejsza niż 180 stopni. Zostanie wybrana najkrótsza krawędź między dwoma wierzchołkami.
- Wyrażenia liniowe nie mogą być krzyżowe i nie mogą współużytkować krawędzi. LinearRingi mogą współdzielić wierzchołki.
- Wielokąt zawiera wierzchołki.
Napiwek
Użyj literału LineString lub MultiLineString, aby uzyskać lepszą wydajność.
Przykłady
Poniższy przykład oblicza przecięcie między linią a wielokątem. W tym przypadku wynik jest wierszem.
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 intersection = geo_intersection_line_with_polygon(lineString, polygon)
Wyjście
| skrzyżowanie |
|---|
| {"type": "LineString","coordinates": [[-73.97561195578192,40.7806090606714618],[-73.974552,40.779761]]} |
Poniższy przykład oblicza przecięcie między linią a wielokątem. W takim przypadku wynik jest wielowierszowy.
let lineString = dynamic({"type":"LineString","coordinates":[[-110.522, 39.198],[-91.428, 40.880]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-90.263,36.738],[-102.041,45.274],[-109.335,36.527],[-90.263,36.738]],[[-100.393,41.705],[-103.139,38.925],[-97.558,39.113],[-100.393,41.705]]]});
print intersection = geo_intersection_line_with_polygon(lineString, polygon)
Wyjście
| skrzyżowanie |
|---|
| {"type": "MultiLineString","coordinates": [[[ -106.8935365881905, 39.7692262097676306],[ -101.7448553679453, 40.373506008712525]],[-99.136499431328858, 40.589336512699994],[-95.284527737311791, 40.799060242246348]]]} |
Następujący wiersz i wielokąt nie przecinają się.
let lineString = dynamic({"type":"LineString","coordinates":[[1, 1],[2, 2]]});
let polygon = dynamic({"type":"Polygon","coordinates":[[[-73.9712905883789,40.78580561168767],[-73.98004531860352,40.775276834803655],[-73.97000312805176,40.77852663535664],[-73.9712905883789,40.78580561168767]]]});
print intersection = geo_intersection_line_with_polygon(lineString, polygon)
Wyjście
| skrzyżowanie |
|---|
| {"type": "GeometryCollection","geometrie": []} |
Poniższy przykład znajduje wszystkie drogi w tabeli dróg GeoJSON W NOWYM Jorku, które przecinają się z wielokątem literału zainteresowania.
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
| project name, intersection = geo_intersection_line_with_polygon(road, area_of_interest)
| where array_length(intersection.geometries) != 0
Wyjście
| name | skrzyżowanie |
|---|---|
| CentralParkW | {"type":"MultiLineString","coordinates":[[[-73.958295846836933,40.800316027289647],[-73.9582724,40.8003415]],[[-73.958413422194482,40.80037239620097],[-73.9584093,40.8003797]]]} |
| FrederickDouglassCir | {"type":"LineString","coordinates":[[-73.9579272943862,40.800751229494182],[-73.9579019,40.8007238],[-73.9578688,40.8006749],[-73.9578508,40.8006203],[-73.9578459,40.800570199999996],[-73.9578484,40.80053310000001],[-73.9578627,40.800486700000008],[-73.957913,40.800421100000008],[-73.9579668,40.8003923],[-73.9580189,40.80037260000001],[-73.9580543,40.8003616],[-73.9581237,40.8003395],[-73.9581778,40.8003365],[-73.9582724,40.8003415],[- 73.958308,40.8003466],[-73.9583328,40.8003517],[-73.9583757,40.8003645],[-73.9584093,40.8003797],[-73.9584535,40.80041099999999],[-73.9584818,40.8004536],[-73.958507000000012,40.8004955],[-73.9585217,40.800562400000004],[-73.9585282,40.8006155],[-73.958416200000016,40.8007325],[-73.9583541,40.8007785],[-73.9582772,40.800811499999995],[-73.9582151,40.8008285],[-73.958145918999392,40.800839887820239]]} |
| W110thSt | {"type":"MultiLineString","coordinates":[[[-73.95782844603631,40.800476476316327],[-173.9578627,40.800486700000000008]][[-73.9585282,40.8006155],[[-73.958565492035873,40.800631133466972]],[[-73.9584162000000016,40.8007325],[-73.958446850928084,40.800744577466617]]]]} |
| WestDr | {"type":"LineString","coordinates":[[-73.9580543,40.8003616],[-73.958009693938735,40.800250494588468]} |
Poniższy przykład znajduje wszystkie powiaty w USA, które przecinają obszar zainteresowania literału 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
| project name, intersection = geo_intersection_line_with_polygon(area_of_interest, county)
| where array_length(intersection.geometries) != 0
Wyjście
| name | skrzyżowanie |
|---|---|
| Nowy Jork | {"type": "LineString","coordinates": [[-73.97159095788574, 40.79451333880895], [-73.96738529292053223, 40.792758888618756],[-73.969788551330566, 40.789769718601512]]} |
W poniższym przykładzie zostanie zwrócony wynik o wartości null, ponieważ ciąg LineString jest nieprawidłowy.
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Wyjście
| is_invalid |
|---|
| 1 |
Poniższy przykład zwróci wynik o wartości null, ponieważ wielokąt jest nieprawidłowy.
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 is_invalid = isnull(geo_intersection_2lines(lineString, polygon))
Wyjście
| is_invalid |
|---|
| 1 |