免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 2046|回复: 2
收起左侧

[求助] MAPGIS二次开发的基本问题

[复制链接]

3

主题

19

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
76
发表于 2011-6-15 16:49 | 显示全部楼层 |阅读模式
20铜板
二次开发中的问题:
我使用mapgis的组件式二次开发,想做一个简单的二次开发,得到一个飞机的最短飞行路线。就是打开一张地图,在地图上选几个点做为起飞点,目标点,障碍物,障碍物有区域限制(当做圆形来处理)然后通过画出各个圆的切线来当做最短飞行线路。但是在开发的过程中有以下几个问题:
1.        不能打开一张完整的地图,只能打开一个简单要素类(只能显示地图的一部分),这样做出来的没有实际效果
2.        画出来的线不能改变宽度和颜色,都是千篇一律的灰色1号线
3.        代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using mc_basObj7Lib;
using mc_basXcls7Lib;
using mapXBase;
using MapXView;
using MxDocTree;

namespace 程序一
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        mcGDBServer svc = new mcGDBServer();
        mcGDataBase gdb = null;
        mcSFeatureCls sfcls = null;
        private void button1_Click(object sender, EventArgs e)
        {
            //1.打开间断要素类
            svc.Connect("MapGisLocal", "", "");
            gdb = svc.get_gdb("Sample");
            if (gdb == null) return;

            sfcls = gdb.get_XClass(meXClsType.meXSFCls) as mcSFeatureCls;
            if (sfcls == null) return;
            sfcls.Open(39, 1);

             //2.显示简单要素类
            XDisplay dsp = axMapXView1.Display;
            if (dsp != null )
            {
                XTransformation trans = axMapXView1.Transformation;
                if (trans != null)
                {
                    //设置显示场景的设备范围
                    trans.DeviceRect.xmin = 0;
                    trans.DeviceRect.ymin = 0;
                    trans.DeviceRect.xmax = axMapXView1.Width;
                    trans.DeviceRect.ymax = axMapXView1.Height;

                    //设置显示数据的范围
                    trans.DispRect =sfcls.Range;
                    dsp.DisplayXCls(sfcls,null);
                    return;
                }
            }   
        }

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

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {        
                 if (sfcls !=null)
                     sfcls.Close();
                 if (gdb != null)
                     gdb.Close();
                 if (svc !=null)
                     svc.DisConnect();
        }

        private void button2_Click(object sender, EventArgs e)
        {

            XDisplay dsp = axMapXView1.Display;
            if (dsp != null)
            {
                //设备坐标
                //dsp.MoveTo(100, 100);
                //注记信息
                mcDot pos = new mcDot();
                pos.x = 100;pos.y = 100;

                //1.绘制字符串
                //注记属性
                mcTextFormat txtinfo = new mcTextFormat();
                txtinfo.height = 15;
                txtinfo.width = 15;
                txtinfo.Chnt =4;

                dsp.StartDraw();
                dsp.SetPen(2, 5);
                dsp.StringOut("导弹防御阵地", pos, txtinfo);
                dsp.FinishDraw();

                //2绘制线段
               // dsp.StartDraw();
                //dsp.MoveTo(0, 0);
               // dsp.LineTo(200, 200);
                //dsp.FinishDraw();

                //3.绘制导弹防御阵地禁飞区

                dsp.StartDraw();
                dsp.MoveTo(100, 100);
                dsp.Circle2(50);
                dsp.FinishDraw();

                //4.绘制雷达禁飞区
                mcDot pol = new mcDot();
                pol.x = 500;pol.y = 300;
                dsp.StartDraw();
                dsp.SetPen(5, 2);
                dsp.StringOut("雷达探测区", pol, txtinfo);
                dsp.FinishDraw();
                dsp.StartDraw();
                dsp.MoveTo(500, 300);
                dsp.Circle2(80);
                dsp.FinishDraw();

                //5.绘制地形禁飞区
                mcDot pod = new mcDot();
                pod.x = 400; pod.y = 200;
                dsp.StartDraw();
                dsp.SetPen(1, 1);
                dsp.StartDraw();
                dsp.StringOut("地形禁飞区", pod, txtinfo);
                dsp.FinishDraw();
                dsp.StartDraw();
                dsp.MoveTo(400, 200);
                dsp.Circle2(40);
                dsp.FinishDraw();
            }
        }

        private void axMapXView1_OnBeginPaint(object sender, AxMapXView._IXViewEvents_OnBeginPaintEvent e)
        {
            e.display.DisplayXCls(sfcls, null);
        }
    }
}
4.做出的效果截图如下: 图6.jpg

5.button1显示的简单要素更新时还显示,复位后就消失了。
6.button2显示的画的圆和注记信息在点击button2时还存在,但是无论是移动简单要素还是放大缩小,更新复位,圆和注记就都消失了,无法同时显示。
7.求教怎么解决以上问题,不胜感激涕零。

4

主题

627

铜板

17

好友

助理工程师

Rank: 5Rank: 5

积分
126
发表于 2011-6-16 08:50 | 显示全部楼层
你好,请问你是做什么工作的啊
回复

使用道具 举报

3

主题

19

铜板

3

好友

技术员

Rank: 3Rank: 3

积分
76
 楼主| 发表于 2011-6-16 10:43 | 显示全部楼层
雨泽 发表于 2011-6-16 08:50
你好,请问你是做什么工作的啊

呃,马上毕业的人了,毕业设计做不出来,快疯了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表