geo_intersection_line_with_polygon()
Berekent het snijpunt van een lijn of een multilijn met een veelhoek of een multipolygon.
Syntax
geo_intersection_line_with_polygon(
lineString,
Veelhoek)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
lineString | dynamic |
✔️ | Een LineString of MultiLineString in de GeoJSON-indeling. |
Veelhoek | dynamic |
✔️ | Een veelhoek of multipolygon in de GeoJSON-indeling. |
Retouren
Snijpunt in GeoJSON-indeling en van een dynamisch gegevenstype. Als lineString of een multiLineString of een veelhoek of een multipolygon ongeldig zijn, produceert de query een null-resultaat.
Notitie
- De georuimtelijke coördinaten worden geïnterpreteerd als vertegenwoordigd door het WGS-84-coördinatenreferentiesysteem .
- De geodetische datum die wordt gebruikt om de afstand op aarde te meten, is een bol. Lijnranden zijn geodetische op de bol.
- Als invoerlijn of veelhoekranden rechte cartesische lijnen zijn, kunt u overwegen om geo_line_densify() of een geo_polygon_densify() te gebruiken om planaire randen te converteren naar geodetische lijnen.
Definitie en beperkingen van LineString
dynamic({"type": "LineString","coördinaten": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})
dynamic({"type": "MultiLineString","coördinaten": [[line_1, line_2, ..., line_N]]})
- LineString-coördinatenmatrix moet ten minste twee vermeldingen bevatten.
- Coördinaten [lengtegraad, breedtegraad] moeten geldig zijn waarbij lengtegraad een reëel getal is in het bereik [-180, +180] en breedtegraad een reëel getal in het bereik [-90, +90].
- De randlengte moet kleiner zijn dan 180 graden. De kortste rand tussen de twee hoekpunten wordt gekozen.
Polygoondefinitie en beperkingen
dynamic({"type": "Polygon","coördinaten": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})
dynamic({"type": "MultiPolygon","coördinaten": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N],..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]})
- LinearRingShell is vereist en gedefinieerd als een
counterclockwise
geordende matrix van coördinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Er kan maar één shell zijn. - LinearRingHole is optioneel en wordt gedefinieerd als een
clockwise
geordende matrix van coördinaten [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Er kunnen een willekeurig aantal binnenringen en gaten zijn. - LinearRing-hoekpunten moeten verschillend zijn met ten minste drie coördinaten. De eerste coördinaat moet gelijk zijn aan de laatste. Er zijn ten minste vier vermeldingen vereist.
- De coördinaten [lengtegraad, breedtegraad] moeten geldig zijn. Lengtegraad moet een reëel getal zijn in het bereik [-180, +180] en breedtegraad moet een reëel getal in het bereik [-90, +90] zijn.
- LinearRingShell omsluit maximaal de helft van de bol. LinearRing verdeelt de bol in twee regio's. De kleinste van de twee regio's wordt gekozen.
- De lengte van de LinearRing-rand moet kleiner zijn dan 180 graden. De kortste rand tussen de twee hoekpunten wordt gekozen.
- LinearRings mag geen randen kruisen en mogen geen randen delen. LinearRings kan hoekpunten delen.
- Veelhoek bevat de hoekpunten.
Tip
Gebruik letterlijke LineString of MultiLineString voor betere prestaties.
Voorbeelden
In het volgende voorbeeld wordt het snijpunt tussen lijn en veelhoek berekend. In dit geval is het resultaat een lijn.
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)
Uitvoer
Snijpunt |
---|
{"type": "LineString","coördinaten": [[-73,975611956578192,40,78060906714618],[-73.974552,40.779761]]} |
In het volgende voorbeeld wordt het snijpunt tussen lijn en veelhoek berekend. In dit geval is het resultaat een multiline.
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)
Uitvoer
Snijpunt |
---|
{"type": "MultiLineString","coördinaten": [[[ -106.89353655881905, 39.769226209776306],[ -101.74448553679453, 40.373506008712525]],[[-99.136499431328858, 40,589336512699994],[-95.284527737311791, 40,799060242246348]]]]} |
De volgende regel en veelhoek snijden elkaar niet.
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)
Uitvoer
Snijpunt |
---|
{"type": "GeometryCollection","geometries": []} |
In het volgende voorbeeld worden alle wegen in de nyc GeoJSON-wegentabel gevonden die de letterlijke veelhoek van het interessegebied kruisen.
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
Uitvoer
naam | Snijpunt |
---|---|
CentralParkW | {"type":"MultiLineString","coördinaten":[[[[-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","coördinaten":[[[[[-73,957828446036331,40.800476476316327],[-73.9578627,40,800486700000008]],[[73.9585282,40.8006155],[-73.958565492035873,40,800631133466972]],[[[-73.9584162000000 16,40,8007325],[-73,958446850928084,40,80074457746617]]]} |
WestDr | {"type":"LineString","coördinaten":[[-73.9580543,40.8003616],[-73.958009693938735,40.800250494588468]]} |
In het volgende voorbeeld worden alle provincies in de VS gevonden die elkaar snijden met de letterlijke LineString van het interessegebied.
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
Uitvoer
naam | Snijpunt |
---|---|
New York | {"type": "LineString","coördinaten": [[-73,971590995788574, 40,79451338780895], [-73.967385292053223, 40.79275888618756],[-73.96978855130566, 40.789769718601512]} |
In het volgende voorbeeld wordt een null-resultaat geretourneerd omdat de LineString ongeldig is.
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))
Uitvoer
is_invalid |
---|
1 |
In het volgende voorbeeld wordt een null-resultaat geretourneerd omdat de veelhoek ongeldig is.
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))
Uitvoer
is_invalid |
---|
1 |
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor