tin属性怎么获取 arcgis tinengine

原文链接:
& &对属性表的统计函数时,发现执行速度奇慢无比,百思不得其解,其实算法并不复杂,后来逐句排查终于发现竟是&ArcGIS
Engine&的函数读取属性值的问题。
&&在获取属性表的值时有多种方法:
& 方法一:
ITable pTable = pFeatureClass as IT
pValue = pTable.GetRow(i).get_Value(3);&方法二:
IFeatureCursor pFCursor = pFeatureClass.Search(new QueryFilterClass(), false);
IFeature pFeature = pFCursor.NextFeature();
if (pFeature == null)
pValue = pFeature.get_Value(pIndex);
pFeature = pFCursor.NextFeature();方法二明显要快于方法一
& 实例测试:
//目标是想将原数据库中的点信息(x,y经纬度坐标,度格式),添加到FeatureClass中,数据库中大概有10000条数据,全部添加到FeatureClass中大概需//要半小时以上
DataSet ds = loadExcel(&d://aaa.xls&);
IFeature feature = featureClass.CreateFeature();
IFields fields = featureClass.F
for(int i=0;i&ds.Tables[0].Rows.Ci++)
DataRow row = ds.Tables[0].Rows[i];
string xl = Convert.ToString(row[0]);
string x = Convert.ToDouble(row[1]);
string y = Convert.ToDouble(row[2]);
//....其它数据库中字段
//创建点对象
IPoint point = new PointClass();
//设置Fields域
feature.set_Value(fields.FindField(&线路&),xl);
feature.set_Value(fields.FindField(&经度&),x);
feature.set_Value(fields.FindField(&纬度&),y);
//保存点对象
feature.Shape =
feature.Store();
//改进后:
DataSet ds = loadExcel(&d://aaa.xls&)
IFeatureBuffer featureB//
IFeatureCursor cur = featureClass.Insert(true);
IFields fields = featureClass.F
for(int i=0;i&ds.Tables[0].Rows.Ci++)
DataRow row = ds.Tables[0].Rows[i];
string xl = Convert.ToString(row[0]);
string x = Convert.ToDouble(row[1]);
string y = Convert.ToDouble(row[2]);
//....其它数据库中字段
//创建点对
point = new PointClass();
featureBuffer = featureClass.CreateFeatureBuffer();
//设置Fields域
featureBuffer.set_Value(fields.FindField(&线路&),xl);
featureBuffer.set_Value(fields.FindField(&经度&),x);
featureBuffer.set_Value(fields.FindField(&纬度&),y);
//保存点对象
featureBuffer.Shape =
cur.InsertFeature(featureBuffer);
//可以看出改进后使用了eatureClass.CreateFeatureBuffer方法,使效率大大提高。
本文已收录于以下专栏:
相关文章推荐
1. 要素的添加
ArcGIS Engine中,主要有两个方法用于要素的添加:
Using IFeatureClass.CreateFeature followed
by ...
1. 要素的添加
ArcGIS Engine中,主要有两个方法用于要素的添加:
Using IFeatureClass.CreateFeature followed
by ...
原文链接:
1. 要素的添加
ArcGIS Engine中,主要有两个方法用于要素的添加:
Using IFeatureClass.CreateFeature followed
by IF...
在ArcGIS Engine开发过程中,比较常用并且重要的功能就是数据转换,对于数据转换方法您是否足够清楚?ArcGIS Engine中常用的数据转换方法有哪些?各种转换方法的优缺点是什么?采用哪种方...
ArcGIS中的文件地理数据库是以文件夹形式存储的,获取其矢量要素的代码如下:
/// 得到数据库中的矢量元素
/// 数据库路径...
打包ArcGIS Engine应用程序的几种方式 16:381.使用InstallShield打包ArcGIS Engine应用程序ArcGIS Engine开发的应用程序必须要在...
由于研究的需要,
Q:哪儿有10的ArcGIS Engine SDK?
A:ArcGIS 10不需要安装单独的Engine开发包,在Desktop的镜像中,安装ArcObjects SDK就可以使用Engine的那些...
arcengine栅格数据使用总结
两个星期以来一直与栅格数据打交道,对AO的栅格部分应该有了一定的理解,下面是自己的一点体会,希望高手指教:-)
1、栅格数据的存储类型
栅格数据一般可以存储为...
上一篇文章最后提到过GP工具的许可,这篇文章就详细讲解一下调用GP工具的许可问题,这也是Engine中调用GP工具出错最多的一类问题。除此之外,再介绍一下Engine中如何设置环境变量以及如何调用后台...
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)arcgis-如何实现类似ArcGIS双击属性表定位到要素的功能 AE+C#二次开发 求帮助,新手。
作者:用户
浏览:233 次
如何实现类似ArcGIS双击属性表定位到要素的功能AE+C#二次开发求帮助,新手。在属性表里已经获得属性了,怎么才能定位显示呢,就是把地图以那个要素为中心,放大。
如何实现类似ArcGIS双击属性表定位到要素的功能 AE+C#二次 求帮助,新手。
在属性表里已经获得属性了,怎么才能定位显示呢,就是把地图以那个要素为中心,放大。
【云栖快讯】红轴机械键盘、无线鼠标等753个大奖,先到先得,云栖社区首届博主招募大赛9月21日-11月20日限时开启,为你再添一个高端技术交流场所&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
后知后觉的一个人!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1047)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_094067',
blogTitle:'ArcGIS Engine基础开发教程(7)——学习地图输出',
blogAbstract:'7地图输出地图输出是一个GIS系统应有的功能,它分为两种类型:一种是地图的打印输出,即把地图的某一范围通过打印机或者绘图仪打印在纸质媒介上,如图1所示;另一种是地图的转换输出,即把地图的某一范围输出转换为不同的文件格式,如JPEG,PDF,',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'后知后觉的一个人!',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}《ArcGIS&Engine+C#实例开发教程》第九讲&图层文本标注-ArcObjects开发-技术专栏-GIS空间站
http://www.gissky.net- GIS空间站
网站资讯通告:
您现在的位置:&&>>&&>>&&>>&&>>&正文
《ArcGIS&Engine+C#实例开发教程》第九讲&图层文本标注
[作者:闲云野鹤 本文系3SDN原创《ArcGIS Engine+C#实例开发教程》之一,转载请注明本文链接:
上一讲中,我们实现了图层属性表的浏览功能,这一讲给大家讲解图层标注的实现方法。
本文实现的最终效果如下:&图层标注实现起来并不复杂,本例仅做一个简单示范,只加载AE的样式库,标注选定的字段,旨在抛砖引玉。更高级的功能,如自定义样式和修改样式,由读者自己实现。主要思路:&加载图层字段 –& 加载文本样式 -& 设置文本样式实现过程:&创建标注设置窗体 -& 创建图层标注的Command -& 添加Command到图层右键菜单9.1创建标注设置窗体(1)添加一个Windows窗体,命名为LabelLayerFrm.cs。添加控件如下:
(2)为LabelLayerFrm类添加两个成员变量:
public ILayer pLprivate IStyleGalleryItem pStyleGalleryI
(3)重载一个构造函数:
&public LabelLayerFrm(ILayer layer){&&& InitializeComponent();&&& pLayer =}
(4) 添加成员函数ReadRegistry,用于从注册表中读取Arc的安装路径。
&/// &summary&/// 读取注册表中的制定软件的路径/// &/summary&/// &param name="sKey"&&/param&/// &returns&&/returns&private string ReadRegistry(string sKey){&&& //Open the subkey for reading&&& Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey, true);&&& if (rk == null) return "";&&& // Get the data from a specified item in the key.&&& return (string)rk.GetValue("InstallDir");}
(5)添加LabelLayerFrm窗体的Load事件,以加载图层字段到下拉模型,加载文本样式到SymbologyControl控件。
&private void LabelLayerFrm_Load(object sender, EventArgs e){&&& //加载图层字段&&& ITable pTable = pLayer as IT&&& IField pField =&&& for (int i = 0; i & pTable.Fields.FieldC i++)&&& {&&&&&&& pField = pTable.Fields.get_Field(i);&&&&&&& cbbField.Items.Add(pField.AliasName);&&& }&&& cbbField.SelectedIndex = 0;&&& //获得Arc的安装路径&&& string sInstall = ReadRegistry("SOFTWARE\\ESRI\\CoreRuntime");&&& //加载ESRI.ServerStyle 样式文件到SymbologyControl&&& this.axSymbologyControl1.LoadStyleFile(sInstall + "");&&& this.axSymbologyControl1.GetStyleClass(esriSymbologyStyleClass.esriStyleClassTextSymbols).SelectItem(0);}
(6)添加axSymbologyControl1控件的OnItemSelected事件,以设置选定的样式。
&private void axSymbologyControl1_OnItemSelected(object sender, ISymbologyControlEvents_OnItemSelectedEvent e){&&& pStyleGalleryItem = (IStyleGalleryItem)e.styleGalleryI}
(7)添加确定按扭的Click事件,为选定图层中的选定的字段以选定的样式标注。
&private void btnOK_Click(object sender, EventArgs e){&&& IGeoFeatureLayer pGeoFeatureLayer = pLayer as IGeoFeatureL&&& pGeoFeatureLayer.AnnotationProperties.Clear();//必须执行,因为里面有一个默认的&&& IBasicOverposterLayerProperties pBasic = new BasicOverposterLayerPropertiesClass();&&& ILabelEngineLayerProperties pLableEngine = new LabelEngineLayerPropertiesClass();&&& ITextSymbol pTextSymbol = new TextSymbolClass();&&&&&&&&&&& &&& pTextSymbol = (ITextSymbol)pStyleGalleryItem.I&&& //你可以在这里修改样式的颜色和字体等属性,本文从略&&& //pTextSymbol.Color&&& //pTextSymbol.Font &&& string pLable = "[" + (string)cbbField .SelectedItem + "]";&&& pLableEngine.Expression = pL&&& pLableEngine.IsExpressionSimple =&&& pBasic.NumLabelsOption = esriBasicNumLabelsOption.esriOneLabelPerS&&& pLableEngine.BasicOverposterLayerProperties = pB&&& pLableEngine.Symbol = pTextS&&& pGeoFeatureLayer.AnnotationProperties.Add(pLableEngine as IAnnotateLayerProperties);&&& pGeoFeatureLayer.DisplayAnnotation =}
至此,标注设置窗体已经完成,如果你编译通不过,看看是不是忘了添加相关引用了。
9.2创建图层标注的Command
(1)创建一个新类,以Arc的BaseCommand为模板,命名为LabelLayerCmd.cs。注意:在新建Base Command模板时,会弹出一个对话框让我们选择模板适用对象,这时我们要选择MapControl、PageLayoutControl,即选择第二项或者倒数第二项。(2)添加LabelLayerCmd类的成员变量。
&private ILayer pLayer =IMapControl3 pM
(3)修改默认构造函数如下:
&public LabelLayerCmd(ILayer lyr,IMapControl3 map){&&& //&&& // TODO: Define values for the public properties&&& //&&& base.m_category = ""; //localizable text&&& base.m_caption = "标注";& //localizable text &&& base.m_message = "标注";& //localizable text&&& base.m_toolTip = "标注";& //localizable text&&& base.m_name = "标注";&& //unique id, non-localizable (e.g. "MyCategory_MyCommand")&&& pLayer =&&& pMap =&&& try&&& {&&&&&&& //&&&&&&& // TODO: change bitmap name if necessary&&&&&&& //&&&&&&& string bitmapResourceName = GetType().Name + ".bmp";&&&&&&& base.m_bitmap = new Bitmap(GetType(), bitmapResourceName);&&& }&&& catch (Exception ex)&&& {&&&&&&& System.Diagnostics.Trace.WriteLine(ex.Message, "Invalid Bitmap");&&& }}
(4)修改OnClick函数为:
&/// &summary&/// Occurs when this command is clicked/// &/summary&public override void OnClick(){&&& // TODO: Add LabelLayerCmd.OnClick implementation&&& LabelLayerFrm labelLyrFrm = new LabelLayerFrm(pLayer);&&& labelLyrFrm.ShowDialog();&&& pMap.Refresh(esriViewDrawPhase.esriViewGraphics, null, null);}
9.3添加Command到图层右键菜单
回到3sdnMap主窗体类,找到axTOCControl1_OnMouseDown事件响应函数,修改如下代码片断:
&//弹出右键菜单if (item == esriTOCControlItem.esriTOCControlItemMap)&&& m_menuMap.PopupMenu(e.x, e.y, m_tocControl.hWnd);if (item == esriTOCControlItem.esriTOCControlItemLayer){m_menuLayer.AddItem(new OpenAttributeTable(layer), -1, 2, true , esriCommandStyles.esriCommandStyleTextOnly);//动态添加图层标注的Command到图层右键菜单&&& m_menuLayer.AddItem(new LabelLayerCmd(layer, m_mapControl), -1, 3, false, esriCommandStyles.esriCommandStyleTextOnly);&&& //弹出图层右键菜单 &&& m_menuLayer.PopupMenu(e.x, e.y, m_tocControl.hWnd);&//移除菜单项&&& m_menuLayer.Remove(3);&&& m_menuLayer.Remove(2);}
至此,已经完成图层文本标注,编译运行吧,是不是看到开篇的效果了?以上代码在Windows XP Sp3 + VS2005 + AE9.2/9.3环境下编译通过。
上一篇文章: 下一篇文章:
相关文章列表
关于我们 - 联系我们 - 广告服务 - 友情链接 -}

我要回帖

更多关于 arcgis create tin 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信