Por favor, consulte o exemplo e a imagem correspondente.
Gostaria de conseguir o seguinte: proporcionar dois locais (latitude / longitude), que são mostradas abaixo como uma e B . A partir disso, uma linha virtual seria desenhada e então a distância entre essa linha e C seria calculada (em qualquer medida).
Consegui isso atualmente na API do Google Maps v3, mas também desejo realizar isso nos bastidores no meu idioma preferido. Todas as dicas / idéias serão muito apreciadas!
geolocation
mathematics
Prisioneiro
fonte
fonte
Respostas:
O menor comprimento é a distância que você precisa, a menos que eu esteja enganado?
fonte
None
quando existe uma solução legítima. O problema é que o último condicional assume X1 <X2 e Y1 <Y2, o que nem sempre pode ser garantido. É necessário um melhor teste de intermediação.Talvez eu esteja complicando demais, mas o que você quer é a distância de um ponto a uma linha. Essa é a distância de um ponto ao longo de AB que liga AB com C com uma linha ortogonal a AB. Esse vetor perpendicular a AB é dado por
(Eu usei os colchetes para definir um vetor ou uma matriz de dois elementos). A distância entre C [xp, yp] e o ponto A é
A distância entre a linha e C é apenas a projeção de u para v. Se assumirmos que mod (v) = 1 (apenas normalizá-la), então
A única complicação é que você provavelmente deseja garantir que suas coordenadas não sejam pares WGS84 lat / log, mas projetadas (ou use coordenadas geodésicas). Você pode usar OGR ou Proj4 para isso.
fonte
Sendo um pouco avesso a toda essa matemática, eu chegaria a ela de um ângulo diferente. Eu a tornaria uma linha 'real', em vez de virtual, e depois usaria as ferramentas existentes.
Se A e B compartilharem um atributo, você poderá conectá-los desenhando uma linha (o Kosmo GIS possui uma ferramenta que criará linhas a partir de pontos, e acredito que também haja um plug-in QGIS para isso). Depois de ter as linhas, uma função 'near' na camada de pontos 'C' fornecerá a distância para a linha. Deixe o software lidar com a matemática para você!
fonte
Se você estava usando java no android, é apenas uma linha com a função de biblioteca
distanceToLine:
Calcula a distância na esfera entre o ponto p e o segmento de linha do início ao fim.
Parâmetros: p - o ponto a ser medido
start - o início do segmento de linha
end - o fim do segmento de linha
Retornos: a distância em metros (assumindo terra esférica)
Basta adicionar biblioteca ao seu
fonte