Пример #1
0
        public bool addFeatureByStn(string routeId, string featureType, string description, double stn)
        {
            Enbridge.LinearReferencing.ContLineLocatorSQL loc = new Enbridge.LinearReferencing.ContLineLocatorSQL(routeId);

            double mp, meas, X, Y, Z;
            mp = loc.getMPFromStn(stn, out meas, out X, out Y, out Z);
            string stnSeriesId = loc.getLocation(X, Y);

            this.pendingFeaturesList.Add(new PointFeat(routeId, stnSeriesId, stn, mp, featureType, Y, X, description, Z));
            return true;
        }
        /// <summary>
        /// Georeference the plan
        /// </summary>
        /// <param name="processHelper">reference to persistant arcobjects</param>
        public void georefDrawing(DrawingProcessorHelper processHelper)
        {
            //Locate the start and end match points by stationing
            Enbridge.LinearReferencing.ContLineLocatorSQL locator = new Enbridge.LinearReferencing.ContLineLocatorSQL(this.LLId);
            double startX, startY, startZ, endX, endY, endZ, meas;
            locator.getMPFromStn(this.MatchStartStn, out meas, out startX, out startY, out startZ);
            locator.getMPFromStn(this.MatchEndStn, out meas, out endX, out endY, out endZ);

            //convert long lat coordinates to web mercator
            double startMercX, startMercY, endMercX, endMercY;
            Enbridge.Utilities.ProjectionConversion.toWebMercator(startX, startY, out startMercX, out startMercY);
            Enbridge.Utilities.ProjectionConversion.toWebMercator(endX, endY, out endMercX, out endMercY);

            //dictionary to hold the mercator xy values
            mercCoords = new Dictionary<string, double>() { { "startMercX", startMercX }, { "startMercY", startMercY }, { "endMercX", endMercX }, { "endMercY", endMercY } };

            //define the projection of the plan to 3857
            processHelper.defineProj.in_dataset = pngPlanPath;
            processHelper.gp.Execute(processHelper.defineProj, null);

            //open the raster workspace
            processHelper.rastWorkspace =
                (ESRI.ArcGIS.DataSourcesRaster.IRasterWorkspace)processHelper.workspaceFact.OpenFromFile(Path.GetDirectoryName(pngPlanPath), 0);

            //open the raster dataset
            processHelper.rasDataset = processHelper.rastWorkspace.OpenRasterDataset(Path.GetFileName(pngPlanPath));
            //open the raster data
            processHelper.rast = processHelper.rasDataset.CreateDefaultRaster();

            //Set location of image source points
            ESRI.ArcGIS.Geometry.IPoint sourcePoint1 = new ESRI.ArcGIS.Geometry.Point();
            sourcePoint1.X = planCoords["X1"];
            sourcePoint1.Y = planCoords["Y1"];
            processHelper.sourcePoints.UpdatePoint(0, sourcePoint1);
            ESRI.ArcGIS.Geometry.IPoint sourcePoint2 = new ESRI.ArcGIS.Geometry.Point();
            sourcePoint2.X = planCoords["X2"];
            sourcePoint2.Y = planCoords["Y2"];
            processHelper.sourcePoints.UpdatePoint(1, sourcePoint2);

            //Set location of target points, that of the stationing match locations
            ESRI.ArcGIS.Geometry.IPoint targetPoint1 = new ESRI.ArcGIS.Geometry.Point();
            targetPoint1.X = mercCoords["startMercX"];
            targetPoint1.Y = mercCoords["startMercY"];
            processHelper.targetPoints.UpdatePoint(0, targetPoint1);
            ESRI.ArcGIS.Geometry.IPoint targetPoint2 = new ESRI.ArcGIS.Geometry.Point();
            targetPoint2.X = mercCoords["endMercX"];
            targetPoint2.Y = mercCoords["endMercY"];
            processHelper.targetPoints.UpdatePoint(1, targetPoint2);

            //complete the georeferencing
            processHelper.rasterPropc.TwoPointsAdjust(processHelper.sourcePoints, processHelper.targetPoints, processHelper.rast);
            //save the georeferencing to disk
            processHelper.rasterPropc.Register(processHelper.rast);
        }