阅读:3726回复:8
[求助]那位知道在AE中如何识别TIN,Grid等要素集的文件夹类型?
<P>那位大侠知道在AE中如何识别TIN,Grid等要素集的文件夹类型?我知道在AO中可以直接通过IGxObjectFilter 来判断,但是在AE中如何判别呢?</P>
|
|
1楼#
发布于:2005-09-09 23:24
<P>'‖=================================================<BR>'‖功能:打开一个raster图层<BR>'‖参数:RL为文件绝对路径<BR>'‖输出:<BR>'‖=================================================</P>
<P>Public Function AddrasterLayer(RL As String)<BR> Dim pRasterLayer As IRasterLayer<BR> Set pRasterLayer = New RasterLayer<BR> pRasterLayer.CreateFromFilePath RL<BR> frmMap.map1.AddLayer pRasterLayer<BR> Set pRasterLayer = Nothing<BR>End Function</P> |
|
|
2楼#
发布于:2005-09-10 09:59
<P>楼主去看这个文件dbUtil.bas这个文件,在帮助力搜索就可以找到</P>
|
|
3楼#
发布于:2005-09-10 10:00
<P>Public Function LocationSupportsRasters(sContainer As String) As Boolean<BR> On Error GoTo EH<BR> Dim pWsFact As IWorkspaceFactory<BR> Dim pRasWS As IRasterWorkspace<BR> <BR> If (sContainer <> "") Then<BR> Set pWsFact = New RasterWorkspaceFactory<BR> Set pRasWS = pWsFact.OpenFromFile(sContainer, 0)<BR> LocationSupportsRasters = (Not pRasWS Is Nothing)<BR> Else<BR> LocationSupportsRasters = False<BR> End If<BR> <BR> ' this is faster:<BR> 'LocationSupportsRasters = ((Not IsCoverage(sContainer)) And (Not LocationSupportsAccess(sContainer)) And (Not LocationSupportsSDE(sContainer)))<BR> <BR> Exit Function<BR>EH:<BR> LocationSupportsRasters = False<BR>End Function</P>
<P>Public Function LocationSupportsTins(sContainer As String) As Boolean<BR> On Error GoTo EH<BR> Dim pWsFact As IWorkspaceFactory<BR> Dim pTinWS As ITinWorkspace<BR> <BR> If (sContainer <> "") Then<BR> Set pWsFact = New TinWorkspaceFactory<BR> Set pTinWS = pWsFact.OpenFromFile(sContainer, 0)<BR> LocationSupportsTins = (Not pTinWS Is Nothing)<BR> Else<BR> LocationSupportsTins = False<BR> End If<BR> <BR> 'LocationSupportsTins = LocationSupportsShapefiles(sContainer) ' TODO - use this instead because of CQ00118798<BR> <BR> ' this is faster<BR> ' LocationSupportsTins = ((Not IsCoverage(sContainer)) And (Not LocationSupportsAccess(sContainer)) And (Not LocationSupportsSDE(sContainer)))<BR> <BR> Exit Function<BR>EH:<BR> LocationSupportsTins = False<BR>End Function</P> <P>' Returns true if container specifies either SDE workspace or dataset<BR>Public Function LocationSupportsSDE(sContainer As String) As Boolean<BR> On Error GoTo EH</P> <P> LocationSupportsSDE = (InStr(sContainer, "Database") = 1) ' as long as it has reference to database connection<BR> <BR> Exit Function<BR>EH:<BR> LocationSupportsSDE = False<BR>End Function</P> <P>Public Function LocationSupportsShapefiles(sContainer As String) As Boolean<BR> On Error GoTo EH<BR> Dim pWsFact As IWorkspaceFactory<BR> Dim pFeatWS As IFeatureWorkspace<BR> <BR> If (sContainer <> "") Then<BR> Set pWsFact = New ShapefileWorkspaceFactory<BR> Set pFeatWS = pWsFact.OpenFromFile(sContainer, 0)<BR> LocationSupportsShapefiles = (Not pFeatWS Is Nothing)<BR> Else<BR> LocationSupportsShapefiles = False<BR> End If<BR> <BR> ' this is faster<BR> 'LocationSupportsShapefiles = (Not IsCoverage(sContainer)) And (Not (LocationSupportsAccess(sContainer)) And (Not LocationSupportsSDE(sContainer)))<BR> <BR> Exit Function<BR>EH:<BR> LocationSupportsShapefiles = False<BR>End Function</P> <P><BR>Public Function IsCoverage(sContainer) As Boolean<BR> On Error GoTo EH<BR> Dim fs As FileSystemObject<BR> Set fs = New FileSystemObject<BR> Dim sDir As String<BR> sDir = fs.GetParentFolderName(sContainer)<BR> Dim sName As String<BR> sName = fs.GetFileName(sContainer)<BR> Dim pWSF As IWorkspaceFactory<BR> Set pWSF = New ArcInfoWorkspaceFactory<BR> Dim pWs As IFeatureWorkspace<BR> Set pWs = pWSF.OpenFromFile(sDir, 0)<BR> Dim pDS As IFeatureDataset<BR> Set pDS = pWs.OpenFeatureDataset(sName)<BR> IsCoverage = (Not pDS Is Nothing)<BR> Exit Function<BR>EH:<BR> Resume Next<BR>End Function</P> |
|
4楼#
发布于:2005-09-10 10:01
Grid是属于Rasters的
|
|
5楼#
发布于:2005-09-10 18:04
<P>先谢谢了各位了 我试一下!</P><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em04.gif" />
|
|
6楼#
发布于:2005-09-11 09:04
<P> 呵呵 首先感谢各位的参与,可能是我帖子的主题有点不对,以至于各位没有明白我的意思!</P>
<P> gsl1982,你的方法是用于区别普通文件夹和各个要素文件夹,适合于在添加数据对文件夹实行判断,但是 对于在一定环境下添加Tin Grid 等Raster 数据就无能为力了,GIS的方法 对于添加单个的影像或图片是适用的 ,但是对于添加含有多个文件的要素文件夹,诸如TIN grid就不行了!呵呵 当然这仅仅是我个人的一点浅陋的看法,如果有什么问题,欢迎大家批评指正,共同交流 顺便可以向大家学习学习!</P> <P> 我认为 添加这样数据的根本途径是如何将一个要素文件夹看作一个文件 ,操作这个文件夹像操作文件一样,我尝试过用文件夹中单个文件(扩展名为ADF),但是 在m_Prws = m_Prwsf.OpenFromFile(m_pdir, 0)没有报错,但是提示自动化错误!</P> <P> 如果那位还有什么好的建议和意见,或者已经实现了的话,可否给点帮助,欢迎大家交流,再次表示感谢! <br>Private Sub Command2_Click()<br>Dim m_pdir As String<br>Dim m_Pname As String<br>m_pdir = "e:\data\tin"<br>'"e:\data\tin"是一个tin要素文件夹<br>m_Pname = "tin"<br>Dim m_Prwsf As IWorkspaceFactory<br>m_Prwsf = New tinWorkspaceFactory<br>Dim m_Prws As IRasterWorkspace<br>m_Prws = m_Prwsf.OpenFromFile(m_pdir, 0)<br>Dim m_Prds As IRasterDataset<br>m_Prds = New RasterDataset<br>m_Prds = m_Prws.OpenRasterDataset(m_Pname)<br>Dim pTinLayer As ITinLayer<br>Set pTinLayer = New TinLayer<br>Set pTinLayer.Dataset = pGxObject.Dataset<br>MapControl.AddLayer pFLayer<br>End Sub<br></P> [此贴子已经被作者于2005-9-11 9:46:04编辑过]
|
|
7楼#
发布于:2005-09-13 16:35
<P>Dim m_Prws As IRasterWorkspace</P>
<P>tin可以看作是栅格数据吗?</P> |
|
8楼#
发布于:2006-09-12 10:55
<P> Dim pWSF As IWorkspaceFactory = New TinWorkspaceFactoryClass<BR> Dim pWS As IWorkspace = pWSF.OpenFromFile(sPath, 0)<BR> If Not pWS Is Nothing Then<BR> Dim names As IEnumDatasetName = pWS.DatasetNames(esriDatasetType.esriDTTin)<BR> Names.Reset()<BR> Dim name As IDatasetName<BR> name = names.Next<BR> While Not name Is Nothing </P>
<P> ITin tin = pWS .OpenTin(name.Name);<BR> //Layer<BR> ILayer lyr= new TinLayerClass();<BR> ILayer lyr3D = new TinLayerClass();<BR> ((ITinLayer)lyr).Dataset = tin;<BR> ((ITinLayer)lyr3D).Dataset = tin;<BR>this.axmapcontrol1.addlayer(lyr,0)</P> <P>过程就是这样了,代码你得改改</P> |
|