Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tudo que estiver relacionado a tratamento de dados, Power Query editor e linguagem M
Por WolfShadow
#57670
Senhores,
Tenho uma planilha que testa (via VBA) se um ponto esta dentro dos vértices de um polígono.
Preciso replicar esta solução no Power Bi, pela experiência que tenho no Excel, imagino que a solução deva ser em Power Query (Linguagem M) pela necessidade de performance e estrutura da base de dados....
O arquivo esta anexo neste post (e em caso de problemas também coloquei na pasta compartilhada no link abaixo):
https://drive.google.com/drive/folders/ ... sp=sharing
O arquivo tem 3 planilhas:
- Lat Long - que é o arquivo com um exemplo simples
- Base Polígonos - que são alguns polígonos que usamos para a cidade de São Paulo
- Base de Pontos (Fake) - que tem um conjunto pequeno de pontos fake sem nome definido para não expor os dados da empresa.. nele tem basicamente:
- Colunas A até E nomenclatura de pontos e coordenadas
- Colunas F até EH aplicação das formulas e do VBA (que pensei em ser o item a ser traduzido para o M)
- Colunas EI e EJ resultado esperado

Imaginei que no Power Query a solução seria colocar a "Base Polígonos" como uma consulta onde a função consultaria os pontos da mesma forma que no Excel em anexo numa segunda consulta, com isso temos a saída das colunas de F até EH e dai uma formula condicional para chegar nas colinas EI e EJ

Não sei se o formato fica bom no Power Query.... por isso sintam-se a vontade para sugerir outras formas de viabilizar o resultado.

Obrigado por toda ajuda que possa dar
Você não está autorizado a ver ou baixar esse anexo.
Por WolfShadow
#57816
Isso mesmo a função em vba testa cada vertice e cria uma angulação e verifica se o ponto de teste esta la dentro.... O Cod em VBA é uma aplicação em excel, mas a ideia é fazer no power Query (por questões de performance)
Por Branquinho
Posts
#57818
Onde estão os polígonos na forma representada na planilha Lat Long? Não os vi na planilha Base Polígonos porque me pareceram pontos desagrupados.
Por WolfShadow
#57834
Na planilha estão listados apenas os vértices dos polígonos que basicamente são uma lista de longitude, latitude e titulo do polígono que na planilha é o desejado na resposta conforme apresentado no arquivo de exemplo que carreguei na primeira pergunta deste post...
Coloquei no google drive um arquivo KML com os polígonos (se abrir em um notepad, vc poderá ver que os vértices são os mesmos do arquivo excel mas limpo dos códigos) e ele apresenta os polígonos em si...
OBS: tentei colocar o arquivo anexo nesta resposta mas não consegui
----
No excel uso o seguinte VBA para identificar de o ponto em questão esta contido no polígono:

Option Explicit
Const dPi = 3.14159265358979

Function PointInside(rPoint As Range, rTable As Range) As Boolean
Dim vAngles, iPoints As Integer, i As Integer
Dim dAngle As Double, dTotal As Double

'Calculates the angles 0 - 2*Pi
iPoints = rTable.Rows.Count
ReDim vAngles(1 To iPoints)
For i = 1 To iPoints
If (rTable(i, 1) = rPoint(1)) Then
dAngle = IIf(rTable(i, 2) >= 0, 1, -1) * dPi
Else
dAngle = Atn((rTable(i, 2) - rPoint(2)) / (rTable(i, 1) - rPoint(1))) + IIf(rTable(i, 1) - rPoint(1) < 0, dPi, 0)
dAngle = dAngle + IIf(dAngle < 0, 2 * dPi, 0)
End If
vAngles(i) = dAngle
Next i

' Adds the differences
For i = 1 To iPoints - 1
dAngle = vAngles(i + 1) - vAngles(i) + IIf(vAngles(i + 1) < vAngles(i), 2 * dPi, 0)
dTotal = dTotal + dAngle - IIf(dAngle > dPi, 2 * dPi, 0)
Next i
PointInside = Abs(dTotal) > dPi
End Function

Essa é a função a ser traduzida no M (que já arranquei o restante dos cabelos e ainda nao consegui)
Por WolfShadow
#57843
Agora entendi a sua dúvida.... na verdade em excel acabo testando todos e a consulta fica muito lenta, mas não vi outro jeito na epoca, já como a ideia é migrar para o PBI imagino em ter esta função no Power Query da seguinte forma:
- testa se o ponto esta inserido em SP Capital
Falso: testa e retorna o nome da cidade (outros polígonos que não estão neste exemplo para não ficar pesado)
Verdadeiro: Testa e retorna o nome do polígono (que neste caso é o distrito administrativo - o conjunto de bairros da cidade)
no final das contas tinha pensado em termos de linguagem de programação em fazer um loop que quando desse verdadeiro ele sai do loop com a informação de qual poligono o ponto se refere assim ele não testa todos como no excel e fica mais agil. O meu problema é traduzir a formula usada no VBA para o Power Query, espero ter conseguido me explicar melhor. E desde já agradeço a sua atenção
Por WolfShadow
#57856
Na verdade essa planilha foi gerada a alguns anos e na época como não tinha noção de power query e power pivot e fui aprendendo com o tempo, esses campos não foram separados para uma tabela a parte para evitar repetições.... em outras palavras, foi pura falta de conhecimento na época, e como esta rodando foi ficando....
O bom que o momento de mudar é agora... saindo para o Power Bi já muda o processo e tem a possibilidade de melhorar
Por Branquinho
Posts
#57875
Pensei bastante sobre o caso. Por enquanto, não consegui resolver essa questão. Aliás, ainda tem a possibilidade de um ponto estar localizado em vários polígonos.
Por WolfShadow
#57877
Eu entendo.... por isso travei minha solução... Desde já agradeço sua atenção....
Na verdade o único caso do ponto estar dentro de mais de um polígono é no caso de São Paulo, que caso ele esteja em SP ele entra nos poligonos individuais e não tem como ele estar mais de um....
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord