You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向PointLatLng输入DMM格式带空格经纬度?有无其他输入方式?

解决DMM格式经纬度输入PointLatLng的问题

DMM格式(示例:41 24.2028)是度 分.分小数的结构,直接转double会因空格报错,删空格会把度和分合并成错误数值。必须先把它转换成十进制度,才能传给PointLatLng。

1. 编写DMM转十进制度的方法

这个方法负责拆分度和分,再通过公式度 + 分/60计算出十进制数值:

private double ConvertDmmToDecimal(string dmmString)
{
    // 按空格拆分度和分部分,过滤空字符串
    var parts = dmmString.Trim().Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
    if (parts.Length != 2)
        throw new ArgumentException("输入不是有效的DMM格式");
    
    // 解析度和分的数值
    double degrees = double.Parse(parts[0]);
    double minutes = double.Parse(parts[1]);
    
    // 转换为十进制度
    return degrees + minutes / 60;
}

2. 修改按钮点击事件代码

把原来直接用Convert.ToDouble的部分,替换成调用上面的转换方法:

private void button1_Click(object sender, EventArgs e)
{
    gMapControl1.DragButton = MouseButtons.Left;
    gMapControl1.MapProvider = GMapProviders.GoogleMap;

    // 处理输入格式,转换为十进制度
    double lat, longi;
    try
    {
        lat = ConvertDmmToDecimal(textBox1.Text);
        longi = ConvertDmmToDecimal(textBox2.Text);
    }
    catch (ArgumentException ex)
    {
        MessageBox.Show($"格式错误:{ex.Message}");
        return;
    }
    catch (FormatException)
    {
        MessageBox.Show("请输入有效的数字内容");
        return;
    }

    gMapControl1.Position = new PointLatLng(lat, longi);

    gMapControl1.MinZoom = 5;
    gMapControl1.MaxZoom = 100;
    gMapControl1.Zoom = 15;

    PointLatLng point = new PointLatLng(lat, longi);
    GMapMarker marker = new GMarkerGoogle(point, GMarkerGoogleType.red_small);

    GMapOverlay markers = new GMapOverlay("markers");
    markers.Markers.Add(marker);
    gMapControl1.Overlays.Add(markers);
}

补充说明

  • 如果是南纬(S)或西经(W)的DMM格式,只需要在度的前面加负号(比如-41 24.2028),方法会自动识别负号并计算正确的十进制数值。
  • 加入的try-catch块可以在用户输入格式错误时弹出提示,避免程序崩溃。

内容的提问来源于stack exchange,提问作者crlrcsnch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:05