⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 基于ehotgis开发的嵌入式gis最短路径应用源码
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Hotgis.eHotGIS;
using System.Runtime.InteropServices;

namespace TopoTest
{
    public partial class Form1 : Form
    {
        int p1 = -1;
        int p2 = -1;
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            eMap1.Open(@"\program files\topotest\map\topo.map");
            eMap1.ViewEntire();
            eMap1.ReDraw();
            eMap1.Invalidate();

            

            eLayer lyr = eMap1.GetLayerAt(0);
            eStyle highlightStyle = new eStyle();
            highlightStyle = lyr.HighlightStyle;
            highlightStyle.bmpIndex = 5;
            highlightStyle.bmpOffsetX = 8;
            highlightStyle.bmpOffsetY = 8;
            lyr.HighlightStyle = highlightStyle;

            lyr = eMap1.GetLayerAt(1);
            highlightStyle = lyr.HighlightStyle;
            highlightStyle.penWidth = 3;
            highlightStyle.penWidth2 = 5;
            highlightStyle.penColor = Utilities.ToWin32(Color.Yellow);
            highlightStyle.penColor2 = Utilities.ToWin32(Color.Red);
            lyr.HighlightStyle = highlightStyle;


        }

        private void eMap1_MouseDown(object sender, MouseEventArgs e)
        {
            if(toolBar1.Buttons[4].Pushed)
            {
                // 起点
                // 拓扑边图层设置成不可选择
                eLayer lyr = eMap1.GetLayerAt(1);
                lyr.IsSelectable = false;
                ePoint2D dp = new ePoint2D();
                dp.x = e.X;
                dp.y = e.Y;

                ePoint2D mp = new ePoint2D();
                eMap1.PixelToGeo(ref dp,ref mp);

                ePoint sp = new ePoint(e.X, e.Y);
                int ret = eMap1.QueryByPoint(ref sp, 8);
                if (eMap1.GetSelection().Count == 1)
                {
                    eResultSet rs = eMap1.GetSelection().GetAt(0);
                    if (rs.IsHasNext)
                    {
                        //设置风格
                        eStyle style = new eStyle();
                        style.bmpIndex = 10;
                        style.bmpOffsetX = 8;
                        style.bmpOffsetY = 8;
                        style.bmpTransColor = Utilities.ToWin32(Color.FromArgb(253, 253, 253));
                        style.isTransBmp = 0;
                        eGeometry geom = new eGeometry(eMap1);
                        geom.PointCount = 1;
                        ePoint2D pt = new ePoint2D();
                        pt = rs.GetGeometry().GetPointAt(0);
                        geom.SetPointAt(0, pt);
                        p1 = rs.GetInteger(0);

                        eGeoEvent ge = eMap1.GetTrackingLayer().GetByTag("TOPO_S");
                        if (ge == null)
                        {
                            //添加一个点地位到eTrackingLayer层
                            eMap1.GetTrackingLayer().AddEvent(geom, eGeoEvent.GeoType.Point, style, "TOPO_S");
                            eMap1.GetTrackingLayer().GetByTag("TOPO_S").Text = "起点";
                            eMap1.GetTrackingLayer().GetByTag("TOPO_S").ThemeLabel.IsVisible = true;
                            eMap1.GetTrackingLayer().GetByTag("TOPO_S").ThemeLabel.VJust = eThemeLabel.VertJust.VBottom;
                            eMap1.GetTrackingLayer().IsVisible = true;
                        }
                        else
                        {
                            ePoint2D gp = new ePoint2D();
                            eMap1.PixelToGeo(ref dp, ref gp);
                            eMap1.GetTrackingLayer().GetByTag("TOPO_S").MoveTo(pt.x, pt.y);
                        }
                    }
                }
            }
            else if (toolBar1.Buttons[5].Pushed)
            {

                // 拓扑边图层设置成不可选择
                eLayer lyr = eMap1.GetLayerAt(1);
                lyr.IsSelectable = false;
                ePoint2D dp = new ePoint2D();
                dp.x = e.X;
                dp.y = e.Y;

                ePoint2D mp = new ePoint2D();
                eMap1.PixelToGeo(ref dp, ref mp);

                ePoint sp = new ePoint(e.X, e.Y);
                int ret = eMap1.QueryByPoint(ref sp, 8);
                if (eMap1.GetSelection().Count == 1)
                {
                    eResultSet rs = eMap1.GetSelection().GetAt(0);
                    if (rs.IsHasNext)
                    {
                        //设置风格
                        eStyle style = new eStyle();
                        style.bmpIndex = 12;
                        style.bmpOffsetX = 8;
                        style.bmpOffsetY = 8;
                        style.bmpTransColor = Utilities.ToWin32(Color.FromArgb(253, 253, 253));
                        style.isTransBmp = 0;
                        eGeometry geom = new eGeometry(eMap1);
                        geom.PointCount = 1;
                        ePoint2D pt = new ePoint2D();
                        pt = rs.GetGeometry().GetPointAt(0);
                        geom.SetPointAt(0, pt);
                        p2 = rs.GetInteger(0);

                        eGeoEvent ge = eMap1.GetTrackingLayer().GetByTag("TOPO_E");
                        if (ge == null)
                        {
                            //添加一个点地位到eTrackingLayer层
                            eMap1.GetTrackingLayer().AddEvent(geom, eGeoEvent.GeoType.Point, style, "TOPO_E");
                            eMap1.GetTrackingLayer().GetByTag("TOPO_E").Text = "终点";
                            eMap1.GetTrackingLayer().GetByTag("TOPO_E").ThemeLabel.IsVisible = true;
                            eMap1.GetTrackingLayer().GetByTag("TOPO_E").ThemeLabel.VJust = eThemeLabel.VertJust.VBottom;
                            eMap1.GetTrackingLayer().IsVisible = true;
                        }
                        else
                        {
                            ePoint2D gp = new ePoint2D();
                            eMap1.PixelToGeo(ref dp, ref gp);
                            eMap1.GetTrackingLayer().GetByTag("TOPO_E").MoveTo(pt.x, pt.y);

                        }

                    }
                }
            }
            eMap1.Invalidate();

        }

