zoukankan      html  css  js  c++  java
  • ArcGIS Mobile 自定义图层在绘制面时节点未绘制完全的问题

      ArcGIS Mobile 自定义图层在绘制面时节点未绘制完全,如下图:

      面的绘制代码如下:

    public void Draw(Display dis, Pen p1, Pen p2,Pen p3 ,SolidBrush b1,Map map)
    {
        Envelope env = map.GetExtent();
        if (_mapPoints.Count >= 2)
        {
            for (int i = 0; i < _mapPoints.Count - 1; i++)
            {
                if (env.Contains(_mapPoints[i].Coor))
                    _mapPoints[i].Draw(dis, p1, b1,map);
                if (env.Contains(_mapPoints[i].Coor) || env.Contains(_mapPoints[i + 1].Coor))
                    dis.DrawLine(p2, _mapPoints[i].Coor, _mapPoints[i + 1].Coor);
            }
            if (env.Contains(_mapPoints[_mapPoints.Count - 1].Coor))
                _mapPoints[_mapPoints.Count - 1].Draw(dis, p1, b1,map);
            if (env.Contains(_mapPoints[_mapPoints.Count - 1].Coor) || env.Contains(_mapPoints[0].Coor))
                dis.DrawLine(p3, _mapPoints[0].Coor, _mapPoints[_mapPoints.Count - 1].Coor);
        }
        else if (_mapPoints.Count == 1)
        {
            _mapPoints[0].Draw(dis, p1, b1,map);
        }
        else if (_mapPoints.Count <= 0)
        {
            return;
        }
    }

      其中,节点的绘制代码如下:

    public void Draw(Display dis, Pen pen, SolidBrush brush,Map map)
    {
        System.Drawing.Point p = map.ToClient(_coor);
        System.Drawing.Point pbl = new System.Drawing.Point(p.X - 3 * 2 / CGbParas.per, p.Y + 3 * 2 / CGbParas.per);
        System.Drawing.Point prt = new System.Drawing.Point(p.X + 3 * 2 / CGbParas.per, p.Y - 3 * 2 / CGbParas.per);
        dis.DrawEllipse(pen, brush, new Envelope(map.ToMap(pbl), map.ToMap(prt)));
    }

      节点不显示,应该从地图刷新的地方找问题。检查代码发现Map_MouseDown中添加节点时的地图刷新使用的是Map.Invalidate(Envelope)方法,代码如下:

    _polygon.AddMapPoint(_coorMouseDown);
    map1.Invalidate(_polygon.GetExtent(true));

      问题就是出在map1.Invalidate(_polygon.GetExtent(true))。该行代码指定map只刷新面状地物的数据框区域,导致绘制到数据框外面的节点没有显示出来,因此只需要将刷新的数据框扩大一些即可。

    Envelope env = _polygon.GetExtent(true);
    env.XMax = env.XMax * 1.01;
    env.XMin = env.XMin * 0.99;
    env.YMax = env.YMax * 1.01;
    env.YMin = env.YMin * 0.99;
    map1.Invalidate(env);

      上面只是一种方式,也可以使用Envelope.Resize方法调整Envelope。

  • 相关阅读:
    LeetCode: Trapping Rain Water
    LeetCode: Text Justification
    LeetCode: Unique Paths
    LeetCode: Unique Binary Search Trees
    向Google、Yahoo!和百度提交Sitemap网站地图
    Paypal IPN&PDT变量列表
    SQL查询和删除重复字段的内容
    [C#]基于.net技术的 Rss 订阅开发
    验证码识别流程
    c# string.Format 格式化日期
  • 原文地址:https://www.cnblogs.com/hibernation/p/3342885.html
Copyright © 2011-2022 走看看