iOS: Como converter mkmappoint ou cllocationcoordinate2d para utm?
-
26-09-2019 - |
Pergunta
Pelo que li, isso exige uma matemática complicada em que não sou boa. Então, estou perguntando aqui.
Alguém tem experiência em converter um mkmappoint ou cllocationcoordinate2d em um valor UTM? Eu encontrei este recurso (http://www.uwgb.edu/dutchs/usefuldata/utmformulas.htm) Mas a matemática é esmagadora.
Solução
Você pode usar um LIB para fazer isso ou analisar o código de uma lib para entender o algoritmo e fazê -lo sozinho.
Este é um Lib C ++ que faz o trabalho: http://geographlib.sourceforge.net/html/
http://geographlib.sourceforge.net/html/classgeographlib_1_1utmups.html
Encontrei este site (http://home.hiwaay.net/~taylorc/toolbox/geography/geoutm.html). Se você olhar para o código-fonte, toda a conversão será feita usando o JavaScript, poderá dar uma olhada e tentar converter para OBJ-C.
Outras dicas
Recentemente, escrevi uma aula para isso e publiquei um projeto de amostra no Github
Exemplo de UtmConverter para iOS
A peça que você deseja é um arquivo chamado utmconverter.m. Possui métodos para converter de Lat/Long para UTM e Vice-Versa.
MKMapViewZoom
Parece ter alguns métodos de classe que podem converter entre coordenadas de mapa plano (geométrico) e mapa curvo (geográfico), embora eu não as tenha testado. Alguém me dê um polegar para cima se isso realmente funcionar
//convert from WGS84 (geographic coordinates) to UTM (geometric coordinates)
+ (double)longitudeToPixelSpaceX(double)pixelX
+ (double)latitudeToPixelSpaceY(double)pixelY
//convert from UTM to WGS84
+ (double)pixelSpaceXToLongitude(double)longitude
+ (double)pixelSpaceYToLatitude(double)latitude
alguma documentação aqui
- Objetivo C: https://github.com/jdp-global/mkmapviewzoom/blob/master/mkmapview%2bzoomlevel.m
- Para Rubymotion: http://rubydoc.info/gems/map-kit-wrapper/0.0.5/frames
ATUALIZAR:
Isso é enlouquecedor, mas para fazer com que o código -fonte desta classe funcione com precisão, eu basicamente tive que extrair os métodos em meu próprio domínio essencialmente, depois remover as partes do código referenciando MERCATOR_OFFSET
& mudança MERCATOR_RADIUS
para o valor dos medidores do raio da Terra. Fiquei meio que ok, muito surpreso quando descobri que isso realmente funcionava.