Arcengine二次开发的宝典级电子书.docx
- 文档编号:7367091
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:156
- 大小:137.48KB
Arcengine二次开发的宝典级电子书.docx
《Arcengine二次开发的宝典级电子书.docx》由会员分享,可在线阅读,更多相关《Arcengine二次开发的宝典级电子书.docx(156页珍藏版)》请在冰豆网上搜索。
Arcengine二次开发的宝典级电子书
ArcGISEngine开发-自定义图层类型
用ArcGISEngine开发的一个特别就是面向接口编程,每组接口代表了对象在某个方面的特性,表现为一个方法、属性或事件。
要定义自己的图层类型,实际上只需要实现ILayer接口就可以了。
该接口的主要方法或属生包括:
publicIEnvelopeAreaOfInterest{get;}
publicvoidDraw(
esriDrawPhaseDrawPhase,
IDisplayDisplay,
ITrackCanceltrackCancel
)
publicvoidSpatialReference{set;}
publicstringget_TipText(
doublex,
doubley,
doubleTolerance
);
等等,请直接查阅帮助。
但实现了该接口,图层只是能加入以地图中,并显示出来而已。
如果你要自定义的图层类型是矢量要素的话,最好直接实现IFeatureLayer。
由于IFeatureLayer从ILayer继承而来,所以也包含了上述方法或属性。
同时还可以支持选择,查询等操作了。
实现了IFeatureLayer,还不能支持图层渲染功能。
要想支持图层渲染,得实现IGeoFeatureLayer接口,该接口从IFeatureLayer继承而来,所以也包含IFeatureLayer所支持的所有方法属性。
如果要支持属性表功能的话,得实现ITable接口。
如果希望图层信息能保存到MXD文档中,得实现IPersistStream接口。
由此可见,在ArcGISEngine中,要实现自定义图层类型,并不是一件不可能的事。
虽然会比较烦琐,但思路却非常清晰。
本人就通过这种思路设计了一种组合图层,可以同时包含点线面多种图形,但在TOCControl中只表现为一个图层。
当然,这个工作要简单轻松一些,但还是富有乐趣的~
ArcGISEngine开发-取得ArcMap文档缩略图
ArcObjects提供了一个IMapDocument接口,可以实现对ArcMap文档的读写操作。
该接品其中有一个属性是Thumbnail。
当我们保存文档,使用了保存缩略选项时,会在文档中保存一个缩略图。
我们可以通过Thumbnail来读取这个缩略图。
Thumbnail的类型是stdole.IPicture,所以要使用它,首先要引用stdole。
privatevoidSystem.Drawings.ImageGetThumbnail(IMapDocumentpMapDoc)
{
returnSystem.Drawing.Image.FromHbitmap((IntPtr)(pMapDoc.Thumbnail.Handle));
}
一行代码搞定,哈哈。
本来就很简单嘛。
好久没写了。
先写这么一点吧。
ArcSDE中直接取得图层几何类型
要取得SDE图层要素类型,一个方法就是打开该图层,然后通过取得DataSetType属性和FeatureType属性来判断,但这样做效率比较低。
能不能通过SDE的系统表来获得呢,答案是可以的。
要有到两系统表:
GDB_OBJECTCLASSES和GDB_FEATURECLASSES。
其中GDB_OBJECTCLASSES表中相关字段有:
ID、Name,GDB_FEATURECLASSES表的相关字段是:
ObjectClassID、FeatureType、GeometryType,两个表的关联关系是:
GDB_OBJECTCLASSES.ID=GDB_FEATURECLASSES.ObjectClassID。
通过这两个表的关联,就可以取得指定图层要素类型了。
我们可以先通过SQL语句根据图层名称来获取GDB_FEATURECLASSES表中字段FeatureType、GeometryType的值,然后将其转化为对应的要素类型。
转换关系请参照下面的代码:
public enum GeoType{Point,Line,Polygon,Anno,Raster,AttrTable,Unknown};
public static GeoType GetGeoType(object GeometryType,object FeatureType)
{
if (GeometryType == DBNull.Value)
return GeoType.AttrTable;
else if(GeometryType.ToString() == "2")
{
return GeoType.Point;
}
else if (GeometryType.ToString() == "3")
{
return GeoType.Line;
}
else if(GeometryType.ToString() == "4")
{
if (FeatureType.ToString() == "1")
return GeoType.Polygon;
else if (FeatureType.ToString() == "11")
return GeoType.Anno;
else if (FeatureType.ToString() == "14")
return GeoType.Raster;
else
return GeoType.Unknown;
}
else
{
return GeoType.Unknown;
}
}
通过这种方式,速度很快,而且可以一次读出所有图层的图层基本信息和要素类型,速度极快。
如果这些信息要经常使用的话,可以保存到一个哈希表中,这样只用连接一次数据库就OK了。
ArcGISServer常见问题之一
摘自ESRI,有些容是有限制的,要会员才能看到。
目前关于ArcGISServer开发的资料非常少,就这么一点文档,还要限制,不能让大家共享,实在是罪过。
现在我贴出来,希望这些资料对一起学习AGS的朋友有所帮助。
错误描述
在ArcCatalog中,当成功的创建了serverobject之后,serverobject不能被预览。
ArcCatalog显示下面的错误信息:
“你的选择不能在当前视图中显示.”
导致原因
server属性中被指定的输出值和http位置可能不正确。
解决办法
所有的创建的ArcGISServerObjects需要被停止。
1在ArcCatalog中,右击已经添加的ArcGISServer,并选择Server属性。
2在目录页中,选中已经添加的输出目录并点击编辑。
3输出目录字段应该指向一个有效的目录,比如C:
\ArcGIS\Output。
如果一个虚拟目录已经被指定,确认它是有效的,并且看上去和下面的格式一样,
4如果有错请更改,然后重新创建serverobject来确认更改是否有效。
错误描述
当在VisualStudio.NET2003上使用ArcGISServer.NET的ADF模板创建一个项目时,返回如下错误信息:
“在服务器<主机名>上的Web站点不可用(WebSiteonserver
导致原因
该模板包含了调用'localhost'这一URL的属性。
如果在IIS中禁用了本地主机的服务,则显示该错误信息。
禁用本地服务可能是因为你的Web站点已经为其指定了一个IP地址或者是因为安全方面的考虑。
解决办法
启用对localhost的访问决定于您安装的是哪种类型的操作系统,是服务器还是非服务器。
对于非服务器的操作系统:
1.点击Internet信息服务控制台,右键选择默认站点的属性,打开属性对话框,并选择标签页。
2.修改IP地址栏为"(全部未分配)"。
3.重启IIS。
在IE浏览器中浏览刚刚启用的localhost服务,在VisualStudio.NET2003中用模板创建项目,现在应该是成功的了。
对于WindowsServer操作系统:
1.在Internet信息服务控制台上创建一个新的Web站点。
2.为其分配IP地址:
127.0.0.1。
意味着只能在本地计算机上启用该站点。
3.浏览Web站点的根目录,比如C:
\Inetput\wwwroot。
此时在VisualStudio.NET2003中用模板创建项目应该没有问题。
错误描述
当启动一个服务对象时,出现下述错误信息:
“在机器XXX上创建Server环境(Context)失败。
拒绝访问output文件夹。
”
导致原因
ArcGISServerObjectContainer的必须拥有虚拟文件夹的写权限。
例如虚拟文件夹为:
c:
\inetpub\wwwroot\temp
解决办法
执行如下步骤:
右键点击虚拟文件夹如:
c:
\inetpub\wwwroot\temp
1.选择属性->安全标签页.
2.添加并赋予写权限,使其可以读写图片.
3.点击OK,关闭属性对话框.
错误描述
使用下面的代码,来进行使用字体中的符号进行点要素渲染的时候,会出现地图消失的问题。
下面的代码是用来生成需要在渲染过程中使用的点符号的,使用的是宋体中index为21的字作为符号。
privatestaticICharacterMarkerSymbol
GetMarkerSymbol(IServerContextpServerContext,PowerNet.GISCommon.SymbolClasspSymbolClass)
{
System.Drawing.FontdrawFont=new
System.Drawing.Font("宋体",21);
ICharacterMarkerSymbolcharMarker=
pServerContext.CreateObject("esriDisplay.CharacterMarkerSymbol")as
ICharacterMarkerSymbol;
charMarker.Font=(stdole.IFontDisp)
OLE.GetIFontDispFromFont(drawFont);
charMarker.CharacterIndex=pSymbolClass.CharacterIndex;
IRgbColorpRGB=pServerContext.CreateObject("esriDisplay.RgbColor")asIRgbColor;
pRGB.Red=pSymbolClass.SymbolColorR;
pRGB.Green=pSymbolClass.SymbolColorG;
pRGB.Blue=pSymbolClass.SymbolColorB;
charMarker.Color=pRGBasIColor;
charMarker.Size=pSymbolClass.SymbolSize;
returncharMarker;
}
导致原因
使用ArcGISEngine进行开发时,对于点要素类,是可以使用指定字体中的符号作为渲染的符号的,但是在arcgisserver的应用中来实现这个过程,就稍微有点不同,导致的原因还是本地对象和远程对象进行了混用?
对于ao对象,可能大家都已经有这个概念,就是一般不在本地创建对象,但是对于其它的对象,比如.net中的对象,可能就没有太注意了,所以才导致了这个问题的出现。
解决办法
这个问题的解决办法是这样的,为了避免在程序中使用下面这句代码:
System.Drawing.FontdrawFont=new
System.Drawing.Font(pSymbolClass.FontSymbolName,21);
可以采用先在*.Style文件中把符号都配好,然后转成*.ServerStyle文件,然后使用下面的代码得到相应的符号:
privateIMarkerSymbolcreateSymbol(IServerContextpServerContext,stringindex)
{
IStyleGallerypSGallery=pServerContext.CreateObject("esriDisplay.ServerStyleGallery")asIStyleGallery;
IStyleGalleryStoragepSGStorage=pSGalleryasIStyleGalleryStorage;
pSGStorage.TargetFile="D:
\xjw.ServerStyle";
pSGStorage.AddFile("D:
\xjw.ServerStyle");
IEnumStyleGalleryItempEnumGItem=pSGallery.get_Items("MarkerSymbols","D:
\xjw.ServerStyle",index);
pEnumGItem.Reset();
IStyleGalleryItempSGItem=pEnumGItem.Next();
IMarkerSymbolpMSymbol=pSGItem.ItemasIMarkerSymbol;
IRgbColorpRGB=pServerContext.CreateObject("esriDisplay.RgbColor")asIRgbColor;
pRGB.Red=255;
pRGB.Green=0;
pRGB.Blue=0;
pMSymbol.Color=pRGB;
pMSymbol.Size=18;
pEnumGItem=null;
pSGItem=null;
returnpMSymbol;
}
错误描述
这个错误可能发生在.net中的ArcGISPrimaryInteropAssemblies(PIA)。
在错误信息中的CLSID可能会变化:
"COMobjectwithCLSID{XXXX}iseithernotvalidornotregistered"
导致原因
在ArcGIS安装中选择安装.NET的支持,PIAs就会为所有的ArcGIS库而安装上。
当在尝试使用一个对象库的PIA时,而这个对象库根本就没有安装时,错误就会发生,因为Com对象不能被初始化。
例如,3DAnalyst扩展模块没有被安装,而尝试使用ESRI.ArcGIS.Analyst3D命名空间中的对象,使用如下代码:
ESRI.ArcGIS.Analyst3D.IAnimationTrackaTrack=newESRI.ArcGIS.Analyst3D.AnimationTrackClass();
一个错误就会发生:
"Errornumber-2147221164:
COMobjectwithCLSID{4FEDC9CB-A7BE-11D5-B2A0-00508BCDDE28}iseithernotvalidornotregistered."
解决办法
编程只能使用安装了的对象库。
为了开发使用一个特殊的库,那就需要重新安装ArcGIS产品,确保所需的扩展模块都被安装,以及所有的.NET的支持选项。
额外的许可会被需要。
1识别使用的对象,以及这些对象所属的命名空间。
2识别命名空间所属的产品。
例如,为了使用ESRI.ArcGIS.Analyst3D命名空间中的对象,在开发帮助中浏览库总体说明那一页。
会有注解说明这个命名空间是有ArcGISEngine产品的3D扩展模块,ArcGISdesktop3D扩展模块,以及ArcGISServer的3D扩展模块支持。
3重新安装产品,确保所需的扩展模块得到安装,且保证.Net支持选项被选中。
错误描述
当使用ArcGIS开发者控件开发应用程序、控件拖放于窗体上的时候,出现以下错误信息:
"该控件需要一个ESRIDesigner许可。
请从工程中移除该控件。
"
导致原因
出现这个信息是因为ArcGISEngineDeveloperKit这个产品未在机器上安装并授权。
ArcGISDesktop安装了以下控件:
-MapControl
-PageLayoutControl
-GlobeControl
-ReaderControl
-SceneControl
-TOCControl
-ToolbarControl
ArcGISDesktop许可仅允许使用MapControl和PageLayoutControl进行开发或设计应用程序。
剩下的其它控件许可给ArcGISEngine,并仅能在ArcGISEngineDeveloperKit已安装并授权时用于开发。
解决办法
购买ArcGISEngineDeveloperKit产品,并在机器上授权以下任意控件:
-GlobeControl
-ReaderControl
-SceneControl
-TOCControl
-ToolbarControl
有关如何使用这些控件的详细信息,以及哪些控件需要对应哪些许可,请参考ArcGISDeveloperHelp。
例如,'TOCControlCoClass'帮助主题提到,该控件只在有ArcGISEngine产品时才可用。
错误描述
安装出错1935
当安装ArcGISServer,ArcGISDesktop,includingArcView,ArcEditor,ArcInfo;orArcIMS,都可能发生如下错误:
"Error1935:
Anerroroccuredduringtheinstallationofassemblycomponent{303994BA-6487-47AE-AF1D-7AF6088EEBDB}.HRESULT:
-2147024894."
之后点击'OK'安装回滚退出.
导致原因
导致原因
这个错误发生在系统安装(MicrosoftXMLParser4)更新.这现同样的错误信息将发生在试图安装(MicrosoftXMLParser4.0)的时候;这也可能修改,但是经常会因为其他产品的安装而影响系统文件破坏。
解决办法
步骤:
1.尽可能停止一些后台程序,例如adware或spyware.有可能也停止Adwatch,在机器上删除所有的adware.;
2.尽可能停止一些Windows服务,控制面板>管理员工具>服务;
3.检查InternetExplorer6.0的安装.检验Microsoftservice安装包和安装更新;
4.在安装产品前请先安装MicrosoftXML4.0SP2,这有可能下载其相关联的一部分;
5.接着安装ESRI软件产品在第4步安装成功;
错误描述
在操作系统是WindowsXPSP2、CPU为AMDAthlon64系列或Pentium4和Celeron-D的机器上安装ArcGIS9.0时,出现1904错误,系统无法注册一些dll文件。
导致原因
在WindowsXPSP2中,DEP(数据执行保护)选项默认情况下是打开的,AMD和Intel新的CUP系列中包含这个选项。
数据执行保护是一套硬件和软件技术用于执行对存的额外检查,以保护电脑遭受恶意代码的破坏。
解决办法
方法一:
移除WindowsXP的SP2,然后安装ArcGIS9.0。
方法二:
关闭DEP(数据执行保护),安装ArcGIS9.0,安装完再激活数据执行保护。
具体如下:
1.以管理员权限登陆WindowsXP。
2.鼠标点击“我的电脑”,选择“属性”菜单
3.点击“高级”页。
4.选择“启动与恢复”下的“设置”按钮。
5.选择默认操作系统,如下:
"MicrosoftWindowsXPProfessional"/fastdetect/NoExecute=OptIn
6.点击“编辑”按钮打开boot.ini文件,将其中的“”/NoExecute=OptIn”改为“/NoExecute=AlwaysOff”。
7.保存文件,重新启动计算机。
8.安装ArcGIS,此时应该就不会出现1904错误了
9.安装完ArcGIS以后,将boot.ini文件设置改回来,以重新激活数据执行保护的安全选项。
IFeatureLayer.DataSourceTypeProperty [C#]
SeeAlso
IFeatureLayerInterface
Language
∙C#
∙VisualBasic.NET
∙ShowAll
Datasourcetype.
[VisualBasic.NET]
PublicPropertyDataSourceTypeAsString
[C#]
publicstringDataSourceType{get;set;}
ProductAvailability
AvailablewithArcGISEngine,ArcGISDesktop,andArcGISServer.
Description
Describesthetypeofdatareferencedbythefeaturelayer.InArcMapandArcCatalogthisdescriptionappearsonthelayer'spropertiesdialogontheSourcetabafter"DataType:
"
Remarks
Bydefault,theDataSourceTypeforalay
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Arcengine 二次开发 宝典 电子书