Linuchs: Geo-Umrechnung Bogen- in Dezimalgrade

Beitrag lesen

Moin,

schon lange rechne ich mit dezimalen Koordinaten, die ich bisher auch dezimal eingegeben und gespeichert habe.

Bei Wikipedia werden Orte aber in Bogengraden angegeben, dummer weise muss eine Fremdseite zur Umrechnung aufgerufen werden.

Nun kommen Benutzerangaben auf mich zu in unüberschaubarer Vielfalt und ich bemühe mich, die umzurechnen in Dezimalwerte.

Kapstadt auf der deutschen Wikipedia-Seite: 33° 55′ S, 18° 25′ O auf der englischsprachigen: 33°55′31″S 18°25′26″E von einem Dortmunder per Mail: 51° 29' 56.0796'' N und 7° 19' 53.328'' E

Wer hat schon Minuten- und Sekundenzeichen auf der Tastatur?

Mein erster Versuch der Umrechnung:

/* ************************
 * geogr. Angabe umrechnen
 * ************************ */
// 51° 29' 56.0796'' N und 7° 19' 53.328'' E
// 33° 55′ 21.6″ S, 18° 25′ 0.08″ E Kapstadt
$lat_lon_in = $_POST['lat_lon'];
$lat_lon    = $_POST['lat_lon'];
if ( $_POST['lat_lon'] > " " ) {
  if ( strpos( $lat_lon_in, ',' ) === FALSE ) {
    $_fgeo_komma  = TRUE;
    $_f00 =( $_f00 || $_fgeo_komma );
  } else {
    $lat_lon  = str_replace( ' ', '', $_POST['lat_lon'] );  // 33°55′21.6″S,18°25′0.08″E (Leerzeichen weg)
    // seltsame Zeichen zu Leerstellen
    $lat_lon  = str_replace( [ '°', "''", "'", "′", '″' ], [ ' ', ' ', ' ', ' ', ' ' ], $lat_lon ); // 33 55 21.6 S,18 25 0.08 E

    $arr_lat_lon  = explode( ',', $lat_lon );

    // Umrechnung erorderlich?
    if ( !is_numeric( $arr_lat_lon[1] )) {

      $arr_lat  = explode( ' ', $arr_lat_lon[0] );                                                  // [ 33, 55, 21.6, "S" ]
      $lat      = round( $arr_lat[0] + $arr_lat[1]/60 + $arr_lat[2]/3600, 6 );
      if ( $arr_lat[count($arr_lat)-1] == 'S' ) $lat = $lat  * (-1.0);

      $arr_lon  = explode( ' ', $arr_lat_lon[1] );                                                  // [ 18, 25, 0.08, "E" ]
      $lon      = round( $arr_lon[0] + $arr_lon[1]/60 + $arr_lon[2]/3600, 6 );
      if ( $arr_lon[count($arr_lon)-1] == 'W' ) $lon = $lon  * (-1.0);

      $lat_lon    = $lat . "," . $lon;
      $_hgeo_umrechnung = TRUE;
      $_h00             =( $_h00 || $_hgeo_umrechnung );
    } else {
      // lat_lon ist fertig
    }
  }
}

wobei $_fxxx Fehlermeldungen und $_hxxx Hinweise sind, die später ausgegeben werden.

Sieht irgendwie kompliziert aus, geht das auch einfacher? Meine Recherche hat nix ergeben, deshalb der Selbstversuch.

fragt Linuchs