        private void menuItem1_Click(object sender, EventArgs e)
        {
            
        }

        private void menuItem4_Click(object sender, EventArgs e)
        {
            eMap1.SetTool(eMap.ToolType.ZoomIn);
        }

        private void menuItem5_Click(object sender, EventArgs e)
        {
            eMap1.SetTool(eMap.ToolType.ZoomOut);
        }

        private void menuItem6_Click(object sender, EventArgs e)
        {
            eMap1.SetTool(eMap.ToolType.Pan);
        }

        private void menuItem7_Click(object sender, EventArgs e)
        {
            eMap1.SetTool(eMap.ToolType.PointSel);
        }

        private void eMap1_OnGeometrySelected(int count)
        {
            eMap1.Invalidate();
        }

        private void menuItem8_Click(object sender, EventArgs e)
        {
            eMap1.SetTool(eMap.ToolType.None);
        }

        private void menuItem2_Click(object sender, EventArgs e)
        {
        }

        private void menuItem9_Click(object sender, EventArgs e)
        {
            eMap1.GetSelection().Clear();
            eTopologyManager topoMan = new eTopologyManager();
            bool b = topoMan.Open(@"\program files\topotest\topoedge.bin");
            if(b)
            {
                double d = 0;
                string ret = topoMan.MinPathAnalyse(p1, p2,ref d);
                MessageBox.Show(d.ToString());
                string[] ids = ret.Split('|');
                
                eRect rt = new eRect();
                rt.left = 0; rt.top = 0; rt.right = 0; rt.bottom = 0;
                eResultSet rs = eMap1.GetLayerAt(1).QueryWithBounds(rt);
                
                rs.Clear();
                for (int i = 0; i < ids.Length - 1; i++)
                {
                    rs.Add(Int32.Parse(ids[i])-1);
                }

                eMap1.GetSelection().Add(rs);
                eMap1.Invalidate();
            }
        }

        private void toolBar1_ButtonClick(object sender, ToolBarButtonClickEventArgs e)
        {
            switch (e.Button.ImageIndex)
            {
            	case 0:
                    eMap1.SetTool(eMap.ToolType.ZoomIn);
                    RefreshToolBar(0);
            		break;
            	case 1:
                    eMap1.SetTool(eMap.ToolType.ZoomOut);
                    RefreshToolBar(1);
            		break;
            	case 2:
                    eMap1.SetTool(eMap.ToolType.Pan);
                    RefreshToolBar(2);
            		break;
            	case 3:
                    eMap1.SetTool(eMap.ToolType.PointSel);
                    RefreshToolBar(3);
            		break;
                case 4:
                    eMap1.SetTool(eMap.ToolType.None);
                    RefreshToolBar(4);
                    break;
                case 5:
                    eMap1.SetTool(eMap.ToolType.None);
                    RefreshToolBar(5);
                    break;
            	case 6:
                    menuItem9_Click(null, null);
            		break;
            }

            
        }
        private void RefreshToolBar(int index)
        {
            for(int i=0;i<6;i++)
            {
                toolBar1.Buttons[i].Pushed = false;
            }
            toolBar1.Buttons[index].Pushed = true;
        }

        private void menuItem10_Click(object sender, EventArgs e)
        {
            eMap1.ViewEntire();
            eMap1.ReDraw();
            eMap1.Invalidate();
        }

        private void menuItem12_Click(object sender, EventArgs e)
        {
            //测试根据经纬度坐标查询
            eLayer lyr = eMap1.GetLayerAt(0);
            ePoint2D pt = new ePoint2D(116.46607, 39.99292);
            eResultSet rs = lyr.QueryByPoint(pt, 0.0026);
            eMap1.GetSelection().Add(rs);

        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -