iOS: ¿Puedo asociar manualmente la networking Wi-Fi con la location geográfica?

¿Es posible hacer que el teléfono "sepa" que una networking wifi específica se encuentra en una location geográfica específica?

if (answer == YES) { than how? } else { can the phone figure this out by himself? } 

Otra pregunta similar: ¿hay alguna forma de comenzar a monitorear una región con una precisión de ~ 100m pero decirle al CLLocationManager que solo use networkinges wifi y antenas celulares? Porque no quiero encender el GPS sin importar qué …

¡Gracias!

El posicionamiento del iPhone es una mierda y no hay nada que puedas hacer.

Si desbloquea su dispositivo, puede usar el marco privado Apple80211 para search las networkinges Wi-Fi disponibles y la potencia de su señal. Pero eso también significa que su aplicación será rechazada.

Si el usuario se conecta manualmente a un Wi-Fi , puede ver las direcciones MAC de los dispositivos en esa networking y usarlo para adivinar su position. Como Wi-Fi tiene un scope de 50 metros, esa es la precisión que obtienes.

Todo el sistema de posicionamiento es transparente para un desarrollador de App Store, lo que significa que una aplicación no puede deshabilitar el GPS, listr Wi-Fis o leer la potencia de la señal. Lo máximo que puede hacer es adivinar si se está posicionando a través del GPS o Wi-Fi mirando el parámetro de altitud.

Caso de uso: estás en un centro comercial y quieres saber dónde está la tienda X. Probablemente no haya señal GPS, y si instala un repetidor GPS, obtendrá la position de la antena de ese repetidor, no su position. Incluso si instala una docena de puntos de acceso Wi-Fi, no puede pedirle al usuario que se conecte manualmente porque es una molestia, e incluso si lo hiciera obtendría una precisión de 50-100 metros, y luego existe el riesgo de security de conectarse aquí y ahi. Básicamente estás jodido.

Estoy completamente de acuerdo con Jano: la lógica de Apple tiene más sentido que otras soluciones. De todos modos, puede get fácilmente su ID de networking WIFI:

 -(void)LogInfo:(NSDictionary*)info forKey:(NSString*)key; { NSString* temp; temp = [info objectForKey: key]; NSLog(temp); } - (void)fetchSSIDInfo { NSArray *ifs = (id)CNCopySupportedInterfaces(); NSDictionary* info = nil; for (NSString *ifnam in ifs) { info = (id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam); NSString *temp = [NSString stringWithFormat:@"%@", [info description]]; [self AddToLog: temp]; [self LogInfo:info forKey:@"BSSID"]; [self LogInfo:info forKey:@"SSID"]; [self LogInfo:info forKey:@"SSIDDATA"]; [info release]; } [ifs release]; }