Fórmula da faixa de distância ZIPCode. Qual fórmula está correta?
-
26-09-2019 - |
Pergunta
Preciso encontrar todos os códigos ZIP com um certo intervalo de um ZIPCode. Eu tenho todo o ZipCode Lat/Lon em um db.
Eu encontrei duas fórmulas on -line que variam um pouco uma da outra. Qual está correto?
Fórmula 1:
def latRange = range/69.172
def lonRange = Math.abs(range/(Math.cos(Math.toRadians(zip.latitude)) * 69.172));
def minLat = zip.latitude - latRange
def maxLat = zip.latitude + latRange
def minLon = zip.longitude - lonRange
def maxLon = zip.longitude + lonRange
Fórmula 2: (é idêntico à Fórmula 1, exceto no seguinte :)
def lonRange = Math.abs(range/(Math.cos(zip.latitude) * 69.172));
(O segundo não tem Math.toRadians
) Depois de receber o Min/Max Lat/LON, pretendo pesquisar uma tabela de banco de dados usando um critério entre os critérios. Qual fórmula está correta?
Solução
Depende das unidades do seu Lat/Long. Se eles estão em graus, você precisa se converter em radianos.
Outras dicas
Eu sugeriria deixar o banco de dados fazer todo o trabalho pesado. Vários DBs têm complementos geográficos, mas aqui estão alguns exemplos: MongoDB, PostGres+PostGis
Se seus dados de latitude e longitude ainda não estão em radianos, você precisará usar o que converte. Você deve estar ciente de que a maneira como as coisas estão configuradas agora, você acabará com um quadrado variar.
Você ficará melhor fazendo o cálculo da distância em sua consulta MySQL, usando o teorema de Pitágoras para encontrar a distância para que você acabe com um circular variar. Esta pergunta deve ajudá -lo a começar com isso: MySQL Select ZipCodes dentro de x km/milhas dentro do alcance de y .
Se você precisar melhorar seu desempenho, você pode indexá -lo usando Esfinge.