Pergunta

Estou engenharia reversa de um aplicativo de visualização de transporte. Eu preciso descobrir a latitude para a origem de seu feed de dados. Especificamente, o que XY 0,0 é. As únicas fórmulas eu encontrei distância calcular entre dois pontos, ou localização de um rolamento / distância.

Eles usam o XY para exibir um mapa em uma aplicação muito legado. O XY é em pés.

Eu tenho essas coordenadas:

47.70446615506108, -122.34469839507263: x=1268314, y=260622
47.774182540800616,-122.3412994737105:  x=1269649, y=286031
47.60024792289405, -122.32767331735774: x=1271767, y=222532
47.57012494413499, -122.29129609983679: x=1280532, y=211374

Eu preciso descobrir o que a latitude ea longitude de x=0, y=0 é eo que a fórmula seria para descobrir isso.

Eles têm dois feeds de dados, um é mais atual do que o outro. A alimentação com os dados mais atuais não inclui latitude, longitude, mas apenas XY. Eu estou tentando extrapolar com base em sua menos corrente, ainda mais informativo (inclui lat, lon) feed de dados que 0,0 é para que eu possa simplesmente converter suas coordenadas XY (mais atual) da alimentação de dados para latitude e longitude.

Foi útil?

Solução

Pergunte a eles o sistema de coordenadas que está usando! (Ou se você tem o conjunto de dados de algum banco de dados, olhar para os metadados para o conjunto de dados e deve dizer-lhe. Caso contrário eu seria cético em relação a seu valor)

Muito provavelmente este é um dos avião estado sistemas de coordenadas . Eles são para áreas localizadas da terra (tipo como UTM ), e são frequentemente usados ??para levantamento.

Você pode usar CORPSCON (ou outros programas SIG; ExpertGPS vai fazer isso se você tiver o GIS Option pack mas não é livre eu esquecer se GPSBabel faz a conversão) para converter entre latitude / longitude e qualquer do avião estado sistemas de coordenadas. Você também precisa saber que datum as coordenadas estão em. WGS84 e NAD83 são muito próximos, mas NAD27 é diferente.

Outras dicas

Se você olhar para as 2 primeiras linhas de dados e subtrair a latitude

47.7044 - 47.7741 = -0.06972 degrees

Há 60 milhas náuticas por grau de latitude e 6076 pés por milha náutica.

-.06972 * 60 * 6076 = 25,415 ft

Subtraindo os dois valores 'Y':

260662 - 286031 = 25,409 ft

Então, na verdade, que parece provar os valores X e Y estão em pé.

Se você pegar qualquer um dos valores Y, e converter de volta para graus, por exemplo

260622 ft / ( 6076 ft/nm ) / ( 60 nm/degree ) = .71
286031 ft / 6076 / 60 = .78

Assim, subtraindo esses valores das latitudes (47.70 e 47.77) dá-lhe muito perto de exatamente 47 graus, o que deve ser a sua y = 0 ponto.

Para longitude, um grau é de 60 milhas náuticas no equador e 0 milhas nos pólos. Portanto, o número de milhas por grau deve ser multiplicada pelo co-seno da latitude, COS assim aproximadamente (47 graus), ou 0,68. Assim em vez de 6076 nm por grau, é sobre 4145 nm.

Assim, para os valores de x,

1268314 ft / ( 4145 ft/nm ) / ( 60 nm/degree ) = 5.10 degrees
1269649 ft / 4145 / 60 = 5.10 degrees

Estes números X aumentar com o aumento da latitude (menos negativo), então eu acredito que você deve adicionar 5,1 graus, o que significa o ponto base X é sobre

-122.3 + 5.1 = 117.2 West longitude for your x=0 point.

Este é mais ou menos a posição de Spokane WA.

Assim, dado X = 1280532, Y = 211374

Lat = 47 + ( 211374 / 6096 / 60 ) = 47.58
Lon = -117.2 - ( 1280532 / ( 6096 * cos(47.58)) / 60 ) = -122.35

O que é mais ou menos equivalente aos dados fornecidos 47,57 e -122,29

A variação pode ser devido a diferentes projecções - o X, sistema de Y pode ser um "achatada" projecção por oposição a latitude / longitude que se aplica a uma saliência esférica? Assim, para ser preciso você ainda pode precisar de matemática mais avançada ou que biblioteca de código aberto:)

Esta questão também pode ser útil, que contém o código para calcular grandes distâncias de círculo:

calcular a distância entre dois latitude pontos -longitude? (Fórmula Haversine)

Existem muitos sistemas de coordenadas diferentes. Você precisa descobrir o que os sistemas de coordenadas são para o / do lon lat (por exemplo WGS84 etc) e x / y do primeiro (por exemplo, algum tipo de sistema projetada provavelmente).

Uma vez que você tiver essa informação, existem diversas ferramentas que você pode usar para fazer conversões e manipulações. Um exemplo (de uma biblioteca de codificação de fonte aberta livre) é proj4 .

Você tem bons conselhos sobre sistemas de coordenadas já, então eu vou apenas carrilhão com a biblioteca eu tenho utilizado com grande sucesso no passado.

Geotrans é aprovado para uso pelo Departamento de Defesa dos Estados Unidos, assim você pode ter certeza que ele está bem testado. Você pode agarrá-lo a partir daqui:

http://earth-info.nga.mil/GandG/geotrans/index.html

Isso pode não ser o elo direita como que as negociações página sobre o aplicativo, não pela biblioteca. Espero que a biblioteca está no pacote Developers. termos de licenciamento eram muito liberal de memória, mas certifique-se de rever os termos antes de usá-lo comercialmente.

Editar:

Uma discussão interessante sobre o licenciamento Geotrans pode ser encontrada aqui:

http://www.mail-archive.com/debian-legal@lists.debian.org/msg39263.html

Por aqui, eu disse o seguinte:

Em Java, eu usaria o OpenMap conversor de expressão de um ponto em UTM para uma utilização latitude e longitude (assumindo um elipsóide WGS-84, que é mais vulgarmente utilizado nos GPS).

OpenMap é open source e gostaria de postar um link para sua página de download, mas eles têm um script de licença curto no caminho. Então, para evitar ser rude, eu não vou profunda ligação. Em vez disso, siga para sua homepage e clique em downloads .

Isso deve ou resolver seu problema diretamente ou pelo menos apontá-lo para um algoritmo útil.

Eu usei GPoint PHP classe de Brenor Brophey fazer isso em um par de ocasiões. Sólidos resultados, código GPL, e facilmente implantados. Recomendado.

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