geo_line_to_s2cells()
Vypočítá tokeny buněk S2, které na Zemi překryjí čáru nebo víceřádkovou linku. Tato funkce je užitečný nástroj pro geoprostorové spojování.
Syntax
geo_line_to_s2cells(
lineString [,
level[ ,
radius]])
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
Linestring | dynamic |
✔️ | Spojnicový nebo víceřádkový ve formátu GeoJSON. |
Úrovni | int |
Definuje požadovanou úroveň buňky. Podporované hodnoty jsou v rozsahu [0, 30]. Pokud není zadán, použije se výchozí hodnota 11 . |
|
Radius | real |
Poloměr vyrovnávací paměti v metrech. Pokud není zadán, použije se výchozí hodnota 0 . |
Návraty
Pole řetězců tokenu buňky S2, které pokrývají řádek nebo víceřádkový řádek. Pokud je poloměr nastaven na kladnou hodnotu, bude kryt jak vstupního tvaru, tak všech bodů v rámci poloměru vstupní geometrie.
Pokud některá z následujících hodnot: řádek, úroveň, poloměr je neplatný nebo počet buněk překročí limit, dotaz vytvoří výsledek null.
Poznámka
- Překrytí čáry tokeny buněk S2 může být užitečné při porovnávání souřadnic s spojnicemi, a tedy při hledání bodů v blízkosti čar.
- Tokeny překrývající řádky mají stejnou úroveň buněk S2.
- Maximální počet tokenů na řádek je 65536.
- Geodetické datum používané k měření vzdálenosti na Zemi je koule. Hrany čar jsou geodézie na kouli.
- Pokud jsou hrany vstupních čar rovné kartézské čáry, zvažte použití geo_line_densify() k převodu rovinných okrajů na geodézie.
Volba úrovně buňky S2
- V ideálním případě bychom chtěli zakrýt každý řádek jednou nebo několika jedinečnými buňkami tak, aby žádné dva řádky nesdílely stejnou buňku.
- V praxi zkuste zakryt pouze několika buňkami, ne více než tucet. Pokrytí více než 10 000 buněk nemusí přinést dobrý výkon.
- Doba běhu dotazu a spotřeba paměti se můžou výrazně lišit kvůli různým hodnotám na úrovni buněk S2.
Návrhy ke zlepšení výkonu
- Pokud je to možné, zmenšete velikost tabulky souřadnic před spojením seskupením souřadnic, které jsou velmi blízko sebe, pomocí geoprostorového clusteringu nebo vyfiltrováním nepotřebných souřadnic vzhledem k povaze dat nebo obchodním potřebám.
- Pokud je to možné, snižte počet řádků z důvodu povahy dat nebo obchodních potřeb. Vyfiltrujte nepotřebné řádky před spojením, obor na oblast zájmu nebo sjednocte řádky.
- V případě velmi velkých čar zmenšete jejich velikost pomocí geo_line_simplify().
- Změna úrovně buňky S2 může zvýšit výkon a spotřebu paměti.
- Změna typu spojení a nápovědy může zlepšit výkon a využití paměti.
- V případě nastavení kladného poloměru může návrat k poloměru 0 u obrazce ve vyrovnávací paměti pomocí geo_line_buffer() zvýšit výkon.
Příklady
Následující dotaz najde všechny stanice metra v okruhu 500 metrů od ulic a agreguje počet trubek podle názvu ulice.
let radius = 500;
let tube_stations = datatable(tube_station_name:string, lng:real, lat: real)
[
"St. James' Park", -0.13451078568013486, 51.49919145858172,
"London Bridge station", -0.08492752160134387, 51.504876316440914,
// more points
];
let streets = datatable(street_name:string, line:dynamic)
[
"Buckingham Palace", dynamic({"type":"LineString","coordinates":[[-0.1399656708283601,51.50190802248855],[-0.14088438832752104,51.50012082761452]]}),
"London Bridge", dynamic({"type":"LineString","coordinates":[[-0.087152,51.509596],[-0.088340,51.506110]]}),
// more lines
];
let join_level = 14;
let lines = materialize(streets | extend id = new_guid());
let res =
lines
| project id, covering = geo_line_to_s2cells(line, join_level, radius)
| mv-expand covering to typeof(string)
| join kind=inner hint.strategy=broadcast
(
tube_stations
| extend covering = geo_point_to_s2cell(lng, lat, join_level)
) on covering;
res | lookup lines on id
| where geo_distance_point_to_line(lng, lat, line) <= radius
| summarize count = count() by name = street_name
name | count |
---|---|
Buckinghamský palác | 1 |
Londýn Bridge | 1 |
V případě neplatného řádku se vrátí výsledek null.
let line = dynamic({"type":"LineString","coordinates":[[[0,0],[0,0]]]});
print isnull(geo_line_to_s2cells(line))
print_0 |
---|
Ano |
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro