AE开发20210524之浏览角度、添加书签、书签的管理、添加地理要素、点选对象、拉框显示对象

题型:

1.填空
2.选择
3.注释
4.写代码

浏览角度,添加书签和书签的管理

随时添加感兴趣区,看所添加的书签,感兴趣哪一块区域就可以看哪一个。文本文字就是标签的名称,感兴趣的区域就是取得地图的区域,放在标签的location里面。

保存下来的感兴趣区域,进行查看,则可以用BookList。

鹰眼窗口的制作,主窗口范围进行更新,则会激发extendupdata事件。鹰眼窗口里面也是,鼠标进行mouseDown的时候,判断是左还是右键,获取地图位置

在上面

添加shapefile文件,鹰眼窗口不显示,因为没有激发replace事件,鹰眼窗口在添加图层的函数,mapreplace事件,或者在mapreplace事件,在添加一个图层的时候,就调用这个函数,当然在加入所有层之前,要先清除之前的层。

添加地理要素,

点选对象

拉框显示对象

拉框范围内有空间拓扑关系
点与点,点与线,线和线,面与面
矩形框内的,矩形框外的,与矩形框没有相接关系的

绘制高亮显示的形式是在哪里,是在图层里面绘制的嘛?但是一选择就高亮显示,选择集的选择。

另外一个要素集合,选择集集合,选择的是处于选择上的要素,都放在选择集里面,要放在这个集合里面就可以,颜色可以设定,选择有多种形式,点选,拉框,画多边形

选择集:地图的选择集。画点线面各种要素,地图它有选择集,地图有地图的选择集,要进行区分,选择集里面取消清空,可以取消高亮选中

缩放到所选要素
如何实现呢?
当前所选择所有要素,都显示在窗口内,最大窗口都可以看到

实现栅格计算器
(可以用现成文件,但最好自己写一遍)

在某一个指定层里面,选择图层,当前加载的所有图层,那么怎么把所有名称加入到这里面呢,怎么把图层名称放进来,图层加载会激发load事件,所以要在load事件把所有图层名称取下来,添加到这个地方,添加到列表当中

点击CITY,或者其他层,发生什么变化呢?

当前所选择到的层的所有字段,所有属性都加入到下面的框中。
选择一个层,把这个层所有字段名称都放在下面的框中,有了层,那么对应的数据源就可以找到,也就是feature class是一个数据源,会不会有字段集合呢?

矢量的图层和feature class,除了有空间数据和属性数据,都是用一个字段进行存储,字段进行存在,可以组合,形成一个字段集合,开始循环,依次把这个字段名称加入进来,

要素类的字段集合访问,每一个字段访问到,并把它取过来

获取属性唯一值

类别只有20类,code唯一值附上,前面的这些过程,主要就是用于构建,“cikou”查询,是干什么用的呢?

条件查询和查询条件,查询,code查询,==407的,在我当前的窗体里面code里面等于407的要素,进行查询到,点击确定,写入查询条件。

selet * from A 的形式

构建查询条件,实现属性查询,对featureclass字段和访问进行学习和熟悉

toolaction需要给其赋值

拉框这个动作也是激发这个mouse_Down事件里面做工作,

需要一个结构,进行点选的时候,e.X和e.Y是屏幕坐标的值,e.Map.x是地图里面的。

e.x-5等操作,是构建一个矩形框,若为e.map.x是是地图的地图坐标,是十个像素的。

选择一个线,若是一个点的话,则会发生,不选在那个像素上不准确则无法选择。我们这样构造一个10个像素的矩形,则不用担心这个。

当前视窗,有一个来回转换的对象,进行坐标转换,,这个“4”是转换方向

查transformRect 中的0 1 2 3 4 含义

把屏幕坐标转换为地图坐标,屏幕坐标到地图坐标的来回转换

地理坐标参考。

selectByShape (我们最后目的就是为了这个方法的实现)

进行框选,进行叠加运算,矩形框进行相交和框选的办法

使用矩形框进行要素的选择,选择到的要素放在哪里去了呢,放在地图的选择集当中,放进去后就会进行高亮显示

refresh里面加参数,绘制的阶段,绘制的接口,这里是一个枚举类型,我们绘制它的GeoSelection,(C++开发地图绘制的过程是什么,首先去访问到最底层的图层,如果是矢量层,一条条去访问,把其空间数据取出来,指定的空间范围内进行绘制,再到倒数第二层进行绘制,把所有层绘制完后,一次性显示到地图上)如果要素非常多,MapControl.refresh把所有要素重新绘制和刷新,绘制效率刷新效率会非常慢。

mapControl提供了一个阶段,我只刷新选择集里面的,在选择的位置进行绘制,刷新,其余位置不需要绘制刷新,提高了效率。很多view的阶段,目的是提高刷新效率。

拉框有无可能点了个点,没有拉出框来,在这个位置拉一个10*10的矩形框,转换成一个envelop,调用一个selectByShape,如果是一个多边形,则绘制一个多边形

出一个题目,让大家自己编,会嘛?

尝试性的做一做。

点击窗体,首先激发load函数,激发一个属性,一个Map属性,定义了好多的字段,表示的我们选择的哪一个,字段变量,字段表里面,我们需要主要找一个字段,当前选择的是哪一个层,是哪一个字段

查file对象,file的类,当前选择的层和对应的集合是什么

选择的层名称,选择的字段名称,编辑框的字符串,字段赋值,

窗体字段是什么含义呢

窗体被加载的时候,我们需要做什么事情呢,我们要在窗体上去,把图层名称加上,进行判定,图层名称的Eterms进行清空,如何layers属性,把所有图层,都存放在集合里面,IEnumLayer暴露出的这个接口,可以reset , next,可以依次的进行操作,栅格层我们进行加进来了,栅格层没有什么字段,只加矢量层,看看有无矢量层的这个接口,、、

把图层名称获取,进行添加

在command Box里面选择一个图层的时候,我们出现的情况是什么呢,在listBox选择图层的字段进行选择,在选中不同的图层的时候,进行加载,激发selectedIndexChanged函数,找到这个图层,再找数据源,再找字段集合,再依次循环访问,添加。

获取当前的图片名称,获取图层名称,编辑一个字符串,当前所有层里面做循环,循环到的名称和选择的名称一致,则找到我们需要的层了。

找到后,把下面select* from的名称进行替换,把层进行接口查询,,获得矢量要素层,获得矢量层对应的数据源特征类,获得要素类的字段集合,字段集合由字段对象组成,清除窗口中的listView控件中的显示的字段列表,获得第 i 个字段,获得字段名称,feature中有一个特殊字段存放空间信息,是一个二进制字段,唯一值不好找,所以提前找到这个字段,若字段不是几何字段则将字段名称添加到listView字段列表控件中

shapeFileName进行判断和选择,找到字段和字段名称进行添加
(循环去找)

唯一值是怎么获取呢?
点击按钮即可,获取唯一值是获取哪一个字段的唯一值呢,这个过程我们也要有,进行字段的选择,取得字段名称是什么呢,

所有唯一值放在listBox当中

查询QueryFileter

过滤条件的设置,对象有一个subField,我们这里只添加一个

现在有一个search方法,干什么用呢,用于对当前数据表,在所有数据记录里面,去找满足条件的记录,条件是参数,若没有条件,则全返回,生成pFeatureCursor一个表,返回来矢量的一个表,返回一个矢量游标,

对返回的这个字段,进行统计,统计唯一值,datastatistics唯一值选择的对象,有一个IDataStatistics的接口,指向这个Cursor这个表,进行统计,对当前指定的这个字段进行统计,获取之后我们可以生成,pEnumerator,依次进行循环了,和MoveNext,

current 如果非空,我们就把他变成一个字符串,如果是一个值的话,直接添加进唯一值

添加为唯一值后,在doubleCLick事件当中,组合textwhere当中组合字符串,设计了很多方法,我们用的目的是在这个Ok事件上进行最后一个查询操作,

QueryFilter

我要用什么样的条件呢,whereClause的方法,查询过滤器,我们把满足条件的要素进行查询,查询出来后,把其放入

依次访问列表中每一条记录,每一个记录都是一个feature
就是获取一个feature,所有选择到的,选择到的转换为IFeatureSelection,我们在当前的特征要素层的特征要素。这里面有什么内容呢?这里面有预先设置的两行文本,创建新选择集,还是添加到原有的选择集,两种情况。根据情况写代码,进行判定,创建新的选择集。首先清空原先的选择集,依次获得查询到的特征要素,找到了就添加到选择集中,如果不是选择创建新的,就将特征要素添加到本层的选择集中,地图刷新。

构造这个查询过滤器,依次获得查询到的特征要素,

地图刷新。

属性查询

老师代码可以参加大赛,

Ifeaturecursor和Icursor ,后者可以没有属性字段,前者可以包括属性字段和空间字段

https://blog.csdn.net/haizhongliangji/article/details/41686217

IFeatureCursor接口可用来访问要素类的一系列要素。虽然它没有继承ICursor接口,但它的操作和ICursor一样。
Cursor:存储在内存中的来自于一个Table或者featureclass的记录集合。Cursor对象允许在一个单个对象中管理记录集,单个移动对象,不允许返回以前的位置。NextRow,NextFeature方法第一次调用时,实际指向第一条记录,之后每一次调用都是指向下一条记录。使用Newrow 或 NewFeature将返回nothing,指示目前已经在Cursor的末尾。

Cursor VS FeatureCursor

Cursor:

     用于操作Table(存储在传统数据库中的记录子集),Table对象用于产生一个Cursor类的实例;

FeatureCursor:

    用于操作FeatureClass(地理数据集:shapefile,personal geodatabase,enterprise  geodatabase)

FeatureClass对象用于产生一个FeatureCursor类的实例.

其它的区分:QueryFilter VS SpatialFilter

  QueryFilter 和 SpatialFilter都是组件类。QueryFilter  用于属性查询,可以在内存中产生用于限制记录子集的对象。SpatialFilter是空间查询。空间查询只能用于FeatureClass,它是一种QueryFilter  ,可以访问其所有的属性和方法,因而可以使用QueryFilter  的whereClass属性来绑定空间的属性限制。
1     ISpatialFilter pSpatialFilter = new SpatialFilterClass();
2     pSpatialFilter.Geometry = pFloodPolygon;
3     pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
4     pSpatialFilter.WhereClause = "Prop_val>1000000";
5     pFCursor = pFLayer.Search(pSpatialFilter, true);
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值