You can use a type converter (no error checking):
Ship ship = new Ship();
string value = "5.5";
var property = ship.GetType().GetProperty("Latitude");
var convertedValue = property.Converter.ConvertFrom(value);
property.SetValue(self, convertedValue);
In terms of organizing the code, you could create a kind-of mixin that would result in code like this:
Ship ship = new Ship();
ship.SetPropertyAsString("Latitude", "5.5");
This would be achieved with this code:
public interface MPropertyAsStringSettable { }
public static class PropertyAsStringSettable {
  public static void SetPropertyAsString(
    this MPropertyAsStringSettable self, string propertyName, string value) {
    var property = TypeDescriptor.GetProperties(self)[propertyName];
    var convertedValue = property.Converter.ConvertFrom(value);
    property.SetValue(self, convertedValue);
  }
}
public class Ship : MPropertyAsStringSettable {
  public double Latitude { get; set; }
  // ...
}
MPropertyAsStringSettable can be reused for many different classes.
You can also create your own custom type converters to attach to your properties or classes:
public class Ship : MPropertyAsStringSettable {
  public Latitude Latitude { get; set; }
  // ...
}
[TypeConverter(typeof(LatitudeConverter))]
public class Latitude { ... }