logo资料库

AE10.1最短路径算法+授权问题解决方案.docx

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
1、利用网络数据集求解最短路径分析的代码: 原始程序如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.NetworkAnalyst; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.DataSourcesFile; using ESRI.ArcGIS.DataSourcesGDB; using ESRI.ArcGIS.Display; namespace test_shortestpath { e) public partial class Form1 : Form { public Form1() { } InitializeComponent(); Intialize(); private void toolStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs { } private void Form1_Load(object sender, EventArgs e) { } private INAContext m_NAContext; private INetworkDataset networkdataset; private IFeatureClass inputFClass; private IFeatureWorkspace pFWorkspace; private IFeatureDataset featuredataset;
private bool networkanalasia = false; private int clickedcount = 0; private IActiveView m_ipactiveview; private IGraphicsContainer pGC; private IMap m_ipmap; private void Intialize() { axMapControl1.ActiveView.Clear(); axMapControl1.ActiveView.Refresh(); /*string path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; int t; for (t = 0; t < path.Length; t++) { } if (path.Substring(t, 17) == "test-shorestpaths") break; string name = path.Substring(0, t - 1) + "\\test-analysis\\shortpath.gdb";*/ string name = "E:\\AGtranning\\test-analysis\\shortpath.gdb"; pFWorkspace = openworkspace(name) as IFeatureWorkspace; networkdataset = opennetworkdataset(pFWorkspace as IWorkspace, "Test_ND", "Test"); m_NAContext = creatsolvercontext(networkdataset); inputFClass = pFWorkspace.OpenFeatureClass("stops"); IFeatureLayer vertex = new FeatureLayerClass(); vertex.FeatureClass = pFWorkspace.OpenFeatureClass("Test_ND_Junctions"); vertex.Name = vertex.FeatureClass.AliasName; axMapControl1.AddLayer(vertex, 0); IFeatureLayer road3; road3= new FeatureLayerClass(); road3.FeatureClass = pFWorkspace.OpenFeatureClass("street"); road3.Name = road3.FeatureClass.AliasName; axMapControl1.AddLayer(road3, 0); axMapControl1.Refresh(); ILayer layer; INetworkLayer networklayer; networklayer = new NetworkLayerClass(); networklayer.NetworkDataset = networkdataset; layer = networklayer as ILayer; layer.Name = "Network Dataset"; axMapControl1.AddLayer(layer, 0); ILayer layer1; INALayer nalayer = m_NAContext.Solver.CreateLayer(m_NAContext); layer1 = nalayer as ILayer;
layer1.Name = m_NAContext.Solver.DisplayName; axMapControl1.AddLayer(layer1, 0); m_ipactiveview = axMapControl1.ActiveView; m_ipmap = m_ipactiveview.FocusMap; pGC = m_ipmap as IGraphicsContainer; } public IWorkspace openworkspace(string strGDBName) { } IWorkspaceFactory workspacefactory = new FileGDBWorkspaceFactoryClass(); IWorkspace workspace = workspacefactory.OpenFromFile(strGDBName,0); return workspace; public INetworkDataset opennetworkdataset(IWorkspace networkdatasetworkspace, System.String networkdatasetname, System.String featuredatasetname) { == null) /*if (networkdataset == null || networkdatasetname == "" || featuredatasetname { }*/ return null; IDatasetContainer3 datasetcontainer3 = null; ESRI.ArcGIS.Geodatabase.IFeatureWorkspace featureWorkspace = networkdatasetworkspace as ESRI.ArcGIS.Geodatabase.IFeatureWorkspace; // Dynamic Cast featuredataset = featureWorkspace.OpenFeatureDataset(featuredatasetname); ESRI.ArcGIS.Geodatabase.IFeatureDatasetExtensionContainer featureDatasetExtensionContainer = featuredataset as ESRI.ArcGIS.Geodatabase.IFeatureDatasetExtensionContainer; // Dynamic Cast ESRI.ArcGIS.Geodatabase.IFeatureDatasetExtension featureDatasetExtension = featureDatasetExtensionContainer.FindExtension(ESRI.ArcGIS.Geodatabase.esriDatasetType. esriDTNetworkDataset); datasetcontainer3 = featureDatasetExtension as ESRI.ArcGIS.Geodatabase.IDatasetContainer3; // Dynamic Cast /* IFeatureWorkspace featureworkspace = networkdatasetworkspace as IFeatureWorkspace; featuredataset = featureworkspace.OpenFeatureDataset(featuredatasetname); IFeatureDatasetExtensionContainer featuredatasetextensioncontainer = featuredataset as IFeatureDatasetExtensionContainer; IFeatureDatasetExtension featuredatasetextension = featuredatasetextensioncontainer.FindExtension(esriDatasetType.esriDTNetworkDataset); datasetcontainer3 = featuredatasetextension as IDatasetContainer3;*/ if (datasetcontainer3 == null) return null; ESRI.ArcGIS.Geodatabase.IDataset dataset =
datasetcontainer3.get_DatasetByName(ESRI.ArcGIS.Geodatabase.esriDatasetType.esriDTNetwo rkDataset, networkdatasetname); return dataset as ESRI.ArcGIS.Geodatabase.INetworkDataset; // Dynamic Cast /* IDataset dataset = datasetcontainer3.get_DatasetByName(esriDatasetType.esriDTNetworkDataset, networkdatasetname); return dataset as INetworkDataset;*/ } public INAContext creatsolvercontext(INetworkDataset networkdataset) { IDENetworkDataset dends = getdenetworkdataset(networkdataset); INASolver nasolver = new NARouteSolver(); INAContextEdit contextedit = nasolver.CreateContext(dends, nasolver.Name) as INAContextEdit; IGPMessages igpmessage = new GPMessagesClass(); contextedit.Bind(networkdataset,igpmessage); return contextedit as INAContext; } public IDENetworkDataset getdenetworkdataset(INetworkDataset networkdataset) { } IDatasetComponent dscomponent; dscomponent = networkdataset as IDatasetComponent; return dscomponent.DataElement as IDENetworkDataset; private void button1_Click(object sender, EventArgs e) { networkanalasia = true; axMapControl1.CurrentTool = null; /*ITable pTable = inputFClass as ITable; pTable.DeleteSearchedRows(null);*/ IFeatureClass routesFC; routesFC = m_NAContext.NAClasses.get_ItemByName("Routes") as IFeatureClass; ITable pTable1 = routesFC as ITable; pTable1.DeleteSearchedRows(null); INAClass stopsNAClass = m_NAContext.NAClasses.get_ItemByName("Stops") as ITable pTable2 = stopsNAClass as ITable; pTable2.DeleteSearchedRows(null); INAClass barriersNAClass = m_NAContext.NAClasses.get_ItemByName("Barriers") INAClass; as INAClass;
ITable pTable3 = barriersNAClass as ITable; pTable3.DeleteSearchedRows(null); IFeatureClass getroute = pFWorkspace.OpenFeatureClass("get_route"); ITable pTable4 = getroute as ITable; pTable4.DeleteSearchedRows(null); pGC.DeleteAllElements(); clickedcount = 0; axMapControl1.Refresh(); } private void axMapConture1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e) { if (networkanalasia == true) { IPointCollection m_ipPoints; IPoint ipNew; m_ipPoints = new MultipointClass(); ipNew = axMapControl1.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); object o = Type.Missing; m_ipPoints.AddPoint(ipNew, ref o,ref o); CreateFeature(inputFClass, m_ipPoints); IElement element; ITextElement textelement = new TextElementClass(); element = textelement as IElement; ITextSymbol textSymbol = new TextSymbolClass(); textSymbol.Color = getrgb(189, 190, 0); textSymbol.Size = 30; textelement.Symbol = textSymbol; clickedcount++; textelement.Text = clickedcount.ToString(); element.Geometry = m_ipactiveview.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y); pGC.AddElement(element, 0); m_ipactiveview.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null); } } private IRgbColor getrgb(int r, int g, int b) { IRgbColor pcolor = new RgbColorClass(); pcolor.Red = r; pcolor.Green = g; pcolor.Blue = b;
return pcolor; } public void CreateFeature(IFeatureClass featureClass, IPointCollection pointcollection) { } if (featureClass.ShapeType != esriGeometryType.esriGeometryPoint) { } return; for (int i = 0; i < pointcollection.PointCount; i++) { } IFeature feature = featureClass.CreateFeature(); feature.Shape = pointcollection.get_Point(i); IRowSubtypes rowSubtypes = (IRowSubtypes)feature; feature.Store(); private void button2_Click(object sender, EventArgs e) { } IGPMessages gpMessages = new GPMessagesClass(); LoadNANetworkLoactions("Stops", inputFClass ,80); INASolver nasolver = m_NAContext.Solver; nasolver.Solve(m_NAContext, gpMessages, null);——问题行!!! ITable pTable_inputFClass = inputFClass as ITable; pTable_inputFClass.DeleteSearchedRows(null); axMapControl1.Refresh(); public void LoadNANetworkLoactions(string strNAClassName, IFeatureClass inputFC, double snapTolerance) { INAClass naClass; INamedSet classes; classes = m_NAContext.NAClasses; naClass = classes.get_ItemByName(strNAClassName) as INAClass; naClass.DeleteAllRows(); INAClassLoader classLoader = new NAClassLoader(); classLoader.Locator = m_NAContext.Locator; if (snapTolerance > 0) { } classLoader.Locator.SnapTolerance = snapTolerance; classLoader.NAClass = naClass; INAClassFieldMap fieldmap;
fieldmap = new NAClassFieldMap(); fieldmap.set_MappedField("FID", "FID"); classLoader.FieldMap = fieldmap; int rowsln = 0; int rowsloadted = 0; IFeatureCursor featurecursor = inputFC.Search(null, true); classLoader.Load((ICursor)featurecursor, null, ref rowsln, ref rowsloadted); ((INAContextEdit)m_NAContext).ContextChanged(); } } } 2、Arcgis engine 在进行最短路径分析时候,代码不存在任何问题,但是在运 行后出现如下问题: AE10.1 软件也没有任何问题,并且权限都有。 解决方案: 重新调整 licence 空间属性中的设置就行。
分享到:
收藏