tipos saber obtener mis mapa longitud lector latitud google geográficas geograficas coordenadas con como calcular buscar gps sms decode

saber - decodificar SMS informando las posiciones GPS de los Leones en Kenia



obtener coordenadas google maps android (7)

El Proyecto León Mara-Naboisho ha pedido nuestra ayuda para decodificar y trazar las posiciones de los leones equipados con collares GPS.

Reciben SMS de los collares:

Collar07854_100806210058.SMS 074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0806100028008c13ef348a0039d0fe000de871004cc92b5ca92d6213ef26640039d108000de86b004cc92d5ca92d5d13ef18620039d101000de865004cc92c5ca92d5813ef0a930039d0fc000de864004cc9311c682d5413eefc170039d045000de7d4004cc95b7c692c5013eeee280039d0ff000de85f004cc92a7c692d6fffffffffffffffffffffffffffffffffffffffffff Collar07854_100807060011.SMS 074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a0807020038008c13efb2eb0039d0ed000de853004cc92e3cea2d8813efa5060039d0fb000de860004cc9291c6a2d8413ef96fd0039d0fc000de85e004cc92d5c6a2d7f13ef88e00039d0f6000de85a004cc92b5c6a2d7b13ef7ad80039d0fa000de85a004cc9327c6a2d77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Estas son presumiblemente SMS PDU, aunque los simples decodificadores en línea no parecen tener mucho sentido de ellos. Está el texto ASCII "IRIDIUM" en ellos, presumiblemente el SMSC o remitente o algo de cadena, ya que IRIDIUM es un sistema de teléfono satelital y presumiblemente el portador cuando los collares envían sus posiciones.

ACTUALIZACIÓN : Tienen algunos archivos KML que corresponden a estos collares; He subido el archivo KML aquí y aquí . Los collares son probablemente fabricados por Vectronic-Aerospace.

¿Qué formato es, y cómo lo decodificamos?

(Este es un proyecto de código de donación , ¿quizás quiere ayudarlos o ver otros problemas allí?)


Esto parece una buena referencia:

http://www.dreamfabric.com/sms/

El truco podría ser decodificar el mensaje al final.

Logré extraer el IRIDIUM pero no fui más allá.

Un script de Perl rápido para eso:

