在获取点坐标以及选取点时,主要利用了地图的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();
}
其中,后面两步是为了坐标最后一位四舍五入。