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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top