2012-02-09 243 views
1

我得到我的经度和lattitude从谷歌:如何将经度和纬度字符串转换为双精度?

http://maps.google.com/maps/geo?q=Sliedrecht,%20Netherlands&output=csv&oe=utf8&sensor=false

我想一个标记添加到使用我的地图这个结果:

 if (coordinates.Length == 4 && coordinates[0] == "200") 
     { 
      var overlay = new GMapOverlay(mapexplr, "overlayTwo"); 

      overlay.Markers.Add(new GMapMarkerGoogleGreen(new PointLatLng(Convert.ToDouble(coordinates[2]), Convert.ToDouble(coordinates[3])))); 
      mapexplr.Overlays.Add(overlay); 
     } 

的问题是,我的标记不是显示。我认为这是因为双打没有以正确的格式提供。上面的链接的结果是这样的:

200,4,51.8248681,4.7731624

当我4.7731624值转换为双我得到47731624,没有点。

所以我的问题是,如何将字符串转换为正确位置的双精度型的字符串?

+0

您使用的[弃用API](字符串http://code.google.com/apis/maps /documentation/geocoding/v2/index.html) - 所以你可能不能指望它也能工作 长。您应该使用[当前版本的地理编码器](http://code.google.com/apis/maps/documentation/geocoding/)。 – djd 2012-02-10 02:13:23

回答

16

它就有可能是由于你的文化 - 这听起来像在这种情况下,你要不变文化:

double longitude = double.Parse(text, CultureInfo.InvariantCulture); 

(您可能需要使用double.TryParse优雅地处理它不是一个有效的可能性值。)

+0

是的,请使用TryParse,但将double初始化为无效的纬度/经度值,以便知道它是否失败。 – twilson 2012-02-09 22:09:31

+1

@twilson:'TryParse'的重点在于* return *值告诉你它是否失败。无论您用于“out”参数的以前的值是不相关的 - 它都会被覆盖。 – 2012-02-09 22:10:37

+0

哎呀,我的坏,由于某种原因,暂时逃脱我:P哦疯了。 – twilson 2012-02-09 22:13:08

0

只是使用Double.Parse()和传递包含纬度/经度坐标

+1

'Convert.ToDouble'已经使用'double.Parse' - 但它会使用默认的文化,如果它有一个小数点分隔符“,”和数千分隔符“。”这是我怀疑正在发生的事情...... – 2012-02-09 22:16:47

+0

谢谢乔恩!我没有意识到荷兰的小数分隔符与北美的不同。再次感谢您的领导! – dmarges 2012-02-09 22:24:41