Dela via


geo_line_simplify()

Förenklar en linje eller en flerlinje genom att ersätta nästan raka kedjor av korta kanter med en enda lång kant på jorden.

Syntax

geo_line_simplify(lineString,Tolerans)

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
lineString dynamic ✔️ En LineString eller MultiLineString i GeoJSON-format.
Tolerans int, long eller real Definierar minsta avstånd i meter mellan två hörn. Värden som stöds finns i intervallet [0, ~7 800 000 meter]. Om det är ospecificerat används standardvärdet 10 .

Returer

Förenklad linje eller flera rader i GeoJSON-format och av en dynamisk datatyp, utan två hörn med mindre avstånd än tolerans. Om antingen raden eller toleransen är ogiltig genererar frågan ett null-resultat.

Anteckning

  • Geospatiala koordinater tolkas som de representeras av WGS-84-koordinatreferenssystemet .
  • Det geodetiska datum som används för att mäta avståndet på jorden är en sfär. Linjekanter är geodesiker på sfären.
  • Om indatalinjens kanter är raka kartesiska linjer bör du överväga att använda geo_line_densify() för att konvertera planära kanter till geodesik.
  • Om indata är en flerradslinje och innehåller mer än en rad blir resultatet förenkling av linjeunionen.
  • Hög tolerans kan leda till att små linjer försvinner.

LineString-definition och begränsningar

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

  • Matrisen LineString-koordinater måste innehålla minst två poster.
  • Koordinaterna [longitud, latitud] måste vara giltiga där longitud är ett reellt tal i intervallet [-180, +180] och latitud är ett reellt tal i intervallet [-90, +90].
  • Kantlängden måste vara mindre än 180 grader. Den kortaste kanten mellan de två hörnen väljs.

Exempel

I följande exempel förenklas linjen genom att hörn som ligger inom ett avstånd på 10 meter tas bort från varandra.

let line = dynamic({"type":"LineString","coordinates":[[-73.97033169865608,40.789063020152824],[-73.97039607167244,40.78897975920816],[-73.9704617857933,40.78888837512432],[-73.97052884101868,40.7887949601531],[-73.9706052839756,40.788698498903564],[-73.97065222263336,40.78862640672032],[-73.97072866559029,40.78852791445617],[-73.97079303860664,40.788434498977836]]});
print simplified = geo_line_simplify(line, 10)

Resultat

Förenklad
{"type": "LineString", "coordinates": [[-73.97033169865608, 40.789063020152824], [-73.97079303860664, 40.788434498977836]]}

I följande exempel förenklas linjerna och resultaten kombineras till GeoJSON-geometrisamlingen.

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project geojson = bag_pack("type", "Feature","geometry", bag_pack("type", "GeometryCollection", "geometries", roads_lst), "properties", bag_pack("name", "roads"))

Resultat

geojson
{"type": "Feature", "geometry": {"type": "GeometryCollection", "geometries": [ ... ]}, "properties": {"name": "roads"}}

I följande exempel förenklas rader och resultat förenas

NY_Manhattan_Roads
| project road = features.geometry
| project road_simplified = geo_line_simplify(road, 100)
| summarize roads_lst = make_list(road_simplified)
| project roads = geo_union_lines_array(roads_lst)

Resultat

Vägar
{"type": "MultiLineString", "coordinates": [ ... ]}

I följande exempel returneras True på grund av den ogiltiga raden.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1]]})))

Resultat

is_invalid_line
Sant

I följande exempel returneras True på grund av den ogiltiga toleransen.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1, 1],[2,2]]}), -1))

Resultat

is_invalid_line
Sant

I följande exempel returneras True eftersom hög tolerans gör att små rader försvinner.

print is_invalid_line = isnull(geo_line_simplify(dynamic({"type":"LineString","coordinates":[[1.1, 1.1],[1.2,1.2]]}), 100000))

Resultat

is_invalid_line
Sant