C#二次开发(三)之基于Dotspatial的点提取以及坐标获取

在获取点坐标以及选取点时,主要利用了地图的MouseUp函数,在鼠标抬起的时候判断被选取的数据:

 private void map1_MouseUp(object sender, MouseEventArgs e)
        {
            if(tool==1)
            {
                int selectnum = 0;
                for (int i = 0; i < map1.GetPointLayers().Count(); i++)
                {
                    psignal = (PointLayer)map1.GetPointLayers()[i];
                    selectnum += psignal.Selection.ToFeatureList().Count;
                    if (selectnum > 1)
                        if (Math.Abs(psignal.Selection.ToFeatureList()[0].Geometry.InteriorPoint.X - psignal.Selection.ToFeatureList()[1].Geometry.InteriorPoint.X) < 0.000000001 || selectnum == 2)
                    {
                        selectnum = 1;
                    }
                    if (selectnum > 0)
                        break;
                    
                }
                if (selectnum == 1)
                {
                    Getpindex();

                    comboBox1.Text = comboBox1.Items[indexp].ToString();
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                    tool = 3;
                }
                else
                {
                    MessageBox.Show("未选中信号点!请重新选择", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tool = 120;
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                }
            }
            if (tool == 2)
            {
                int selectnum = 0;
                for (int i = 0; i < map1.GetPointLayers().Count(); i++)
                {
                    psignal = (PointLayer)map1.GetPointLayers()[i];
                    selectnum += psignal.Selection.ToFeatureList().Count;
                    if(selectnum>1)
                    if(Math.Abs(psignal.Selection.ToFeatureList()[0].Geometry.InteriorPoint.X- psignal.Selection.ToFeatureList()[1].Geometry.InteriorPoint.X)<0.000000001|| selectnum==2)
                    {
                        selectnum = 1;
                    }
                    if (selectnum > 0)
                        break;
                }
                if (selectnum == 1)
                {
                    Getpindex();

                    comboBox2.Text = comboBox2.Items[indexp].ToString();
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                    tool = 3;
                }
                else
                {
                    MessageBox.Show("未选中信号点!请重新选择", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tool = 120;
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                }
            }
            if(tool==10)
            {
                int selectnum = 0;
                for (int i = 0; i < map1.GetPointLayers().Count(); i++)
                {
                    psignal = (PointLayer)map1.GetPointLayers()[i];
                    selectnum += psignal.Selection.ToFeatureList().Count;
                    if (selectnum > 1)
                        if (Math.Abs(psignal.Selection.ToFeatureList()[0].Geometry.InteriorPoint.X - psignal.Selection.ToFeatureList()[1].Geometry.InteriorPoint.X) < 0.000000001 || selectnum == 2)
                            {
                                selectnum = 1;
                            }
                    if (selectnum > 0)
                        break;

                }
                if (selectnum == 1)
                {
                    Getpindex();

                    comboBox3.Text = comboBox3.Items[indexp].ToString();
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                    tool = 3;
                }
                else
                {
                    MessageBox.Show("未选中信号点!请重新选择", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tool = 120;
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                }
                }
            if(tool==11)
            {
                int selectnum = 0;
                LineLayer psignall = (LineLayer)map1.GetLineLayers()[0];
                for (int i = 0; i < map1.GetLineLayers().Count(); i++)
                {
                    psignall = (LineLayer)map1.GetLineLayers()[i];
                    selectnum += psignall.Selection.ToFeatureList().Count;
                    if (selectnum > 0)
                        break;
                }
                if (selectnum == 1)
                {
                    string[] linlength = psignall.Selection.ToFeatureList()[0].DataRow["length"].ToString().Split('.');
                    label17.Text = linlength[0];
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                    tool = 3;
                }
                else
                {
                    MessageBox.Show("未选中路线!请重新选择", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    tool = 120;
                    map1.FunctionMode = DotSpatial.Controls.FunctionMode.Pan;//平移
                }
            }
        }

而在获取坐标时,由于涉及坐标系转换,因此需要关注坐标的处理。

FeatureSet tt = new FeatureSet(fpointlist.Features);
            tt.Projection = map1.Projection;
            tt.Reproject(DotSpatial.Projections.ProjectionInfo.FromEpsgCode(4326));

            int jj = 0;
            int ii = 0;
            string[] l13t = tt.Features[indexs].Geometry.Coordinate.X.ToString().Substring(0, 12).Split('.');
            string[] l14t = tt.Features[indexs].Geometry.Coordinate.Y.ToString().Substring(0, 12).Split('.');
            string jc = l13t[1][6].ToString();
            string ic = l14t[1][6].ToString();
            if (int.Parse(l13t[1][7].ToString()) > 4)
            {
                jj = 1;
                jc = (int.Parse(l13t[1][6].ToString()) + 1).ToString();
            }
            if (int.Parse(l14t[1][7].ToString()) > 4)
            {
                ii = 1;
                ic = (int.Parse(l14t[1][6].ToString()) + 1).ToString();
            }

其中,后面两步是为了坐标最后一位四舍五入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值