Поделиться через


geo_line_simplify()

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Упрощает линию или многострочный путем замены почти прямых цепей коротких ребер одним длинным краем на Земле.

Синтаксис

geo_line_simplify(Отказоустойчивость lineString, )

Дополнительные сведения о соглашениях синтаксиса.

Параметры

Имя (название) Type Обязательно Описание
lineString dynamic ✔️ LineString или MultiLineString в формате GeoJSON.
tolerance int, long или real Определяет минимальное расстояние в метрах между двумя вершинами. Поддерживаемые значения находятся в диапазоне [0, ~7800 000 метров]. Если не задано, по умолчанию используется значение 10.

Возвраты

Упрощенная линия или многострочная линия в формате GeoJSON и динамического типа данных без двух вершин с расстоянием меньше допустимости. Если строка или допустимость недопустимая, запрос создаст результат NULL.

Примечание.

  • Геопространственные координаты интерпретируются как представленные эталонной системой координат WGS-84 .
  • Геостатический datum , используемый для измерения расстояния на Земле является сферой. Границы линии — геодесик на сфере.
  • Если границы линии ввода являются прямыми декартовыми линиями, рассмотрите возможность использования geo_line_densify() для преобразования планарных ребер в геодесетики.
  • Если входные данные являются многострочные и содержат несколько строк, результатом будет упрощено объединение строк.
  • Высокая допустимость может привести к исчезновению небольшой линии.

Определение и ограничения LineString

dynamic({"type": "LineString","координаты": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","координаты": [[line_1, line_2, ..., line_N]})

  • Массив координат LineString должен содержать не менее двух записей.
  • Координаты [долгота, широта] должны быть допустимыми, где долгота является реальным числом в диапазоне [-180, +180] и широта является реальным числом в диапазоне [-90, +90].
  • Длина края должна быть меньше 180 градусов. Будет выбран самый короткий край между двумя вершинами.

Примеры

В следующем примере линия упрощается путем удаления вершин, которые находятся в пределах 10-метрового расстояния друг от друга.

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)

Выходные данные

simplified
{"type": "LineString", "координаты": [[-73.9703169865608, 40.789063063020152824], [-73.970793030664, 40.78844498977836]}

В следующем примере упрощают линии и объединяются результаты в коллекцию геометрии GeoJSON.

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

Выходные данные

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

В следующем примере упрощены строки и унифицированы результаты

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)

Выходные данные

Дороги
{"type": "MultiLineString", "координаты": [ ... ]}

В следующем примере возвращается значение True из-за недопустимой строки.

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

Выходные данные

is_invalid_line
Истина

В следующем примере возвращается значение True из-за недопустимого допуска.

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

Выходные данные

is_invalid_line
Истина

В следующем примере возвращается значение True, так как высокая терпимость приводит к исчезновению небольшой строки.

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

Выходные данные

is_invalid_line
Истина