方法一、
iworkspacefactory pworkspacefactory;
ifeatureworkspace pfeatureworkspace;
ifeaturelayer pfeaturelayer;
ifeaturedataset pfeaturedataset;
//打开cad数据集
pworkspacefactory = new cadworkspacefactoryclass();
pfeatureworkspace = (ifeatureworkspace)pworkspacefactory.openfromfile(directorypath, 0);
//打开一个要素集
pfeaturedataset = pfeatureworkspace.openfeaturedataset(filename);
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = new cadannotationlayerclass();
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = new featurelayerclass();
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
}
}
方法二、
//--定义工作空间,并用cadworkspacefactoryclass()实例化它
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
//--打开相应的工作空间,并赋值给要素空间,openfromfile()
//--中的参数为cad文件夹的路径
ifeatureworkspace pfeatureworkspace = pworkspacefactory.openfromfile(directorypath, 0) as ifeatureworkspace;
/*--打开线要素类,如果要打开点类型的要素,需要把下边的代码该成:
*-- ifeatureclass pfeatureclass = pfeatureworkspace.openfeatureclass (filename + ":point");
*-- 由此可见filename为cad图的名字,后边加上要打开的要素类的类型,中间用冒号
*-- 隔开,大家可以想想多边形和标注是怎么打开的。 */
//point polyline
ifeatureclass pfeatureclass = pfeatureworkspace.openfeatureclass(filename + ":point");
ifeaturelayer pfeaturelayer = new featurelayerclass();
pfeaturelayer.featureclass = pfeatureclass;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
方法三、
/*--下边的两行代码是定义一个cad工作空间,然后打开它,但这次不是赋值给
--ifeatureworkspace对象,而是赋值给iworkspace定义的对象*/
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
iworkspace pworkspace = pworkspacefactory.openfromfile(directorypath, 0);
//--定义一个cad画图空间,并把上边打开的工作空间赋给它
icaddrawingworkspace pcaddrawingworkspace = pworkspace as icaddrawingworkspace;
//--定义一个cad的画图数据集,并且打开上边指定的工作空间中一幅cad图
//--然后赋值给cad数据集
icaddrawingdataset pcaddrawingdataset = pcaddrawingworkspace.opencaddrawingdataset(filename);
//--通过icadlayer类,把上边得到的cad数据局赋值给icadlayer类对象的
//--caddrawingdataset属性
icadlayer pcadlayer = new cadlayerclass();
pcadlayer.caddrawingdataset = pcaddrawingdataset;
//--利用mapcontrol加载cad层
this.axmc_main.map.addlayer(pcadlayer);
this.axmc_main.activeview.**();
方法四、
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
ifeatureworkspace pfeatureworkspace = pworkspacefactory.openfromfile(directorypath, 0) as ifeatureworkspace;
ifeaturedataset pfeaturedataset = pfeatureworkspace.openfeaturedataset(filename);
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
ifeaturelayer pfeaturelayer = new featurelayerclass();
pfeaturelayer.featureclass = pfeatureclass;
//icadlayer pcadlayer = new cadlayerclass();
//pcadlayer = pfeaturelayer as icadlayer;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
}
方法五、
//add passed file to mapcontrol
icaddrawingdataset pcaddrawingdataset = getcaddrawingdataset(directorypath, filename);
if (pcaddrawingdataset == null) return;
icadlayer pcadlayer = new cadlayerclass();
pcadlayer.caddrawingdataset = pcaddrawingdataset;
pcadlayer.name = filename;
this.axmc_main.addlayer(pcadlayer, 0);
/// <summary>
/// 获取记录集
/// </summary>
/// <param name="directorypath"></param>
/// <param name="filename"></param>
/// <returns></returns>
private icaddrawingdataset getcaddrawingdataset(string directorypath, string filename)
{
//create a workspacename object
iworkspacename pworkspacename = new workspacenameclass();
pworkspacename.workspacefactoryprogid = "esridatasourcesfile.cadworkspacefactory";
pworkspacename.pathname = directorypath;
//create a caddrawingname object
idatasetname pdatasetname = new caddrawingnameclass();
pdatasetname.name = filename;
pdatasetname.workspacename = pworkspacename;
//open the cad drawing
iname pname = (iname)pdatasetname;
return (icaddrawingdataset)pname.open();
}
需要注意
如果你的arcgis地理信息系统 版本是v9.2的话,可能是因为你的文件名中含有中文字符的原因.据我所知,在arcgis地理信息系统 9.2中无法显示文件名含有中文字符的cad文件.你可以在arcmap中直接打开试试,如果也无法显
此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
示的话,可能是文件名的问题(注:路径中也不能含有中文字符).
gis地理信息系统 for web应用开发之道
插件式gis地理信息系统 应用框架的设计与实现
public void esridatasourcesfile_icaddrawingdataset_example(string nameoffile, string nameofcaddrawing)
{
//set the workspace factory
iworkspacefactory workspacefactory = new esri.arcgis地理信息系统 .datasourcesfile.cadworkspacefactoryclass();
//open the workspace
iworkspace workspace = workspacefactory.openfromfile(nameoffile, 0);
//set the caddrawingworkspace
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace caddrawingworkspace = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace)workspace;
//open the caddrawingdataset
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset caddrawingdataset = caddrawingworkspace.opencaddrawngdataset(nameofcaddrawing);
//create the cadlayer
esri.arcgis地理信息系统 .carto.icadlayer cadlayer = new esri.arcgis地理信息系统 .carto.cadlayerclass();
//set the cadlayer to the caddrawingdataset
cadlayer.caddrawingdataset = caddrawingdataset;
//list if the caddrawingdataset exists
console.writeline("does drawing exist: {0}" , cadlayer.caddrawingdataset.exists );
//list the caddrawingdataset filepath
console.writeline("cad drawing path: {0}" , cadlayer.caddrawingdataset.filepath );
//list if the caddrawingdataset is 2d
console.writeline("is drawing 2d?: {0}" , cadlayer.caddrawingdataset.is2d);
//list if the caddrawingdataset is 3d
console.writeline("is drawing 3d?: {0}" , cadlayer.caddrawingdataset.is3d );
//list if the caddrawingdataset is an autocad drawing file
console.writeline("is drawing from autocad?: {0}" , cadlayer.caddrawingdataset.isautocad );
//list if the caddrawingdataset is an microsation drawing file
console.writeline("is drawing from microstation?: {0}" , cadlayer.caddrawingdataset.isdgn); }
中间过程实验代码:
实验1
public static string addcadlayer(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
增加图层
//esri.arcgis地理信息系统 .carto.featurelayer pfeaturelayer = null;
//ifeaturelayer pfeaturelayer;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
//pworkspacefactory = new cadworkspacefactoryclass();
//pworkspacefactory = new pworkspacefactory();
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace pfeatureworkspace = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset pfeaturedataset = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset)pfeatureworkspace.opencaddrawingdataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
esri.arcgis地理信息系统 .carto.icadlayer pfeatureclasscontainer = new esri.arcgis地理信息系统 .carto.cadlayerclass();
pfeatureclasscontainer.caddrawingdataset = pfeaturedataset;
//ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
//for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
//{
// ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
// if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
// {
// //如果是注记,则添加注记层
// pfeaturelayer = (esri.arcgis地理信息系统 .carto.featurelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
// }
// else//如果是点、线、面,则添加要素层
// {
// pfeaturelayer = (esri.arcgis地理信息系统 .carto.featurelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
// pfeaturelayer.name = pfeatureclass.aliasname;
// }
//}
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
//if (pfeaturelayer != null)
//{
map.addlayer(pfeatureclasscontainer);
// //map.movelayer(pfeaturelayer, map.layercount - 1);
//}
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}
实验2
public static string addcadlayer2(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
// 增加图层
esri.arcgis地理信息系统 .carto.ifeaturelayer pfeaturelayer = null;
//ifeaturelayer pfeaturelayer;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
//pworkspacefactory = new cadworkspacefactoryclass();
//pworkspacefactory = new pworkspacefactory();
ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
ifeaturedataset pfeaturedataset = (ifeaturedataset)pfeatureworkspace.openfeaturedataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 3; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
//pfeaturelayer = new cadannotationlayerclass();
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
esri.arcgis地理信息系统 .carto.igeofeaturelayer iglayer = (esri.arcgis地理信息系统 .carto.igeofeaturelayer)pfeaturelayer;
esri.arcgis地理信息系统 .carto.isimplerenderer isr = (esri.arcgis地理信息系统 .carto.isimplerenderer)mapcontext.createobject("esricarto.simplerenderer");
esri.arcgis地理信息系统 .display.irgbcolor irgbc = (esri.arcgis地理信息系统 .display.irgbcolor)mapcontext.createobject("esridisplay.rgbcolor");
irgbc.red = 255;
irgbc.green = 0;
irgbc.blue = 0;
esri.arcgis地理信息系统 .geometry.esrigeometrytype featype = pfeaturelayer.featureclass.shapetype;
if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypoint)
{
esri.arcgis地理信息系统 .display.isimplemarkersymbol ifs = (esri.arcgis地理信息系统 .display.isimplemarkersymbol)mapcontext.createobject("esridisplay.simplemarkersymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypolyline)
{
esri.arcgis地理信息系统 .display.isimplelinesymbol ifs = (esri.arcgis地理信息系统 .display.isimplelinesymbol)mapcontext.createobject("esridisplay.simplelinesymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypolygon)
{
esri.arcgis地理信息系统 .display.isimplefillsymbol ifs = (esri.arcgis地理信息系统 .display.isimplefillsymbol)mapcontext.createobject("esridisplay.simplefillsymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else
{
esri.arcgis地理信息系统 .display.isimplelinesymbol ifs = (esri.arcgis地理信息系统 .display.isimplelinesymbol)mapcontext.createobject("esridisplay.simplelinesymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
//throw new exception("图层类型不确定!");
}
iglayer.renderer = (esri.arcgis地理信息系统 .carto.ifeaturerenderer)isr;
//imapserver ms = (imapserver)in_mapcontext.serverobject;
//imapserverobjects2 mso = (imapserverobjects2)ms;
//string mapname = ms.defaultmapname;
//imap map = mso.get_map(mapname);
//map.addlayer(pfeaturelayer);
//mso.refreshserverobjects();
}
}
从上下文对象中得到服务器对象
//imapserver ms = (imapserver)mapcontext.serverobject;
//imapserverinfo mapinfo = ms.getserverinfo(ms.defaultmapname);
//imapdescription newmapdesc = mapinfo.defaultmapdescription;
释放服务器上下文对象
//mapcontext.releasecontext();
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
if (pfeaturelayer != null)
{
map.addlayer(pfeaturelayer);
//移动层到底层
//map.movelayer(pfeaturelayer, map.layercount - 1);
}
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}
最终调试正确代码:
public static string addcadlayer(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
// 增加图层
esri.arcgis地理信息系统 .carto.ifeaturelayer pfeaturelayer = null;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
ifeaturedataset pfeaturedataset = (ifeaturedataset)pfeatureworkspace.openfeaturedataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
map.addlayer(pfeaturelayer);
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
}
}
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}
iworkspacefactory pworkspacefactory;
ifeatureworkspace pfeatureworkspace;
ifeaturelayer pfeaturelayer;
ifeaturedataset pfeaturedataset;
//打开cad数据集
pworkspacefactory = new cadworkspacefactoryclass();
pfeatureworkspace = (ifeatureworkspace)pworkspacefactory.openfromfile(directorypath, 0);
//打开一个要素集
pfeaturedataset = pfeatureworkspace.openfeaturedataset(filename);
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = new cadannotationlayerclass();
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = new featurelayerclass();
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
}
}
方法二、
//--定义工作空间,并用cadworkspacefactoryclass()实例化它
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
//--打开相应的工作空间,并赋值给要素空间,openfromfile()
//--中的参数为cad文件夹的路径
ifeatureworkspace pfeatureworkspace = pworkspacefactory.openfromfile(directorypath, 0) as ifeatureworkspace;
/*--打开线要素类,如果要打开点类型的要素,需要把下边的代码该成:
*-- ifeatureclass pfeatureclass = pfeatureworkspace.openfeatureclass (filename + ":point");
*-- 由此可见filename为cad图的名字,后边加上要打开的要素类的类型,中间用冒号
*-- 隔开,大家可以想想多边形和标注是怎么打开的。 */
//point polyline
ifeatureclass pfeatureclass = pfeatureworkspace.openfeatureclass(filename + ":point");
ifeaturelayer pfeaturelayer = new featurelayerclass();
pfeaturelayer.featureclass = pfeatureclass;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
方法三、
/*--下边的两行代码是定义一个cad工作空间,然后打开它,但这次不是赋值给
--ifeatureworkspace对象,而是赋值给iworkspace定义的对象*/
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
iworkspace pworkspace = pworkspacefactory.openfromfile(directorypath, 0);
//--定义一个cad画图空间,并把上边打开的工作空间赋给它
icaddrawingworkspace pcaddrawingworkspace = pworkspace as icaddrawingworkspace;
//--定义一个cad的画图数据集,并且打开上边指定的工作空间中一幅cad图
//--然后赋值给cad数据集
icaddrawingdataset pcaddrawingdataset = pcaddrawingworkspace.opencaddrawingdataset(filename);
//--通过icadlayer类,把上边得到的cad数据局赋值给icadlayer类对象的
//--caddrawingdataset属性
icadlayer pcadlayer = new cadlayerclass();
pcadlayer.caddrawingdataset = pcaddrawingdataset;
//--利用mapcontrol加载cad层
this.axmc_main.map.addlayer(pcadlayer);
this.axmc_main.activeview.**();
方法四、
iworkspacefactory pworkspacefactory = new cadworkspacefactoryclass();
ifeatureworkspace pfeatureworkspace = pworkspacefactory.openfromfile(directorypath, 0) as ifeatureworkspace;
ifeaturedataset pfeaturedataset = pfeatureworkspace.openfeaturedataset(filename);
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
ifeaturelayer pfeaturelayer = new featurelayerclass();
pfeaturelayer.featureclass = pfeatureclass;
//icadlayer pcadlayer = new cadlayerclass();
//pcadlayer = pfeaturelayer as icadlayer;
this.axmc_main.map.addlayer(pfeaturelayer);
this.axmc_main.activeview.**();
}
方法五、
//add passed file to mapcontrol
icaddrawingdataset pcaddrawingdataset = getcaddrawingdataset(directorypath, filename);
if (pcaddrawingdataset == null) return;
icadlayer pcadlayer = new cadlayerclass();
pcadlayer.caddrawingdataset = pcaddrawingdataset;
pcadlayer.name = filename;
this.axmc_main.addlayer(pcadlayer, 0);
/// <summary>
/// 获取记录集
/// </summary>
/// <param name="directorypath"></param>
/// <param name="filename"></param>
/// <returns></returns>
private icaddrawingdataset getcaddrawingdataset(string directorypath, string filename)
{
//create a workspacename object
iworkspacename pworkspacename = new workspacenameclass();
pworkspacename.workspacefactoryprogid = "esridatasourcesfile.cadworkspacefactory";
pworkspacename.pathname = directorypath;
//create a caddrawingname object
idatasetname pdatasetname = new caddrawingnameclass();
pdatasetname.name = filename;
pdatasetname.workspacename = pworkspacename;
//open the cad drawing
iname pname = (iname)pdatasetname;
return (icaddrawingdataset)pname.open();
}
需要注意
如果你的arcgis地理信息系统 版本是v9.2的话,可能是因为你的文件名中含有中文字符的原因.据我所知,在arcgis地理信息系统 9.2中无法显示文件名含有中文字符的cad文件.你可以在arcmap中直接打开试试,如果也无法显
此文来自: 马开东博客 转载请注明出处 网址: http://www.makaidong.com
示的话,可能是文件名的问题(注:路径中也不能含有中文字符).
gis地理信息系统 for web应用开发之道
插件式gis地理信息系统 应用框架的设计与实现
public void esridatasourcesfile_icaddrawingdataset_example(string nameoffile, string nameofcaddrawing)
{
//set the workspace factory
iworkspacefactory workspacefactory = new esri.arcgis地理信息系统 .datasourcesfile.cadworkspacefactoryclass();
//open the workspace
iworkspace workspace = workspacefactory.openfromfile(nameoffile, 0);
//set the caddrawingworkspace
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace caddrawingworkspace = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace)workspace;
//open the caddrawingdataset
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset caddrawingdataset = caddrawingworkspace.opencaddrawngdataset(nameofcaddrawing);
//create the cadlayer
esri.arcgis地理信息系统 .carto.icadlayer cadlayer = new esri.arcgis地理信息系统 .carto.cadlayerclass();
//set the cadlayer to the caddrawingdataset
cadlayer.caddrawingdataset = caddrawingdataset;
//list if the caddrawingdataset exists
console.writeline("does drawing exist: {0}" , cadlayer.caddrawingdataset.exists );
//list the caddrawingdataset filepath
console.writeline("cad drawing path: {0}" , cadlayer.caddrawingdataset.filepath );
//list if the caddrawingdataset is 2d
console.writeline("is drawing 2d?: {0}" , cadlayer.caddrawingdataset.is2d);
//list if the caddrawingdataset is 3d
console.writeline("is drawing 3d?: {0}" , cadlayer.caddrawingdataset.is3d );
//list if the caddrawingdataset is an autocad drawing file
console.writeline("is drawing from autocad?: {0}" , cadlayer.caddrawingdataset.isautocad );
//list if the caddrawingdataset is an microsation drawing file
console.writeline("is drawing from microstation?: {0}" , cadlayer.caddrawingdataset.isdgn); }
中间过程实验代码:
实验1
public static string addcadlayer(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
增加图层
//esri.arcgis地理信息系统 .carto.featurelayer pfeaturelayer = null;
//ifeaturelayer pfeaturelayer;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
//pworkspacefactory = new cadworkspacefactoryclass();
//pworkspacefactory = new pworkspacefactory();
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace pfeatureworkspace = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset pfeaturedataset = (esri.arcgis地理信息系统 .datasourcesfile.icaddrawingdataset)pfeatureworkspace.opencaddrawingdataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
esri.arcgis地理信息系统 .carto.icadlayer pfeatureclasscontainer = new esri.arcgis地理信息系统 .carto.cadlayerclass();
pfeatureclasscontainer.caddrawingdataset = pfeaturedataset;
//ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
//for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
//{
// ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
// if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
// {
// //如果是注记,则添加注记层
// pfeaturelayer = (esri.arcgis地理信息系统 .carto.featurelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
// }
// else//如果是点、线、面,则添加要素层
// {
// pfeaturelayer = (esri.arcgis地理信息系统 .carto.featurelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
// pfeaturelayer.name = pfeatureclass.aliasname;
// }
//}
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
//if (pfeaturelayer != null)
//{
map.addlayer(pfeatureclasscontainer);
// //map.movelayer(pfeaturelayer, map.layercount - 1);
//}
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}
实验2
public static string addcadlayer2(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
// 增加图层
esri.arcgis地理信息系统 .carto.ifeaturelayer pfeaturelayer = null;
//ifeaturelayer pfeaturelayer;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
//pworkspacefactory = new cadworkspacefactoryclass();
//pworkspacefactory = new pworkspacefactory();
ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
ifeaturedataset pfeaturedataset = (ifeaturedataset)pfeatureworkspace.openfeaturedataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 3; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
//pfeaturelayer = new cadannotationlayerclass();
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
esri.arcgis地理信息系统 .carto.igeofeaturelayer iglayer = (esri.arcgis地理信息系统 .carto.igeofeaturelayer)pfeaturelayer;
esri.arcgis地理信息系统 .carto.isimplerenderer isr = (esri.arcgis地理信息系统 .carto.isimplerenderer)mapcontext.createobject("esricarto.simplerenderer");
esri.arcgis地理信息系统 .display.irgbcolor irgbc = (esri.arcgis地理信息系统 .display.irgbcolor)mapcontext.createobject("esridisplay.rgbcolor");
irgbc.red = 255;
irgbc.green = 0;
irgbc.blue = 0;
esri.arcgis地理信息系统 .geometry.esrigeometrytype featype = pfeaturelayer.featureclass.shapetype;
if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypoint)
{
esri.arcgis地理信息系统 .display.isimplemarkersymbol ifs = (esri.arcgis地理信息系统 .display.isimplemarkersymbol)mapcontext.createobject("esridisplay.simplemarkersymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypolyline)
{
esri.arcgis地理信息系统 .display.isimplelinesymbol ifs = (esri.arcgis地理信息系统 .display.isimplelinesymbol)mapcontext.createobject("esridisplay.simplelinesymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else if (featype == esri.arcgis地理信息系统 .geometry.esrigeometrytype.esrigeometrypolygon)
{
esri.arcgis地理信息系统 .display.isimplefillsymbol ifs = (esri.arcgis地理信息系统 .display.isimplefillsymbol)mapcontext.createobject("esridisplay.simplefillsymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
}
else
{
esri.arcgis地理信息系统 .display.isimplelinesymbol ifs = (esri.arcgis地理信息系统 .display.isimplelinesymbol)mapcontext.createobject("esridisplay.simplelinesymbol");
ifs.color = (esri.arcgis地理信息系统 .display.icolor)irgbc;
isr.symbol = (esri.arcgis地理信息系统 .display.isymbol)ifs;
//throw new exception("图层类型不确定!");
}
iglayer.renderer = (esri.arcgis地理信息系统 .carto.ifeaturerenderer)isr;
//imapserver ms = (imapserver)in_mapcontext.serverobject;
//imapserverobjects2 mso = (imapserverobjects2)ms;
//string mapname = ms.defaultmapname;
//imap map = mso.get_map(mapname);
//map.addlayer(pfeaturelayer);
//mso.refreshserverobjects();
}
}
从上下文对象中得到服务器对象
//imapserver ms = (imapserver)mapcontext.serverobject;
//imapserverinfo mapinfo = ms.getserverinfo(ms.defaultmapname);
//imapdescription newmapdesc = mapinfo.defaultmapdescription;
释放服务器上下文对象
//mapcontext.releasecontext();
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
if (pfeaturelayer != null)
{
map.addlayer(pfeaturelayer);
//移动层到底层
//map.movelayer(pfeaturelayer, map.layercount - 1);
}
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}
最终调试正确代码:
public static string addcadlayer(map map1, toc toc)
{
// 得到服务器上下文对象
mapfunctionality agsmapfunctionlity = map1.getfunctionality(1) as mapfunctionality;
mapresourcelocal localmapresource = (mapresourcelocal)agsmapfunctionlity.resource;
esri.arcgis地理信息系统 .server.iservercontext mapcontext = localmapresource.servercontextinfo.servercontext;
// 增加图层
esri.arcgis地理信息系统 .carto.ifeaturelayer pfeaturelayer = null;
//打开cad数据集
iworkspacefactory factory = (iworkspacefactory)mapcontext.createobject("esridatasourcesfile.cadworkspacefactory");
ifeatureworkspace pfeatureworkspace = (ifeatureworkspace)factory.openfromfile(@"c:\inetpub\wwwroot\northamerica", 0);
//打开一个要素集
ifeaturedataset pfeaturedataset = (ifeaturedataset)pfeatureworkspace.openfeaturedataset("new_shapefile_exportcad.dwg");
//ifeaturclasscontainer可以管理ifeaturedataset中的每个要素类
ifeatureclasscontainer pfeatureclasscontainer = (ifeatureclasscontainer)pfeaturedataset;
//对cad文件中的要素进行遍历处理
for (int i = 0; i < pfeatureclasscontainer.classcount - 1; i++)
{
ifeatureclass pfeatureclass = pfeatureclasscontainer.get_class(i);
if (pfeatureclass.featuretype == esrifeaturetype.esriftannotation)
{
//如果是注记,则添加注记层
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadannotationlayerclass");
}
else//如果是点、线、面,则添加要素层
{
pfeaturelayer = (esri.arcgis地理信息系统 .carto.ifeaturelayer)mapcontext.createobject("esricarto.cadfeaturelayer");
pfeaturelayer.name = pfeatureclass.aliasname;
pfeaturelayer.featureclass = pfeatureclass;
esri.arcgis地理信息系统 .carto.imapserverobjects mapserverobjects = localmapresource.mapserver as esri.arcgis地理信息系统 .carto.imapserverobjects;
esri.arcgis地理信息系统 .carto.imap map = mapserverobjects.get_map(localmapresource.dataframe) as esri.arcgis地理信息系统 .carto.imap;
map.addlayer(pfeaturelayer);
//刷新服务器对象,响应添加图层
localmapresource.refreshserverobjects();
}
}
//toc控件刷新
toc.refresh();
map1.callbackresults.copyfrom(toc.callbackresults);
map1.refresh();
return map1.callbackresults.tostring();
}