IDatasetContainer2.CreateDataset fails with ArcObjects 10.1

715
4
07-30-2013 11:49 PM
ArnaudFradin
New Contributor
Hello,

I have a small application used to check and generate network, created with the help of the following tutorial:
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/index.html#/How_to_create_a_network...

It worked just fine with ArcGIS 10, but since I had to upgrade to 10.1, the application fails on this line:
INetworkDataset networkDataset = (INetworkDataset)datasetContainer2.CreateDataset(deDataset);


The error code is "System.Runtime.InteropServices.COMException was unhandled Message=Exception from HRESULT:
0x80042262", which really isn't helpful. Is there something new I could have missed, or some help on what could cause such an error ?
0 Kudos
4 Replies
nicogis
MVP Frequent Contributor
Can you posted more code because I create in 10.1 NA and I haven't problems so I need see your code before of CreateDataset
0 Kudos
ArnaudFradin
New Contributor
I can't really give the whole code here, but maybe send it to you directly if you need. Here is what comes right before the call to CreateDataset:

// Create a new empty data element for a buildable network dataset.
IDENetworkDataset2 dataElementNDS = new DENetworkDatasetClass();
dataElementNDS.Buildable = true;

//Copy the feature dataset's extent and spatial reference to the network dataset data element.
(dataElementNDS as IDEGeoDataset).Extent = (featureDataset as IGeoDataset).Extent;
(dataElementNDS as IDEGeoDataset).SpatialReference = (featureDataset as IGeoDataset).SpatialReference;

// Specify the name of the network dataset.
(dataElementNDS as IDataElement).Name = ndsBaseName;

dataElementNDS.ElevationModel = esriNetworkElevationModel.esriNEMElevationFields;

// Specify Data contained into NDS and connection rules between them
dataElementNDS.Sources = CreateSources(featureDataset as IFeatureClassContainer, timetableShpPattern, paramNDSType, inputDataFolderName, paramHasSubway, paramHasBus, paramHasSubwayTransfert);
dataElementNDS.SupportsTurns = true;

// Define NDS attribute values possibly based on FCs parameters (ex : travel time)
dataElementNDS.Attributes = CreateNDSAttributes(dataElementNDS.Sources, paramNDSType, paramHasSubway, paramHasBus);

dataElementNDS.Directions = CreateDirections();


//Create new DataSet within the Feature Dataset contained into the gdb
INetworkDataset networkDataset = datasetContainer.CreateDataset(dataElementNDS as IDEDataset) as INetworkDataset;



