【问题标题】:How to convert longitude and latitude string to double?如何将经度和纬度字符串转换为双精度?
【发布时间】:2012-02-09 22:03:50
【问题描述】:

我从 google 获取经度和纬度:

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,没有点。

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

【问题讨论】:

标签: c# winforms google-maps


【解决方案1】:

这可能是由于您的文化 - 在这种情况下,您似乎想要不变的文化:

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

(您可能很想使用double.TryParse 来优雅地处理它不是有效值的可能性。)

【讨论】:

  • 是的,使用 TryParse,但将双精度值初始化为无效的纬度/经度值,这样您就知道它是否失败。
  • @twilson:TryParse 的全部意义在于 return 值告诉您它是否失败。您用于 out 参数的任何值的先前值都无关紧要 - 无论如何它都会被覆盖。
  • 哎呀,我的错,由于某种原因暂时逃脱了我:P哦,精神错乱。
  • @JonSkeet 谢谢,就是这样:)
【解决方案2】:

只需使用 Double.Parse() 并传递包含纬度/经度坐标的字符串

【讨论】:

  • Convert.ToDouble 已经使用了double.Parse - 但它将使用默认区域性,如果它有小数点分隔符“,”和千位分隔符“。”则无法使用。这就是我怀疑正在发生的事情......
  • 谢谢乔恩!我没有意识到荷兰的小数分隔符与我们在北美的不同。再次感谢您的提醒!
猜你喜欢
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多