Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
O geo_line_lookup
plug-in procura um Line
valor em uma tabela de pesquisa e retorna linhas com valores correspondentes. O plugin é invocado com o operador evaluate
.
Sintaxe
O|
evaluate
geo_line_lookup(
Tabela,
de PesquisaLookupLineKey,
SourceLongitude,
SourceLatitude,
Raio,
[ return_unmatched ] ,
[ lookup_area_radius ] ,
[ return_lookup_key ])
Parâmetros
Nome | Tipo | Obrigatório | Descrição |
---|---|---|---|
T | string |
✔️ | A entrada tabular cujas colunas SourceLongitude e SourceLatitude são usadas para correspondência de linhas. |
Tabela de Pesquisa | string |
✔️ | Expressão de tabela ou tabela com dados de pesquisa de linhas, cuja coluna LookupLineKey é usada para correspondência de linhas. |
LookupLineKey | dynamic |
✔️ | A coluna de LookupTable com linha ou multilinha no formato GeoJSON e de tipo dinâmico que é correspondida em relação a cada SourceLongitude, SourceLatitudes valores. |
SourceLongitude | real |
✔️ | A coluna de T com o valor de longitude a ser pesquisado em LookupTable. Valor da longitude em graus. O valor válido é um número real e está no intervalo [-180, +180]. |
SourceLatitude | real |
✔️ | A coluna de T com o valor de latitude a ser pesquisado em LookupTable. Valor de latitude em graus. O valor válido é um número real e está no intervalo [-90, +90]. |
Raio | real |
✔️ | Comprimento da linha onde o local de origem é considerado uma correspondência. |
return_unmatched | bool |
Um sinalizador booleano opcional que define se o resultado deve incluir todas ou apenas linhas correspondentes (padrão: false - somente linhas correspondentes retornadas). |
|
lookup_area_radius | real |
Uma distância de raio de área de pesquisa opcional em valores de metros que pode ajudar na correspondência de locais com suas respetivas linhas. | |
return_lookup_key | bool |
Um sinalizador booleano opcional que define se o resultado deve incluir a coluna LookupLineKey (padrão: false ). |
Devoluções
O geo_line_lookup
plugin retorna um resultado de junção (pesquisa). O esquema da tabela é a união da tabela de origem e da tabela de pesquisa, semelhante ao resultado do lookup
operador.
A distância de localização de uma linha é testada via geo_distance_point_to_line().
Se o argumento return_unmatched estiver definido como true
, a tabela resultante incluirá linhas correspondentes e não correspondentes (preenchidas com nulos).
Se o argumento return_unmatched for definido como false
, ou omitido (o valor padrão de é usado), a tabela resultante terá tantos registros quanto os resultados correspondentes false
. Esta variante de pesquisa tem melhor desempenho em comparação com a return_unmatched=true
execução.
A definição do comprimento lookup_area_radius substitui o mecanismo de correspondência interno e pode melhorar ou piorar o tempo de execução e\ou o consumo de memória. Isso não afeta a correção da consulta. Leia mais abaixo sobre como definir esse valor opcional.
Observação
- Este plugin cobre o cenário de classificar locais para linhas dentro de um raio da linha, assumindo um pequeno tamanho de tabela de pesquisa, com a tabela de entrada opcionalmente tendo um tamanho maior.
- O desempenho do plug-in depende dos tamanhos das tabelas de pesquisa e fonte de dados, do número de colunas e do número de registros correspondentes.
- As coordenadas geoespaciais são interpretadas como representadas pelo sistema de referência de coordenadas WGS-84 .
- O dado geodésico usado para medir a distância na Terra é uma esfera. As bordas das linhas são geodésicas na esfera.
- Se as bordas da linha de entrada forem linhas cartesianas retas, considere usar geo_line_densify() para converter arestas planas em geodésicas.
- As linhas de entrada devem ser válidas.
Definição e restrições de LineString
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]]})
- A matriz de coordenadas LineString deve conter pelo menos duas entradas.
- As coordenadas [longitude, latitude] devem ser válidas quando a longitude é um número real no intervalo [-180, +180] e a latitude é um número real no intervalo [-90, +90].
- O comprimento da aresta deve ser inferior a 180 graus. Escolhe-se a aresta mais curta entre os dois vértices.
Configuração lookup_area_radius (se necessário)
A configuração do raio da área de pesquisa substitui o mecanismo interno para fazer a correspondência entre os locais e suas respetivas linhas. O valor é uma distância em metros. Idealmente, o raio da área de pesquisa deve representar uma distância do centro da linha, de modo que, dentro dessa distância, um ponto corresponda exatamente a uma linha de uma maneira um-para-um e, dentro dessa distância, não haja mais do que uma única linha. Como os dados de linhas podem ser grandes, as linhas podem variar muito em tamanho e forma em comparação umas com as outras e a proximidade da linha uma com a outra, pode ser um desafio chegar ao raio que tem o melhor desempenho. Se necessário, aqui está um exemplo que pode ajudar.
LinesTable | valor do projeto = geo_line_length(linha) | resumir min = min(valor), avg = avg(valor), max = max(valor)
Tente usar o raio de pesquisa a partir do valor médio para o mínimo (se as linhas estiverem próximas umas das outras) ou máximo por múltiplos de 2.
Sugestão
- Se a tabela Locais tiver muitas coordenadas próximas umas das outras, considere agregá-las usando geo_point_to_s2cell().
- Talvez seja possível criar uma funcionalidade de junção mais personalizada (ou de alto desempenho) usando geo_line_to_s2cells().
Exemplos
O exemplo a seguir retorna apenas linhas correspondentes.
let roads = datatable(road_name:string, road:dynamic)
[
"5th Avenue NY", dynamic({"type":"LineString","coordinates":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]}),
"Palace Ave", dynamic({"type":"LineString","coordinates":[[-0.18756982045002246,51.50245944666557],[-0.18908519740253382,51.50544952706903]]}),
];
let locations = datatable(location_name:string, longitude:real, latitude:real)
[
"Empire State Building", -73.98567337898565, 40.74842629977377,
"Grand Central Terminal", -73.97713140725149, 40.752730320824895,
"Statue of Liberty", -74.04462223203123, 40.689195627512674,
"Kensington Palace", -0.1885272501232862, 51.504906159672316
];
locations
| evaluate geo_line_lookup(roads, road, longitude, latitude, 100, return_lookup_key = true)
Realização
location_name | longitude | latitude | road_name | estrada |
---|---|---|---|---|
Edifício Empire State | -73.9856733789857 | 40.7484262997738 | 5ª Avenida NY | {"type":"LineString","coordenadas":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]} |
Palácio de Kensington | -0.188527250123286 | 51.5049061596723 | Palácio Ave | {"type":"LineString","coordenadas":[[-0.18756982045002247,51.50245944666557],[-0.18908519740253383,51.50544952706903]]} |
O exemplo a seguir retorna linhas correspondentes e não correspondentes.
let roads = datatable(road_name:string, road:dynamic)
[
"5th Avenue NY", dynamic({"type":"LineString","coordinates":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]}),
"Palace Ave", dynamic({"type":"LineString","coordinates":[[-0.18756982045002246,51.50245944666557],[-0.18908519740253382,51.50544952706903]]}),
];
let locations = datatable(location_name:string, longitude:real, latitude:real)
[
"Empire State Building", -73.98567337898565, 40.74842629977377,
"Grand Central Terminal", -73.97713140725149, 40.752730320824895,
"Statue of Liberty", -74.04462223203123, 40.689195627512674,
"Kensington Palace", -0.1885272501232862, 51.504906159672316
];
locations
| evaluate geo_line_lookup(roads, road, longitude, latitude, 100, return_unmatched = true, return_lookup_key = true)
Realização
location_name | longitude | latitude | road_name | estrada |
---|---|---|---|---|
Edifício Empire State | -73.9856733789857 | 40.7484262997738 | 5ª Avenida NY | {"type":"LineString","coordenadas":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]} |
Palácio de Kensington | -0.188527250123286 | 51.5049061596723 | Palácio Ave | {"type":"LineString","coordenadas":[[-0.18756982045002247,51.50245944666557],[-0.18908519740253383,51.50544952706903]]} |
Estátua da Liberdade | -74.04462223203123 | 40.689195627512674 | ||
Grand Central Terminal | -73.97713140725149 | 40.752730320824895 |
O exemplo a seguir retorna linhas correspondentes e não correspondentes, com raio definido como 350m.
let roads = datatable(road_name:string, road:dynamic)
[
"5th Avenue NY", dynamic({"type":"LineString","coordinates":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]}),
"Palace Ave", dynamic({"type":"LineString","coordinates":[[-0.18756982045002246,51.50245944666557],[-0.18908519740253382,51.50544952706903]]}),
];
let locations = datatable(location_name:string, longitude:real, latitude:real)
[
"Empire State Building", -73.98567337898565, 40.74842629977377,
"Grand Central Terminal", -73.97713140725149, 40.752730320824895,
"Statue of Liberty", -74.04462223203123, 40.689195627512674,
"Kensington Palace", -0.1885272501232862, 51.504906159672316
];
locations
| evaluate geo_line_lookup(roads, road, longitude, latitude, 350, return_unmatched = true, return_lookup_key = true)
location_name | longitude | latitude | road_name | estrada |
---|---|---|---|---|
Edifício Empire State | -73.9856733789857 | 40.7484262997738 | 5ª Avenida NY | {"type":"LineString","coordenadas":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]} |
Palácio de Kensington | -0.188527250123286 | 51.5049061596723 | Palácio Ave | {"type":"LineString","coordenadas":[[-0.18756982045002247,51.50245944666557],[-0.18908519740253383,51.50544952706903]]} |
Grand Central Terminal | -73.97713140725149 | 40.752730320824895 | 5ª Avenida NY | {"type":"LineString","coordenadas":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]} |
Estátua da Liberdade | -74.04462223203123 | 40.689195627512674 |
O exemplo a seguir conta locais por proximidade à estrada.
let roads = datatable(road_name:string, road:dynamic)
[
"5th Avenue NY", dynamic({"type":"LineString","coordinates":[[-73.97291864770574,40.76428551254824],[-73.99708638113894,40.73145135821781]]}),
"Palace Ave", dynamic({"type":"LineString","coordinates":[[-0.18756982045002246,51.50245944666557],[-0.18908519740253382,51.50544952706903]]}),
];
let locations = datatable(location_name:string, longitude:real, latitude:real)
[
"Empire State Building", -73.98567337898565, 40.74842629977377,
"Grand Central Terminal", -73.97713140725149, 40.752730320824895,
"Statue of Liberty", -74.04462223203123, 40.689195627512674,
"Kensington Palace", -0.1885272501232862, 51.504906159672316
];
locations
| evaluate geo_line_lookup(roads, road, longitude, latitude, 350)
| summarize count() by road_name
Realização
road_name | contagem_ |
---|---|
5ª Avenida NY | 2 |
Palácio Ave | 1 |
Conteúdo relacionado
- Visão geral do geo_distance_point_to_line()
- Visão geral de geo_line_to_s2cells()