Frage

Ich brauche einige Benutzer übermittelten Zeichenfolge mit Längen- und Breitengrade zu analysieren, unter Rubin.

sollte das Ergebnis in einem Doppel gegeben werden

Beispiel:

08º 04' 49'' 09º 13' 12''

Ergebnis:

8.080278 9.22

Ich habe sowohl Geokit und GeoRuby sieht aber noch keine Lösung gefunden. Jeder Hinweis?

War es hilfreich?

Lösung

"08° 04' 49'' 09° 13' 12''".gsub(/(\d+)° (\d+)' (\d+)''/) do
  $1.to_f + $2.to_f/60 + $3.to_f/3600
end
#=> "8.08027777777778 9.22"

Edit: oder das Ergebnis als ein Array von Schwimmern zu bekommen:

"08° 04' 49'' 09° 13' 12''".scan(/(\d+)° (\d+)' (\d+)''/).map do |d,m,s|
  d.to_f + m.to_f/60 + s.to_f/3600
end
#=> [8.08027777777778, 9.22]

Andere Tipps

Wie wäre es mit einem regulären Ausdruck verwenden? Zum Beispiel:

def latlong(dms_pair)
  match = dms_pair.match(/(\d\d)º (\d\d)' (\d\d)'' (\d\d)º (\d\d)' (\d\d)''/)
  latitude = match[1].to_f + match[2].to_f / 60 + match[3].to_f / 3600
  longitude = match[4].to_f + match[5].to_f / 60 + match[6].to_f / 3600
  {:latitude=>latitude, :longitude=>longitude}
end

Hier ist eine komplexere Version, die mit negativen Koordinaten meistert:

def dms_to_degrees(d, m, s)
  degrees = d
  fractional = m / 60 + s / 3600
  if d > 0
    degrees + fractional
  else
    degrees - fractional
  end
end

def latlong(dms_pair)
  match = dms_pair.match(/(-?\d+)º (\d+)' (\d+)'' (-?\d+)º (\d+)' (\d+)''/)

  latitude = dms_to_degrees(*match[1..3].map {|x| x.to_f})
  longitude = dms_to_degrees(*match[4..6].map {|x| x.to_f})

  {:latitude=>latitude, :longitude=>longitude}
end

Auf der Grundlage der Form Ihrer Frage, erwarten Sie die Lösung negative Koordinaten richtig zu handhaben. Wenn Sie nicht wären, dann würden Sie eine N oder S folgende Breite und eine E oder W folgende Länge erwarten.

Bitte beachten Sie, dass die akzeptierte Lösung nicht korrekte Ergebnisse liefern mit einem negativen koordinieren. Es werden nur die Grade negativ sein, und die Minuten und Sekunden werden positiv sein. In jenen Fällen, in denen die Grade negativ sind, die Minuten und Sekunden von 0 ° die Koordinate näher an 0 ° und nicht weiter weg bewegen.

Will Harris' zweite Lösung ist der bessere Weg zu gehen.

Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top