Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Kusto Query Language (KQL) innehåller verktyg för geospatiala kopplingar.
Följande verktyg och funktioner är användbara:
Konvertera punkter (longitud, latitud) till en av de geo-hashar som stöds S2, H3 eller Geohash. Geo-hash kan användas som kopplingsnyckel. Två närliggande punkter konverteras till samma hashvärde eller så är de grannar, som också kan redovisas. Läs mer om olika geo-hashalgoritmer. Se exempel nedan.
Buffertfunktioner geo_point_buffer(), geo_polygon_buffer()och geo_line_buffer() kan hjälpa geospatiala villkorliga kopplingar när matchning är ett närhetsvillkor. Se exemplet nedan.
Polygon\Line lookup plugin-funktioner geo_polygon_lookup() och geo_line_lookup() tillåter enkel klassificering av platser till respektive polygoner\linjer baserat på inneslutning och\eller närhet.
Formbeklädnadsfunktioner geo-polygon-till-s2cells() och geo-line-to-s2cells() är avancerade formbeklädnadsverktyg som kan omvandla former till en samling hashar som kan bevaras och användas för kopplingar och indexering.
Tips/Råd
Om det finns för många platser i närheten använder du någon av de geo-hashar som stöds S2, H3 eller Geohash för att aggregera nära platser.
Läs mer om kopplingsoperatorn och dess smaker.
Exempel
I följande exempel visas koppling på platser med hjälp av S2.
let locations1 = datatable(name: string, longitude: real, latitude: real)
[
"a", -0.12433080766874127, 51.51115841361647,
"b", -0.12432651341458723, 51.511160848670585,
"c", -0.12432466939637266, 51.51115959669167,
"d", 1, 1,
];
let locations2 = datatable(id: string, longitude: real, latitude: real)
[
"1", -0.12432668105284961, 51.51115938802832
];
let s2_join_level = 22; // More about join levels: https://learn.microsoft.com/en-us/kusto/query/geo-point-to-s2cell-function?view=azure-data-explorer
locations1
| extend hash = geo_point_to_s2cell(longitude, latitude, s2_join_level)
| join kind = inner (locations2 | extend hash = geo_point_to_s2cell(longitude, latitude, s2_join_level)) on hash
| project name, id
Resultat
namn | Id-nummer |
---|---|
a | 1 |
b | 1 |
c | 1 |
I följande exempel visas koppling på platser som använder H3 medan du redovisar ett fall där två närliggande platser kan vara grannar.
let locations1 = datatable(name: string, longitude: real, latitude: real)
[
"a", -0.12433080766874127, 51.51115841361647,
"b", -0.12432651341458723, 51.511160848670585,
"c", -0.12432466939637266, 51.51115959669167,
"d", 1, 1,
];
let locations2 = datatable(id: string, longitude: real, latitude: real)
[
"1", -0.12432668105284961, 51.51115938802832
];
let to_hash = (lng: real, lat: real)
{
let h3_hash_level = 14; // More about join levels: https://learn.microsoft.com/en-us/kusto/query/geo-point-to-h3cell-function?view=azure-data-explorer
let h3_hash = geo_point_to_h3cell(lng, lat, h3_hash_level);
array_concat(pack_array(h3_hash), geo_h3cell_neighbors(h3_hash))
};
locations1
| extend hash = to_hash(longitude, latitude)
| mv-expand hash to typeof(string)
| join kind = inner (
locations2
| extend hash = to_hash(longitude, latitude)
| mv-expand hash to typeof(string))
on hash
| distinct name, id, longitude, latitude
Resultat
namn | Id-nummer | longitud | breddgrad |
---|---|---|---|
a | 1 | -0.124330807668741 | 51.5111584136165 |
b | 1 | -0.124330807668741 | 51.5111584136165 |
c | 1 | -0.124324669396373 | 51.5111595966917 |
I följande exempel visas koppling av platser från plats1-tabellen med platser från plats2-tabellen om punkterna från platser1 ligger inom 300 meter från tabellen locations2.
let locations1 = datatable(name: string, longitude: real, latitude: real)
[
"O2 Entrance", 0.005889454501716321, 51.50238626916584,
"O2 Entrance", 0.0009625704125020596,51.50385432770013,
"Greenwich Park", 0.0009395106042404677, 51.47700456557013,
];
let locations2 = datatable(id: string, longitude: real, latitude: real)
[
"O2 Arena", 0.003159306017352037, 51.502929224128394
]
| extend buffer = geo_point_buffer(0.003159306017352037, 51.502929224128394, 300, 0.1); // Create a radius of 300 meters from O2 center location
locations1
| evaluate geo_polygon_lookup(locations2, buffer, longitude, latitude)
| project name, id, longitude, latitude
Resultat
namn | Id-nummer | longitud | breddgrad |
---|---|---|---|
O2-ingång | O2 Arena | 0.00096257041250206 | 51.5038543277001 |
O2-ingång | O2 Arena | 0.00588945450171632 | 51.5023862691658 |