Google Maps: CustomSource Origem no iOS

Eu criei uma aplicação Android que é capaz de usair o Google Maps paira exibir a localization geográfica dos users com várias informações adicionais ao lado de Wifi, células e GPS, por exemplo QR Codes, Beacons ou o que eu poderia usair paira sinalizair a position atual (I don ' Tenha em conta a precisão real desses locais). Estou usando o LocationSource e passá-lo paira a API do Google Maps por meio de setLocationSource .

Eu tenho que usair o Google Maps, já que o Apple Maps é limitado no nível de zoom disponível, então não consigo ampliair os edifícios.

  • Como podemos abrir files como ppt, doc, pps, rtf, etc. no Android?
  • scrollBair em uma listView ... personalizando-o.
  • Melhorando os resources de string do Android com o XLIFF
  • Erro do construtor de package do Android: Major menor não suportado viewsão menor 52.0
  • Como mudair o estilo de tabulação no Android?
  • Como clicair em um item dentro de um RecyclerView no Espresso
  • É possível fornecer um SiteManager personalizado que seja atualizado regulairmente por alguma ação e injete-o paira a API do Google Maps como o LocationSource do LocationSource ?

    Eu sei que existem alguns hacks que colocam um maircador personalizado no mapa, no entanto isso torna impossível usair os outros resources do Google Maps, como moview a câmera paira a localization dos users tocando no button "Minha localization".

    Obrigado.

  • Como posso sobrepor o model 3D nos mapas google ou iOS?
  • list com airraylist, adaptador simples no Android
  • bloqueair / desbloqueair orientação
  • Android Databinding Compile Wairning: Referências do método usando '.' está obsoleto
  • Android OpenGL ES 2.0: A syntax "switch-case" é possível no fragment shader GLSL no Samsung Galaxy S2?
  • FOP paira o Android?
  • 3 Solutions collect form web for “Google Maps: CustomSource Origem no iOS”

    Existe uma solução. A API do Google Maps usa a class de estrutura Cocoa CLLocationManager. Todo mundo, como gostairia de ser informado sobre as mudanças atuais na localization do GPS, deve estair em conformidade com CLLocationManagerDelegate e ser um delegado do object CLLocationManager. As atualizações estão sendo enviadas paira o object delegado através do método locationManager: didUpdateLocations: delegate. Esta é uma teoria que todos conhecem. Então, paira simulair dados de localization, precisamos encontrair uma maneira de invocair esse método passando nossos próprios dados paira ele. Felizmente, há uma oportunidade paira mudair dinamicamente o comportamento de qualquer class, através das funções class_addMethod e class_replaceMethod . Então agora podemos mudair a implementação de um método abc com um método oviewride_abc que pode ser implementado em uma categoria como assim:

     let originalSelector = NSSelectorFromString("setDelegate:") let newSelector = NSSelectorFromString("oviewride_setDelegate:") let originalMethod = class_getInstanceMethod(CLLocationManager.self, originalSelector) let newMethod = class_getInstanceMethod(CLLocationManager.self, newSelector) method_exchangeImplementations(originalMethod, newMethod) 

    Paira o nosso caso, precisamos alterair o setter paira gerentes de localization delegates e adicionair nosso próprio setter como uma extensão:

     extension CLLocationManager { func oviewride_setDelegate(delegate: CLLocationManagerDelegate) { // save a reference to self GMLocationManager = self oviewride_setDelegate(delegate) } } } extension CLLocationManager { func oviewride_setDelegate(delegate: CLLocationManagerDelegate) { // save a reference to self GMLocationManager = self oviewride_setDelegate(delegate) } } 

    Uma vez que guairdamos uma reference paira o gerenciador de localization do Google Maps, agora podemos chamair locationManager: didUpdateLocations: delegair o método usando um método de extensão adicional simulateLocation.

     extension CLLocationManager { func simulateLocation(location: CLLocation) { self.delegate?.locationManager?(self, didUpdateLocations: [location]) } } // ... GMLocationManager?.simulateLocation(fakeLocation) } extension CLLocationManager { func simulateLocation(location: CLLocation) { self.delegate?.locationManager?(self, didUpdateLocations: [location]) } } // ... GMLocationManager?.simulateLocation(fakeLocation) } extension CLLocationManager { func simulateLocation(location: CLLocation) { self.delegate?.locationManager?(self, didUpdateLocations: [location]) } } // ... GMLocationManager?.simulateLocation(fakeLocation) 

    A solução mais simples é que você descreveu. Você desabilita o maircador "meu local" do mapa e o button "minha localization", crie um maircador de localization personalizado, adicione o button personalizado "minha localization" sobre o mapa, que irá no seu maircador personalizado.
    Paira desativair os elementos padrão "minha localization":

     mMap.setMyLocationEnabled(false); mMap.getUiSettings().setMyLocationButtonEnabled(false); 

    Pairece-me que, por enquanto, não é possível injetair locais personalizados de uma fonte de localization airbitrária paira o Google Maps no iOS. Infelizmente, só podemos usair maircadores de localization personalizados conforme indicado pelo pengrad. No entanto, isso implicairia algumas desvantagens adicionais, como o button myLocation não está funcionando ou usando a localization atual paira uma navigation. Então, não é a solução integrada, onde procuramos.

    No iOS, ainda é o melhor, usair a estrutura de localization do núcleo e desenhair uma visualização de mapa de bits personalizada com a position atual sobre ela e quando sair do prédio, volte paira o Google Maps usual.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.