mi android la aplicación muestra la dirección de un lugar particular en el mundo y por lo tanto en las necesidades para conseguir la brújula grado.


Este es el código que he estado utilizando para calcular los grados:

public void getDirection() {        
    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);           
    }
    else{
        TextView alert = (TextView)findViewById(R.id.instruct);
        alert.setText(getString(R.string.direction_not_found));
        myCompassView.setVisibility(myCompassView.INVISIBLE);

    }
}
private SensorEventListener mySensorEventListener = new SensorEventListener(){

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        //TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        //TODO Auto-generated method stub
        compassBearing = (float)event.values[0];
        float bearing;
        bearing = compassBearing - templeBearing;
        if (bearing < 0)
            bearing = 360 + bearing;
        myCompassView.updateDirection(bearing);
        }
};

Este método por lo general funciona, pero a veces sólo se obtiene el mal del norte, ¿qué tengo que hacer para obtener una localización más precisa?

InformationsquelleAutor eladrich | 2011-10-24

1 Comentario

  1. 37

    Tengo un par de sugerencias para usted:

    1) Su dispositivo no puede ser calibrado. Para hacerlo, mueva alrededor en forma de 8 (ver este). Si no si su dispositivo está calibrado o no hacer algunas pruebas apuntando el dispositivo en algún conocido punto cardinal dirección y comparar los valores. Normalmente, si un dispositivo no está calibrado, verá grandes variaciones en el azimut de valor para pequeñas rotaciones. Eso es lo que yo estaría preocupado.

    Ahora, no olvides que el sensor le da el rumbo hacia el Norte Magnético, y no el Norte Verdadero! Esta diferencia se conoce como declinación del campo magnético y su valor cambia en función del lugar y de tiempo en tiempo, debido a los cambios en el campo magnético de la Tierra. Esta aplicación puede calcular algunos de los valores con relativa precisión. Yo no estaría demasiado preocupado acerca de esto como la declinación es normalmente pequeño, pero usted podría estar buscando una buena precisión (donde yo vivo la declinación 3º, en la actualidad).

    2) Manténgase alejado de objetos metálicos o cosas que generan un campo magnético fuerte. Por ejemplo, no hacer pruebas, si usted tiene su teléfono cerca de la computadora o físico de los teclados! Este es veneno puro para las pruebas de la brújula-geolocalización. Algunos aplicaciones puede medir la intensidad del campo magnético (si el dispositivo lo soporta). Cuando usted consigue más cercano a metal cosas que usted va a experimentar los valores más altos y fuertes cambios en la dirección. Para la diversión, también hay algunos «los detectores de metal«: esta aplicación reconoce los cambios en el campo magnético y vibra cuando usted está cerca de «objeto de metal» o cosas que magnéticamente interferir con el dispositivo.

    3) Recuerde actualizar el rodamiento al inclinar el dispositivo en modo horizontal. (artículo es una lectura obligada!) Esto es debido a que el acimut de valor se basa en la rotación del eje perpendicular al plano del teléfono. Cuando gire el dispositivo en el paisaje, este valor es cambiado por +/-90º! Esto no se resuelve mediante la desactivación de la aplicación de modo de paisaje! Usted tendrá que determinar mediante programación mediante el análisis de las rotaciones alrededor de los otros dos ejes (pitch y roll). Esto no es trivial, pero hay algunos ejemplos en algún lugar en la red.

    edición: Si usted está interesado en un código, echa un vistazo Mixare, es una fuente abierta de realidad aumentada marco de la GPL3 para Android. Echa un vistazo a su código con respecto a la orientación de la brújula de la geolocalización y el cojinete.

    PS: no tengo ningún tipo de conexión con los creadores de las aplicaciones mencionadas.

    • 1) ¿hay una manera de decirle al usuario que el dispositivo no está calibrado?2) ¿hay una manera de saber cuando hay interferencias magnéticas? 3) he deshabilitado el modo de paisaje, así que no te preocupes por eso, ¿verdad?
    • He actualizado la respuesta. Espero que respondió a algunas de sus preguntas
    • muy bonita respuesta, muchas gracias
    • La declinación magnética es típicamente un valor pequeño, pero puede ser de hasta 180 grados (a lo largo de una línea trazada entre el Norte Magnético y el Polo Norte), así que probablemente no debe ser ignorada.

Dejar respuesta

Please enter your comment!
Please enter your name here