geo_line_to_s2cells()
Olyan S2 cellatokeneket számít ki, amelyek egy vonallal vagy többsoros vonallal foglalkoznak a Földön. Ez a függvény hasznos térinformatikai illesztőeszköz.
Syntax
geo_line_to_s2cells(
lineString [,
level[ ,
radius]])
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
lineString | dynamic |
✔️ | Vonal vagy többsoros GeoJSON formátumban. |
Szinten | int |
Meghatározza a kért cellaszintet. A támogatott értékek a(z) [0, 30] tartományban vannak. Ha nincs meghatározva, a rendszer az alapértelmezett értéket 11 használja. |
|
Sugár | real |
Puffer sugara méterben. Ha nincs meghatározva, a rendszer az alapértelmezett értéket 0 használja. |
Válaszok
S2 cellajogkivonat-sztringek tömbje, amelyek egy sort vagy többsorost fednek le. Ha a sugár pozitív értékre van állítva, akkor a burkolat bemeneti alakzatból és a bemeneti geometria sugarán belüli összes pontból áll.
Ha a következők bármelyike: sor, szint, sugár érvénytelen, vagy a cellaszám meghaladja a korlátot, a lekérdezés null eredményt ad.
Megjegyzés
- A vonal S2 cellatokenekkel való lefedése hasznos lehet a koordináták vonalakhoz való egyeztetéséhez, így a közeli vonalakat is megkeresheti.
- A jogkivonatokat lefedő vonal azonos S2 cellaszintű.
- A jogkivonatok soronkénti maximális száma 65536.
- A Föld távolságának mérésére használt geodéziai datum egy gömb. A vonalszélek geodéziaiak a gömbön.
- Ha a bemeneti vonal élei egyenes cartesian vonalak, fontolja meg a geo_line_densify() használatát a planáris élek geodéziaiká alakításához.
Az S2 cellaszint kiválasztása
- Ideális esetben minden sort egy vagy csak néhány egyedi cellával szeretnénk lefedni, így egyetlen két sor sem osztozik ugyanazon a cellán.
- A gyakorlatban próbáljon meg csak néhány cellát lefedni, legfeljebb egy tucatot. A több mint 10 000 cellával való lefedés nem biztos, hogy jó teljesítményt eredményez.
- A lekérdezések futási ideje és a memóriahasználat nagyban eltérhet az S2 cellaszintű értékek miatt.
Teljesítménnyel kapcsolatos javaslatok
- Ha lehetséges, csökkentse a koordináták táblázatméretét az illesztés előtt, az egymáshoz nagyon közel álló koordináták csoportosításával térinformatikai csoportosítással vagy az adatok vagy üzleti igények miatt szükségtelen koordináták kiszűrésével.
- Ha lehetséges, csökkentse a sorok számát az adatok jellege vagy az üzleti igények miatt. Szűrje ki a felesleges vonalakat az illesztés előtt, hatókört a kívánt területre, vagy egyesítse a vonalakat.
- Nagyon nagy vonalak esetén csökkentse a méretüket geo_line_simplify() használatával.
- Az S2 cellaszint módosítása javíthatja a teljesítményt és a memóriahasználatot.
- Az illesztési típus és a tipp módosítása javíthatja a teljesítményt és a memóriahasználatot.
- Ha pozitív sugár van beállítva, a pufferelt alakzat 0. sugarára való visszaállítás geo_line_buffer() használatával javíthatja a teljesítményt.
Példák
A következő lekérdezés megkeresi az összes 500 méteren belüli metróállomást, és az utcanév alapján összesíti a csövek számát.
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 |
---|---|
Buckingham-palota | 1 |
London Bridge | 1 |
Érvénytelen sor esetén a rendszer null eredményt ad vissza.
let line = dynamic({"type":"LineString","coordinates":[[[0,0],[0,0]]]});
print isnull(geo_line_to_s2cells(line))
print_0 |
---|
Igaz |
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: