ArcGIS二次开发基础教程(02):地图导航和鹰眼「建议收藏」

ArcGIS二次开发基础教程(02):地图导航和鹰眼「建议收藏」ArcGIS二次开发基础教程(02):地图导航和鹰眼地图导航(主要是调用命令和工具)地图的放缩和漫游if(axMapControl1.CurrentTool==null){ICommandicc;//地图放大 ITooltool=newControlsMapZoomInToolClass();//地图缩小//ITooltool…

大家好,又见面了,我是你们的朋友全栈君。

ArcGIS二次开发基础教程(02):地图导航和鹰眼

地图导航(主要是调用命令和工具)

  1. 地图的放缩和漫游
if(axMapControl1.CurrentTool == null)
{
    ICommand icc;
    //地图放大
	ITool tool = new ControlsMapZoomInToolClass();
    //地图缩小
    //ITool tool = new ControlsMapZoomOutToolClass();
    //地图漫游
    //ITool tool = new ControlsMapPanToolClass();
    icc = tool as ICommand;
    icc.OnCreate(axMapControl1.Object);//钩子函数
    icc.OnClick();
}
  1. 全局地图

    ICommand icc = new ControlsFullExtentCommandClass();
    icc.OnCreate(axMapControl1.Object);
    icc.OnClick();
    

鹰眼

//注意:只有从mxd文件中加载图层鹰眼才会出现  axMapControl1是主地图 axMapControl2为鹰眼图
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
{
    axMapControl2.Map.ClearLayer();
    if(axMapControl1.LayerCount>0)
    {
        //从下往上获取图层添加到鹰眼图中防止覆盖
        for(int i= axMapControl1.LayerCount-1;i>=0;i--)
        {
            ILayer layer = axMapControl1.get_Layer(i);
            IObjectCopy copy = new ObjectCopyClass();
            ILayer myLayer = copy.Copy(layer) as ILayer;
            axMapControl2.AddLayer(layer);
        }
        //设置相同的空间参考
        axMapControl2.SpatialReferencr = axMapControl1.SpatialReference;
        //鹰眼图的全局为主地图的当前视图
        axMapControl2.FullExtent = axMapControl1.Extent;
        //每次主地图图层增减都刷新
        axMapControl2.Refresh();
    }
}
//当主地图变化时,鹰眼图框变化
private void axMapControl2_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
{
    //创建一个矩形元素并转换为元素
    IElement ele = new RectangleElementClass() as IElement;
    //获取主地图的视图
    IEenvlop env = axMapControl1.Extent;
    ele.Geometry = env as IGeometry;
    //外轮廓线
    ISimpleLineSymbol lineSymbol = new SimpleLineSymbolClass();
    IRGBColor color1 = new RGBColorClass();
    color1.Red = 255;
    color1.Green = 0;
    color1.Blue = 0;
    //透明度为255即不透明
    color1.Tranparency = 255;
    lineSymbol.Color= color1;
    lineSymbol.Width = 2;
    ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass();
    IRGBColor color2 = new RGBColorClass();
    color2.Red = 255;
    color2.Green = 0;
    color2.Blue = 0;
    //透明度为0即完全透明 
    color2.Tranparency = 0;
    fillSymbol.Color = color2;
    fillSymbol.Outline = lineSymbol;
    //实现线框的生成
    IFillShapeElement fillShapeElement = ele as IFillShapeElement;
    fillShapeElement.Symbol = fillSymbol;
    //图形容器
    IGraphicsContainer graphicsContainer = axMapControl2.Map as IGraphicsContainer;
    //删掉以前的元素
    graphicsContainer.DeleteAllElements();
    //添加新元素
    graphicsContainer.AddElement(fillShapeElement as IElement);
    axMapControl2.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
}
//鹰眼图的鼠标点击事件
 private void axMapControl2_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
 {
     if(e.Button == 1)
     {
         //将主地图视图中心移到点击处
         IPoint point = new PointClass();
         point.PutCoords(e.mapX,e.mapY);
         axMapControl1.CenterAt(point);
         axMapControl1.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
     }
     else
     {
         //将主地图视图变为从鹰眼图获取的轨迹矩形
         IEnvelop env = axMapControl2.TrackRectangle;
         axMapCOntrol1.Extent = env;
         axMapControl1.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
	 }
 }
//鹰眼图的鼠标移动事件
 private void axMapControl2_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e)
 {
     if(e.Button == 1)
     {
     	IPoint point = new PointClass();
     	point.PutCoords(e.mapX,e.mapY);
     	axMapControl1.CenterAt(point);
    	axMapControl1.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
     }
 }

鹰眼效果:

在这里插入图片描述
历届GIS应用技能大赛开发题答案点这里,尚在不定期更新中

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163452.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java实现邮件发送_显示对方是qq邮箱发短信

    java实现邮件发送_显示对方是qq邮箱发短信java实现手机短信和邮箱推送

    2022年10月13日
    3
  • 学PHP应注意的问题与知识点「建议收藏」

    学PHP应注意的问题与知识点

    2022年2月8日
    40
  • vue/uniapp 如何让页面的 onLoad 在 onLaunch 之后执行[通俗易懂]

    app.vue里的onLaunch中如果有异步方法(比如:登录),返回结果可能会在页面的onLoad之后,但onLoad中的方法需要登录回调的结果。为了让页面的onLoad在onLaunch之后执行,解决方案:1.main.js添加代码Vue.prototype.$onLaunched=newPromise(resolve=>{Vue.prototype.$isResolve=resolve;})2.在App.vue的onLau

    2022年4月14日
    58
  • stun client java实现_STUN Client

    stun client java实现_STUN ClientIsyouremailaddressOK?Youaresignedupforournewslettersbutyouremailaddressiseitherunconfirmed,orhasnotbeenreconfirmedinalongtime.Pleaseclickheretohaveaconfirmationemail…

    2022年7月17日
    15
  • 女生适合学习Java吗?

    女生适合学习Java吗?在这个信息爆炸的时代,互联网行业成为了高薪的代名词,Java技术因其具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,作为最流行的语言,学习的人也是越来越多。在很多人看来,学习java似乎是男生的专利,难道真的只有男生才能学好Java成为优秀的java工程师吗?“女生适合学Java吗?”“女程序员就业前景好不好?”“女生学Jav

    2022年7月8日
    94
  • Tomcat如何打破双亲委派机制实现隔离Web应用的?

    Tomcat通过自定义类加载器WebAppClassLoader打破双亲委托,即重写了JVM的类加载器ClassLoader的findClass方法和loadClass方法,这样做的目的是优先加载Web应用目录下的类。除此之外,你觉得Tomcat的类加载器还需要完成哪些需求呢?或者说在设计上还需要考虑哪些方面?我们知道,Tomcat作为Servlet容器,它负责加载我们的Servlet类,此外它还负责加载Servlet所依赖的JAR包。并且Tomcat本身也是一个Java程序,因此它需要加载自己的类和依赖

    2022年4月7日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号