my $text="....."; my $str; while( $text ) { $str .= chr( hex(substr $text, 0, 2) ); if( length($text) > 2 ) { $text8 = substr($text, 2); } else { $text8 = ''''; } } print $str;


Expansión en la observación de Roy:

tal vez el ''13'' no es parte de los encabezados? Entonces los encabezados serían:

SMS 1: 10a0806100028008c SMS 2: 10a0807020038008c

Y luego los mensajes serían:

Message #1 13ef 348a 0039 d0fe 000d e871 004c c92b 5ca9 2d62 13ef 2664 0039 d108 000d e86b 004c c92d 5ca9 2d5d 13ef 1862 0039 d101 000d e865 004c c92c 5ca9 2d58 13ef 0a93 0039 d0fc 000d e864 004c c931 1c68 2d54 13ee fc17 0039 d045 000d e7d4 004c c95b 7c69 2c50 13ee ee28 0039 d0ff 000d e85f 004c c92a 7c69 2d6f ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ff Message #2 13ef b2eb 0039 d0ed 000d e853 004c c92e 3cea 2d88 13ef a506 0039 d0fb 000d e860 004c c929 1c6a 2d84 13ef 96fd 0039 d0fc 000d e85e 004c c92d 5c6a 2d7f 13ef 88e0 0039 d0f6 000d e85a 004c c92b 5c6a 2d7b 13ef 7ad8 0039 d0fa 000d e85a 004c c932 7c6a 2d77 ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ff

Parece un registro, con el mensaje de 06 de agosto (adivinar) tiene 6 entradas y el segundo de 07 de agosto con 7. ¿Qué registraría un collar? Estoy adivinando longitud, latitud y marca de tiempo?

Es probable que los primeros ocho dígitos representen la marca de tiempo. Son incrementales de abajo hacia arriba.

P.ej. 13ef348a = 334443658. 334443658 segundos = 10 años, 8 meses, 6 días, 23:00:58 (desde 1970). Esto coincide con la fecha en el título del primer sms: Collar07854_ 100806 210058 . Incluso coincide con la marca de tiempo menos 2 horas en el título.

Una pregunta para el afiche: ¿con qué frecuencia se reciben estos textos por día? ¿De qué año son (supongo 2010)?


No parece ser una PDU normal. También es información de 8 bits, no de 7 bits (como la mayoría de las PDU).

También parece haber patrones, si quitas el primer encabezado que tienen en común:

074952494449554d0000000000000000000000000000000000000000000000040f33303030333430313232393738393000000000000000000000000000000000f10a

A continuación, parece haber otro encabezado de 16 bytes / marca de tiempo / id:

SMS 1: 0806100028008c13 SMS 2: 0807020038008c13

Y formatee un poco, el patrón se vuelve más claro:

Message #1: ef348a0039d0fe000de871004cc92b5ca92d6213 ef26640039d108000de86b004cc92d5ca92d5d13 ef18620039d101000de865004cc92c5ca92d5813 ef0a930039d0fc000de864004cc9311c682d5413 eefc170039d045000de7d4004cc95b7c692c5013 eeee280039d0ff000de85f004cc92a7c692d6fff ffffffffffffffffffffffffffffffffffffffff Message #2: efb2eb0039d0ed000de853004cc92e3cea2d8813 efa5060039d0fb000de860004cc9291c6a2d8413 ef96fd0039d0fc000de85e004cc92d5c6a2d7f13 ef88e00039d0f6000de85a004cc92b5c6a2d7b13 ef7ad80039d0fa000de85a004cc9327c6a2d77ff ffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffff


¡Pude traducir las posiciones lat / lon! Después de ver el sitio web de los desarrolladores de collar, he visto que están usando coordenadas ECEF de x / y / z.

La primera línea del primer mensaje:

13ef 348a 0039 d0fe 000d e871 004c c92b 5ca9 2d62

Se traduce como:

0039 d0fe = X = 3789054 000d e871 = Y = 911473 004c c92b = Z = 5032235

Esto se traduce en:

Lat: 52.43067054630929 Lon: 13.525755535406619 Height: 88.99500464554876

Esto da como resultado una ubicación en Alemania ... que suena mal para una reserva de Kenia, pero de hecho es la calle de la compañía la que hace estos collares: verifique su sitio web

El código para traducir las coordenadas se ha encontrado en línea:

public static double[] xyz2LLH(double x, double y, double z) { double[] llh = new double[3]; double da = 0.0; // datum parameter double df = 0.0; // datum parameter double a = 6378137 - da; double f = 1 / 298.2572235630 - df; double b = (1 - f) * a; double e2 = 2 * f - f * f; double E2 = (a * a - b * b) / (b * b); double p = Math.sqrt(x * x + y * y); llh[0] = Math.atan2(y, x); double theta = Math.atan((z * a) / (p * b)); llh[1] = Math.atan((z + E2 * b * Math.pow(Math.sin(theta), 3)) / (p - e2 * a * Math.pow(Math.cos(theta), 3))); double N = a / Math.sqrt(1 - e2 * Math.sin(llh[1]) * Math.sin(llh[1])); llh[2] = p / Math.cos(llh[1]) - N; llh[0] = Math.toDegrees(llh[0]); llh[1] = Math.toDegrees(llh[1]); return llh; }

Entonces, el único código que queda para descifrar es el último bit: 5ca9 2d62 .

Otra pista del sitio web sugiere que estos bytes contienen la tensión y la temperatura principales de respaldo / voltaje.


Entonces, después de la mejora por dstibbe, conocemos el formato y probablemente una marca de fecha / hora:

Message #1 334443658 seconds, 0039 d0fe 000d e871 004c c92b 5ca9 2d62 334440036 seconds, 0039 d108 000d e86b 004c c92d 5ca9 2d5d 334436450 seconds, 0039 d101 000d e865 004c c92c 5ca9 2d58 334432915 seconds, 0039 d0fc 000d e864 004c c931 1c68 2d54 334429207 seconds, 0039 d045 000d e7d4 004c c95b 7c69 2c50 334425640 seconds, 0039 d0ff 000d e85f 004c c92a 7c69 2d6f Message #2 334476011 seconds, 0039 d0ed 000d e853 004c c92e 3cea 2d88 334472454 seconds, 0039 d0fb 000d e860 004c c929 1c6a 2d84 334468861 seconds, 0039 d0fc 000d e85e 004c c92d 5c6a 2d7f 334465248 seconds, 0039 d0f6 000d e85a 004c c92b 5c6a 2d7b 334461656 seconds, 0039 d0fa 000d e85a 004c c932 7c6a 2d77

He centrado mi búsqueda en tratar de convertir los siguientes pares de 8 bytes en coordenadas. Tomemos la primera línea: 334443658 segundos, 0039 d0fe 000d e871 004c c92b 5ca9 2d62

Probablemente quedan cuatro partes distintas:

  1. 0039 d0fe
  2. 000d e871
  3. 004c c92b
  4. 5ca9 2d62

Mi primera suposición fue que la parte 1 sería latitud y parte 2 longitud. Y lo más probable es que los números sean enteros, no coma flotante. Los números de punto flotantes tienen una parte exponente (11 bits) que casi siempre son distintos de cero. Estos números no parecen tener esa parte, comenzando con 000.

Traducir todo en enteros probablemente resulte en:

  1. 3789054
  2. 911473
  3. 5032235
  4. 1554591074

Al ver esto, creo que la parte # 1 es la longitud y la parte # 2 es la latitud. Esto es bastante habitual, solo mira Google Earth, que también espera lon-lat en lugar de lat-lon.

Ahora, hay muchas maneras de convertir un entero a latitud / lon, mi candidato más probable sería:

lon = part_1 / 6371000 / PI * 180

lat = atan (exp (part_2 / 6371000)) / PI * 360 - 90

Esto da como resultado coordenadas en un Parque Nacional Etíope ''Gambela'' ...? ¿Podría ser que los collares hayan estado grabando en Etiopía antes de enviarlos a Kenia? Necesitamos más información para traducir las coordenadas, me temo ...

Lat: 8.169253103106428

Lon: 34.075781281927895

Coordenadas en Google Maps


¿Por qué no le preguntas a la gente de la compañía alemana? Llámalos o envíales un correo electrónico. Estoy bastante seguro de que te proporcionarán la respuesta.

Además, de acuerdo con la hoja de producto en el sitio web, los collares se pueden configurar para grabar en diferentes modos. Tienes que averiguar por el proyecto del león cómo se han programado los collares.


Quiero contribuir un poco a la respuesta de dstibbe, pero aún no puedo comentar.

El último byte del ''encabezado'' (8c) es la longitud del mensaje (140) cuando comienza a contar en 0.