Would you have any idea, even vague, on what could cause such an error, or what I should look for in my code ?
0 Kudos
nicogis
MVP Frequent Contributor
I have made paste of a my function where I create NA in 10.1. There are part of code that you don't need so you remove and try it or compare with your code
private static void CreateNetworkDataset(IFeatureDataset featureDataset, string pathAGSOutput, string pathLogEvaluator)
        {
            IDENetworkDataset2 deNetworkDataset = new DENetworkDatasetClass();
            deNetworkDataset.Buildable = true;
            deNetworkDataset.NetworkType = esriNetworkDatasetType.esriNDTGeodatabase;
            IGeoDataset geoDataset = (IGeoDataset)featureDataset;
            IDEGeoDataset deGeoDataset = (IDEGeoDataset)deNetworkDataset;
            deGeoDataset.Extent = geoDataset.Extent;
            deGeoDataset.SpatialReference = geoDataset.SpatialReference;
            IDataElement dataElement = (IDataElement)deNetworkDataset;
            dataElement.Name = "NetworkBusStop_ND";
            deNetworkDataset.ElevationModel = esriNetworkElevationModel.esriNEMNone;
            IArray sourceArray = new ArrayClass();
            IEdgeFeatureSource edgeFeatureSourceStopToStop = new EdgeFeatureSourceClass();
            INetworkSource networkSourceStopToStop = (INetworkSource)edgeFeatureSourceStopToStop;
            networkSourceStopToStop.Name = "StopToStop";
            networkSourceStopToStop.ElementType = esriNetworkElementType.esriNETEdge;
            edgeFeatureSourceStopToStop.UsesSubtypes = false;
            edgeFeatureSourceStopToStop.ClassConnectivityPolicy = esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;
            edgeFeatureSourceStopToStop.ClassConnectivityGroup = 3;
            sourceArray.Add(networkSourceStopToStop);
            IEdgeFeatureSource edgeFeatureSourceConnectorsStopsStreets = new EdgeFeatureSourceClass();
            INetworkSource networkSourceConnectorsStopsStreets = (INetworkSource)edgeFeatureSourceConnectorsStopsStreets;
            networkSourceConnectorsStopsStreets.Name = "ConnectorsStopsStreets";
            networkSourceConnectorsStopsStreets.ElementType = esriNetworkElementType.esriNETEdge;
            edgeFeatureSourceConnectorsStopsStreets.UsesSubtypes = false;
            edgeFeatureSourceConnectorsStopsStreets.ClassConnectivityPolicy = esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;
            edgeFeatureSourceConnectorsStopsStreets.ClassConnectivityGroup = 2;
            sourceArray.Add(networkSourceConnectorsStopsStreets);
            IEdgeFeatureSource edgeFeatureSourceStreets = new EdgeFeatureSourceClass();
            INetworkSource networkSourceStreets = (INetworkSource)edgeFeatureSourceStreets;
            networkSourceStreets.Name = "Streets";
            networkSourceStreets.ElementType = esriNetworkElementType.esriNETEdge;
            edgeFeatureSourceStreets.UsesSubtypes = false;
            edgeFeatureSourceStreets.ClassConnectivityPolicy = esriNetworkEdgeConnectivityPolicy.esriNECPEndVertex;
            edgeFeatureSourceStreets.ClassConnectivityGroup = 1;
            sourceArray.Add(networkSourceStreets);
            IJunctionFeatureSource junctionFeatureSourceStopBus = new JunctionFeatureSourceClass();
            INetworkSource networkSourceStopBus = (INetworkSource)junctionFeatureSourceStopBus;
            networkSourceStopBus.Name = "StopBus";
            networkSourceStopBus.ElementType = esriNetworkElementType.esriNETJunction;
            junctionFeatureSourceStopBus.UsesSubtypes = false;
            junctionFeatureSourceStopBus.RemoveAllClassConnectivityGroups();
            junctionFeatureSourceStopBus.AddClassConnectivityGroup(2);
            junctionFeatureSourceStopBus.AddClassConnectivityGroup(3);
            junctionFeatureSourceStopBus.ClassConnectivityPolicy = esriNetworkJunctionConnectivityPolicy.esriNJCPHonor;
            sourceArray.Add(networkSourceStopBus);
            IJunctionFeatureSource junctionFeatureSourceStopsSnappedStreets = new JunctionFeatureSourceClass();
            INetworkSource networkSourceStopsSnappedStreets = (INetworkSource)junctionFeatureSourceStopsSnappedStreets;
            networkSourceStopsSnappedStreets.Name = "StopsSnappedStreets";
            networkSourceStopsSnappedStreets.ElementType = esriNetworkElementType.esriNETJunction;
            junctionFeatureSourceStopsSnappedStreets.UsesSubtypes = false;
            junctionFeatureSourceStopsSnappedStreets.RemoveAllClassConnectivityGroups();
            junctionFeatureSourceStopsSnappedStreets.AddClassConnectivityGroup(1);
            junctionFeatureSourceStopsSnappedStreets.AddClassConnectivityGroup(2);
            junctionFeatureSourceStopsSnappedStreets.ClassConnectivityPolicy = esriNetworkJunctionConnectivityPolicy.esriNJCPOverride;
            sourceArray.Add(networkSourceStopsSnappedStreets);

            deNetworkDataset.SupportsTurns = false;
            deNetworkDataset.Sources = sourceArray;

            //cost attribute
            IEvaluatedNetworkAttribute evaluatedNetworkAttributeSeconds = new EvaluatedNetworkAttributeClass();
            INetworkAttribute2 networkAttributeSeconds = (INetworkAttribute2)evaluatedNetworkAttributeSeconds;
            networkAttributeSeconds.Name = "Seconds";
            networkAttributeSeconds.UsageType = esriNetworkAttributeUsageType.esriNAUTCost;
            networkAttributeSeconds.DataType = esriNetworkAttributeDataType.esriNADTDouble;
            networkAttributeSeconds.Units = esriNetworkAttributeUnits.esriNAUSeconds;
            networkAttributeSeconds.UseByDefault = true;

            DepartureTimeEvaluator.DepartureTimeEvaluator departureTimeEvaluator = new DepartureTimeEvaluator.DepartureTimeEvaluator();

            IPropertySet propertySet = new PropertySet();
            propertySet.SetProperty(DepartureTimeEvaluator.DepartureTimeEvaluator.PathArcGisServerOutput, pathAGSOutput);
            propertySet.SetProperty(DepartureTimeEvaluator.DepartureTimeEvaluator.PathLog, pathLogEvaluator);
            
            departureTimeEvaluator.Data = propertySet;

            INetworkConstantEvaluator netConstantAgainstDigitizedEvaluator = new NetworkConstantEvaluatorClass();
            netConstantAgainstDigitizedEvaluator.ConstantValue = -1;

            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceStopToStop, esriNetworkEdgeDirection.esriNEDAlongDigitized, departureTimeEvaluator);
            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceStopToStop, esriNetworkEdgeDirection.esriNEDAgainstDigitized, (INetworkEvaluator)netConstantAgainstDigitizedEvaluator);

            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceConnectorsStopsStreets, esriNetworkEdgeDirection.esriNEDAlongDigitized, departureTimeEvaluator);
            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceConnectorsStopsStreets, esriNetworkEdgeDirection.esriNEDAgainstDigitized, departureTimeEvaluator);

            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceStreets, esriNetworkEdgeDirection.esriNEDAlongDigitized, departureTimeEvaluator);
            evaluatedNetworkAttributeSeconds.set_Evaluator(networkSourceStreets, esriNetworkEdgeDirection.esriNEDAgainstDigitized, departureTimeEvaluator);
            INetworkConstantEvaluator netConstantEvaluator = new NetworkConstantEvaluatorClass();
            netConstantEvaluator.ConstantValue = 0;

            INetworkEvaluator netConstantEvaluatorZero = netConstantEvaluator as INetworkEvaluator;

            evaluatedNetworkAttributeSeconds.set_DefaultEvaluator(esriNetworkElementType.esriNETEdge, netConstantEvaluatorZero);
            evaluatedNetworkAttributeSeconds.set_DefaultEvaluator(esriNetworkElementType.esriNETJunction, netConstantEvaluatorZero);

            INetworkAttributeParameter2 networkAttributeParameterUseDates = new NetworkAttributeParameterClass();
            networkAttributeParameterUseDates.Name = "Use Dates";
            networkAttributeParameterUseDates.ParameterUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTGeneral;
            networkAttributeParameterUseDates.DefaultValue = false;
            networkAttributeParameterUseDates.VarType = 11; // bool

            INetworkAttributeParameter2 networkAttributeParameterPedestrianSpeed = new NetworkAttributeParameterClass();
            networkAttributeParameterPedestrianSpeed.Name = "Pedestrian speed";
            networkAttributeParameterPedestrianSpeed.ParameterUsageType = esriNetworkAttributeParameterUsageType.esriNAPUTGeneral;
            networkAttributeParameterPedestrianSpeed.DefaultValue = 4.86; // Km/h
            networkAttributeParameterPedestrianSpeed.VarType = 5; //double

            IArray parameterArray = new ArrayClass();
            parameterArray.Add(networkAttributeParameterUseDates);
            parameterArray.Add(networkAttributeParameterPedestrianSpeed);
            networkAttributeSeconds.Parameters = parameterArray; 

            

            IArray attributeArray = new ArrayClass();
            attributeArray.Add(evaluatedNetworkAttributeSeconds);

            deNetworkDataset.Attributes = attributeArray;

            IFeatureDatasetExtensionContainer featureDatasetExtensionContainer = (IFeatureDatasetExtensionContainer)featureDataset;

            IFeatureDatasetExtension featureDatasetExtension = featureDatasetExtensionContainer.FindExtension(esriDatasetType.esriDTNetworkDataset);

            IDatasetContainer3 datasetContainer2 = (IDatasetContainer3)featureDatasetExtension;

            IDEDataset deDataset = (IDEDataset)deNetworkDataset;
            INetworkDataset2 networkDataset = (INetworkDataset2)datasetContainer2.CreateDataset(deDataset);

            System.Console.WriteLine("Build network dataset");
            INetworkBuild networkBuild = (INetworkBuild)networkDataset;

            networkBuild.BuildNetwork(geoDataset.Extent);

        }
0 Kudos
ArnaudFradin
New Contributor
Thank you again for your answers. The issue was finally solved and it had nothing to do with this particular function, the origin was a database insertion that failed without error message. As a result, the database used with our solver wasn't complete like expected and the CreateDataset failed.
0 Kudos