public void TestXYResolution()
        {
            // Map layer.
            IMap map = (ArcMap.Application.Document as IMxDocument).FocusMap;

            // Map spatial reference and domain extent values.
            ISpatialReference mapSpatialReference = map.SpatialReference as ISpatialReference;
            double            mapXMin1, mapXMax1, mapYMin1, mapYMax1;

            mapSpatialReference.GetDomain(out mapXMin1, out mapXMax1, out mapYMin1, out mapYMax1);

            // Map resolution
            ISpatialReferenceResolution mapSpatialReferenceResolution = mapSpatialReference as ISpatialReferenceResolution;
            double mapResolution = mapSpatialReferenceResolution.XYResolution[false];

            // Get feature class for map layers
            IEnumLayer    enumLayer = map.Layers;
            ILayer        layer = enumLayer.Next();
            IFeatureLayer featureLayer = layer as IFeatureLayer;
            IFeatureClass featureClass = featureLayer.FeatureClass;
            IGeoDataset   geoDataset = featureClass as IGeoDataset;

            // Feature class spatial reference and domain extent values.
            ISpatialReference datasetSpatialReference = geoDataset.SpatialReference as ISpatialReference;

            double fClassXMin, fClassXMax, fClassYMin, fClassYMax;

            datasetSpatialReference.GetDomain(out fClassXMin, out fClassXMax, out fClassYMin, out fClassYMax);

            // Feature class resolution
            ISpatialReferenceResolution datasetSRResolution = datasetSpatialReference as ISpatialReferenceResolution;
            double datasetResolution = datasetSRResolution.XYResolution[false];

            // Set map spatial reference domain extent to the feature class domain extent values
            mapSpatialReference.SetDomain(fClassXMin, fClassXMax, fClassYMin, fClassYMax);
            double mapXMin2, mapXMax2, mapYMin2, mapYMax2;

            mapSpatialReference.GetDomain(out mapXMin2, out mapXMax2, out mapYMin2, out mapYMax2);

            // New map resolution
            mapSpatialReferenceResolution = mapSpatialReference as ISpatialReferenceResolution;
            double mapResolution2 = mapSpatialReferenceResolution.XYResolution[false];

            // Show results in a message box.
            MessageBox.Show(
                $"Map Resolution Before:  {mapResolution}\n" +
                $"Dataset Resolution: {datasetResolution}\n" +
                $"Map Resolution After:  {mapResolution2}\n" +
                $"Map Domain Before -> Xmin: {mapXMin1}, XMax: {mapXMax1}, YMin: {mapYMin1}, YMax: {mapYMax1}\n" +
                $"Data Domain -> Xmin: {fClassXMin}, XMax: {fClassXMax}, YMin: {fClassYMin}, YMax: {fClassYMax}\n" +
                $"Map Domain After -> Xmin: {mapXMin2}, XMax: {mapXMax2}, YMin: {mapYMin2}, YMax: {mapYMax2}");
        }
 public static void ChangeCoordinateSystem(IGeodatabaseRelease igeodatabaseRelease_0,
                                           ISpatialReference ispatialReference_0, bool bool_0)
 {
     if (ispatialReference_0 != null)
     {
         bool geoDatasetPrecision            = GeodatabaseTools.GetGeoDatasetPrecision(igeodatabaseRelease_0);
         IControlPrecision2 controlPrecision = ispatialReference_0 as IControlPrecision2;
         if (controlPrecision.IsHighPrecision != geoDatasetPrecision)
         {
             controlPrecision.IsHighPrecision = geoDatasetPrecision;
             double num;
             double num2;
             double num3;
             double num4;
             ispatialReference_0.GetDomain(out num, out num2, out num3, out num4);
             if (bool_0)
             {
                 ISpatialReferenceResolution spatialReferenceResolution =
                     ispatialReference_0 as ISpatialReferenceResolution;
                 spatialReferenceResolution.ConstructFromHorizon();
                 spatialReferenceResolution.SetDefaultXYResolution();
                 ISpatialReferenceTolerance spatialReferenceTolerance =
                     ispatialReference_0 as ISpatialReferenceTolerance;
                 spatialReferenceTolerance.SetDefaultXYTolerance();
             }
         }
     }
 }
        /// <summary>
        /// Initializes a new instance of the <see cref="PolylineGraphConnectivity"/> class.
        /// </summary>
        /// <param name="spatialReference"></param>
        /// <param name="areaOfInterest">An optional area of interest which is used to
        /// filter connectivities at points outside the AoI. This can be important if the
        /// node degree must be determined correctly (Example: two of three line features
        /// intersect the AoI and are connected -> the node is incorrectly determined to
        /// have degree 2 because the third line has never been added to the graph.</param>
        public PolylineGraphConnectivity(ISpatialReference spatialReference,
                                         [CanBeNull] IGeometry areaOfInterest = null)
        {
            SpatialReference = spatialReference;
            AreaOfInterest   = areaOfInterest;

            _queryPointFrom = new PointClass {
                SpatialReference = SpatialReference
            };
            _queryPointTo = new PointClass {
                SpatialReference = SpatialReference
            };

            if (spatialReference != null)
            {
                double xMax, yMax;
                spatialReference.GetDomain(out _originX, out xMax, out _originY, out yMax);

                _resolution = SpatialReferenceUtils.GetXyResolution(spatialReference);
            }

            NodeIndexesByNode = new Dictionary <Node, int>();

            EdgeReferences = new List <GdbObjectReference>();

            // Two lists with corresponding indexes: The nodes and the list of connections for each node:
            Nodes       = new List <Node>();
            Connections = new List <List <AdjacentNode> >();

            EdgeInteriorNodesByEdge = new Dictionary <GdbObjectReference, List <int> >();
        }
Exemple #4
0
        private ISpatialReference CloneSpatialReference(ISpatialReference pSrcSpatialReference)
        {
            double xmin, xmax, ymin, ymax;

            pSrcSpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax);
            ISpatialReference pSR = new UnknownCoordinateSystemClass();

            pSR.SetDomain(xmin, xmax, ymin, ymax);
            return(pSR);
        }
Exemple #5
0
        private IEnvelope GetDomain()
        {
            double xMin;
            double yMin;
            double xMax;
            double yMax;

            _spatialReference.GetDomain(out xMin, out xMax, out yMin, out yMax);

            return(GeometryFactory.CreateEnvelope(xMin, yMin, xMax, yMax));
        }
Exemple #6
0
        private static void CanReduceTolerance([NotNull] ISpatialReference spatialReference,
                                               double toleranceFactor,
                                               bool allowResolutionChange)
        {
            var origTolerance  = (ISpatialReferenceTolerance)spatialReference;
            var origResolution = (ISpatialReferenceResolution)spatialReference;

            double xmin;
            double xmax;
            double ymin;
            double ymax;

            spatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax);

            Console.WriteLine(@"Original tolerance: {0}", origTolerance.XYTolerance);
            Console.WriteLine(@"Original resolution: {0}",
                              origResolution.XYResolution[true]);
            Console.WriteLine(@"Original domain: {0} {1} {2} {3}", xmin, ymin, xmax, ymax);

            ISpatialReference reduced = GetReducedToleranceSpatialReference(spatialReference,
                                                                            toleranceFactor);

            var reducedTolerance  = (ISpatialReferenceTolerance)reduced;
            var reducedResolution = (ISpatialReferenceResolution)reduced;

            double xmin2;
            double xmax2;
            double ymin2;
            double ymax2;

            reduced.GetDomain(out xmin2, out xmax2, out ymin2, out ymax2);

            Console.WriteLine(@"Reduced tolerance: {0}", reducedTolerance.XYTolerance);
            Console.WriteLine(@"Reduced resolution: {0}",
                              reducedResolution.XYResolution[true]);
            Console.WriteLine(@"Reduced domain: {0} {1} {2} {3}", xmin2, ymin2, xmax2, ymax2);

            Assert.AreEqual(origTolerance.XYTolerance * toleranceFactor,
                            reducedTolerance.XYTolerance);
            Assert.IsTrue(reducedTolerance.XYToleranceValid ==
                          esriSRToleranceEnum.esriSRToleranceOK);
            Assert.AreEqual(xmin, xmin2);
            Assert.AreEqual(ymin, ymin2);

            if (!allowResolutionChange)
            {
                Assert.AreEqual(origResolution.get_XYResolution(true),
                                reducedResolution.XYResolution[true]);
                Assert.AreEqual(xmax, xmax2);
                Assert.AreEqual(ymax, ymax2);
            }
        }
Exemple #7
0
        private static ISpatialReference GetBoxSpatialReference(
            [NotNull] ISpatialReference sref,
            double xMin, double yMin,
            double xMax, double yMax)
        {
            double domainXMin;
            double domainYMin;
            double domainXMax;
            double domainYMax;

            sref.GetDomain(out domainXMin, out domainXMax,
                           out domainYMin, out domainYMax);
            double xyResolution = SpatialReferenceUtils.GetXyResolution(sref);

            var    outOfBounds = false;
            double epsilon     = xyResolution * 10;

            if (xMin < domainXMin + epsilon)
            {
                domainXMin  = xMin - epsilon;
                outOfBounds = true;
            }

            if (yMin < domainYMin + epsilon)
            {
                domainYMin  = yMin - epsilon;
                outOfBounds = true;
            }

            if (xMax > domainXMax - epsilon)
            {
                domainXMax  = xMax + epsilon;
                outOfBounds = true;
            }

            if (yMax > domainYMax - epsilon)
            {
                domainYMax  = yMax + epsilon;
                outOfBounds = true;
            }

            if (!outOfBounds)
            {
                return(sref);
            }

            var copy = (ISpatialReference)((IClone)sref).Clone();

            // TODO round to resolution --> no odd grid origins
            copy.SetDomain(domainXMin, domainXMax, domainYMin, domainYMax);
            return(copy);
        }
Exemple #8
0
 private bool method_0(IName iname_2, string string_1)
 {
     try
     {
         IDataset          dataset          = iname_2.Open() as IDataset;
         ISpatialReference spatialReference = ((IGeoDataset)dataset).SpatialReference;
         if (spatialReference.HasXYPrecision())
         {
             double num;
             double num2;
             double num3;
             double num4;
             spatialReference.GetDomain(out num, out num2, out num3, out num4);
             new PointClass();
             if (!(spatialReference is IUnknownCoordinateSystem))
             {
                 IEnvelope extent;
                 if (spatialReference is IProjectedCoordinateSystem)
                 {
                     extent = ((IGeoDataset)dataset).Extent;
                     extent.PutCoords(num, num3, num2, num4);
                     extent.Project(this.ispatialReference_0);
                     if (extent.IsEmpty)
                     {
                         return
                             (MessageBox.Show(dataset.Name + "不能向该投影转换,是否继续后续要素类投影变换?", "投影",
                                              MessageBoxButtons.YesNo) == DialogResult.Yes);
                     }
                 }
                 else if (spatialReference is IGeographicCoordinateSystem)
                 {
                     extent = ((IGeoDataset)dataset).Extent;
                     extent.Project(this.ispatialReference_0);
                     if (extent.IsEmpty)
                     {
                         return
                             (MessageBox.Show(dataset.Name + "不能向该投影转换,是否继续后续要素类投影变换?", "投影",
                                              MessageBoxButtons.YesNo) == DialogResult.Yes);
                     }
                 }
             }
         }
         return(true);
     }
     catch (Exception exception)
     {
         MessageBox.Show("无法对" + (iname_2 as IDatasetName).Name + "作变换,请查看错误日志文件!");
         Logger.Current.Error("", exception, "");
     }
     return(false);
 }
Exemple #9
0
        public Node(double x, double y, ISpatialReference spatialReference)
        {
            Assert.ArgumentNotNull(spatialReference, nameof(spatialReference));

            double originX, originY;
            double xMax, yMax;

            spatialReference.GetDomain(out originX, out xMax, out originY, out yMax);

            double scale = 1 / SpatialReferenceUtils.GetXyResolution(spatialReference);

            X = SnapCoordinate(x, originX, scale);
            Y = SnapCoordinate(y, originY, scale);
        }
        public WKSPointZComparer(double xyTolerance, double zTolerance,
                                 [NotNull] ISpatialReference spatialReference)
        {
            double xMin;
            double yMin;
            double zMin;

            double xMax;
            double yMax;
            double zMax;

            spatialReference.GetDomain(out xMin, out xMax, out yMin, out yMax);

            spatialReference.GetZDomain(out zMin, out zMax);

            Initialize(xyTolerance, zTolerance, xMin, yMin, zMin);
        }
Exemple #11
0
        public string GetDomainInfo(ISpatialReference ispatialReference_1)
        {
            double num5;
            double num6;
            string str = "";

            if (ispatialReference_1.HasXYPrecision())
            {
                double num;
                double num2;
                double num3;
                double num4;
                ispatialReference_1.GetDomain(out num, out num2, out num3, out num4);
                str = ((((str + "X/Y Domain: \r\n") + "  Min X:" + num.ToString("#.######") + "\r\n") + "  Min Y:" +
                        num3.ToString("#.######") + "\r\n") + "  Max X:" + num2.ToString("#.######") + "\r\n") +
                      "  Max Y:" + num4.ToString("#.######") + "\r\n";
                num5 = ((num2 - num) > (num4 - num3)) ? (num2 - num) : (num4 - num3);
                num6 = 2147483645.0 / num5;
                str  = str + "  Scale:" + num6.ToString("#.######") + "\r\n";
            }
            if (ispatialReference_1.HasZPrecision())
            {
                double num7;
                double num8;
                str = str + "\r\n";
                ispatialReference_1.GetZDomain(out num7, out num8);
                str = ((str + "Z Domain: \r\n") + "  Min :" + num7.ToString("#.######") + "\r\n") + "  Max :" +
                      num8.ToString("#.######") + "\r\n";
                num5 = num8 - num7;
                num6 = 2147483645.0 / num5;
                str  = str + "  Scale:" + num6.ToString("#.######") + "\r\n";
            }
            if (ispatialReference_1.HasMPrecision())
            {
                double num9;
                double num10;
                str = str + "\r\n";
                ispatialReference_1.GetMDomain(out num9, out num10);
                str = ((str + "M Domain: \r\n") + "  Min :" + num9.ToString("#.######") + "\r\n") + "  Max :" +
                      num10.ToString("#.######") + "\r\n";
                num5 = num10 - num9;
                str  = str + "  Scale:" + ((2147483645.0 / num5)).ToString("#.######") + "\r\n";
            }
            return(str);
        }
        private static string GetXyPrecisionString(
            [NotNull] ISpatialReference spatialReference)
        {
            if (!spatialReference.HasXYPrecision())
            {
                return(LocalizableStrings.QaSchemaSpatialReference_NotDefined);
            }

            double xmin;
            double xmax;
            double ymin;
            double ymax;

            spatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax);

            var    resolution   = (ISpatialReferenceResolution)spatialReference;
            double xyResolution = resolution.get_XYResolution(true);

            return(string.Format(LocalizableStrings.QaSchemaSpatialReference_XYPrecision,
                                 xmin, ymin, xmax, ymax, xyResolution));
        }
        //** 功能描述: 通过一个字段集,创建另外一个字段集,直接添加传入的字段集中的所有字段的话
        //             会产生高版本和低版本不兼容的问题,

        public static IFields GetFieldsByFields(IFields pFields, ref ISpatialReference pDesSpatialReference, Dictionary <string, string> pDicField)
        {
            //pDesSpatialReference = null;
            //pDicField = null;

            int               i                    = 0;
            IField            pField               = default(IField);
            IFieldEdit        pFieldEdit           = default(IFieldEdit);
            IFieldsEdit       pFieldsEdit          = default(IFieldsEdit);
            IField            pCreateField         = default(IField);
            ISpatialReference pOriSpatialReference = default(ISpatialReference);

            IGeometryDef     pGeometryDef     = default(IGeometryDef);
            IGeometryDefEdit pGeometryDefEdit = default(IGeometryDefEdit);
            double           ymin             = 0;
            double           xmin             = 0;
            double           xmax             = 0;
            double           ymax             = 0;
            double           mMin             = 0;
            double           zmin             = 0;
            double           zmax             = 0;
            double           mMax             = 0;
            IEnvelope        pEnvelop         = default(IEnvelope);
            IGeometry        pGeometry        = default(IGeometry);
            IClone           pClone           = default(IClone);
            //标识该字段是否被添加
            bool bIsAddField = false;

            //应该把OID字段添加进去,否则会产生错误
            pFieldsEdit = new FieldsClass();

            for (i = 0; i <= pFields.FieldCount - 1; i++)
            {
                pField = pFields.get_Field(i);

                if (pField.Editable | pField.Type == esriFieldType.esriFieldTypeOID | pField.Type == esriFieldType.esriFieldTypeGlobalID | pField.Type == esriFieldType.esriFieldTypeGUID)
                {
                    pClone       = (IClone)pField;
                    pCreateField = (IField)pClone.Clone();

                    //如果更改字段名称:如果是OID字段的话,即便不在dic中也要进行添加
                    if ((pDicField != null))
                    {
                        if (pDicField.ContainsKey(Strings.Trim(pField.Name)))
                        {
                            bIsAddField = true;
                            //修改字段的名称
                            pFieldEdit        = (IFieldEdit)pCreateField;
                            pFieldEdit.Name_2 = pDicField[Strings.Trim(pField.Name)];

                            //需不需要把别名赋过去,根据需要再看吧,现在看的话应该不要赋过去,因此一般字段名和别名是一样的
                            //如果赋过去的话,显示的是原字段的别名,即不是用户想看到的字段名
                            //pFieldEdit.AliasName = pField.AliasName
                        }
                        else if (pField.Type == esriFieldType.esriFieldTypeOID | pField.Type == esriFieldType.esriFieldTypeGlobalID | pField.Type == esriFieldType.esriFieldTypeGUID)
                        {
                            bIsAddField = true;
                        }
                        else
                        {
                            bIsAddField = false;
                        }
                    }
                    else
                    {
                        bIsAddField = true;
                    }
                    if (pField.Type == esriFieldType.esriFieldTypeGeometry)
                    {
                        pGeometryDef     = pCreateField.GeometryDef;
                        pGeometryDefEdit = (IGeometryDefEdit)pGeometryDef;



                        if ((pDesSpatialReference != null))
                        {
                            pOriSpatialReference = pGeometryDef.SpatialReference;

                            //从原来的空间参考中得到domain
                            if (pOriSpatialReference.HasXYPrecision())
                            {
                                pOriSpatialReference.GetDomain(out xmin, out xmax, out ymin, out ymax);
                            }

                            pEnvelop = new EnvelopeClass();
                            pEnvelop.PutCoords(xmin, ymin, xmax, ymax);
                            pGeometry = pEnvelop;
                            pGeometry.SpatialReference = pOriSpatialReference;
                            pGeometry.Project(pDesSpatialReference);
                            xmax = pEnvelop.XMax;
                            xmin = pEnvelop.XMin;
                            ymax = pEnvelop.YMax;
                            ymin = pEnvelop.YMin;

                            pDesSpatialReference.SetDomain(xmin, xmax, ymin, ymax);

                            if (pOriSpatialReference.HasZPrecision())
                            {
                                pOriSpatialReference.GetZDomain(out zmin, out zmax);
                                pDesSpatialReference.SetZDomain(zmin, zmax);
                            }

                            if (pOriSpatialReference.HasMPrecision())
                            {
                                pOriSpatialReference.GetMDomain(out mMin, out mMax);
                                pDesSpatialReference.SetMDomain(mMin, mMax);
                            }

                            pGeometryDefEdit.SpatialReference_2 = pDesSpatialReference;
                        }
                        //修改grid的大小
                        if (pGeometryDef.GridCount != 0)
                        {
                            if (pGeometryDef.get_GridSize(0) < 100)
                            {
                                pGeometryDefEdit.set_GridSize(0, 100);
                            }
                        }
                        bIsAddField = true;
                    }

                    if (bIsAddField == true)
                    {
                        pFieldsEdit.AddField(pCreateField);
                        bIsAddField = false;
                    }
                }
            }
            return(pFieldsEdit);
        }
Exemple #14
0
 private void btnOK_Click(object sender, EventArgs e)
 {
     if ((this.string_0 != null) && (this.string_0.Length != 0))
     {
         if (this.bool_0)
         {
             MessageBox.Show("输出要素类已存在,请重新指定输出要素类名!");
         }
         else if (this.ispatialReference_0 == null)
         {
             MessageBox.Show("请输入投影坐标系!");
         }
         else if (this.ispatialReference_0 is IGeographicCoordinateSystem)
         {
             MessageBox.Show("请输入投影坐标系!");
         }
         else if (this.ispatialReference_0 is IUnknownCoordinateSystem)
         {
             MessageBox.Show("请输入投影坐标系!");
         }
         else
         {
             double num = 1000.0;
             this.string_0 = System.IO.Path.GetFileName(this.txtOutFeat.Text);
             ISpatialReference spatialReference = ((IGeoDataset)this.idataset_0).SpatialReference;
             (this.ispatialReference_0 as IControlPrecision2).IsHighPrecision =
                 (spatialReference as IControlPrecision2).IsHighPrecision;
             if (spatialReference.HasXYPrecision())
             {
                 double num2;
                 double num3;
                 double num4;
                 double num5;
                 spatialReference.GetDomain(out num2, out num3, out num4, out num5);
                 new PointClass();
                 if (!(spatialReference is IUnknownCoordinateSystem))
                 {
                     IEnvelope extent;
                     if (spatialReference is IProjectedCoordinateSystem)
                     {
                         extent = ((IGeoDataset)this.idataset_0).Extent;
                         extent.PutCoords(num2, num4, num3, num5);
                         extent.Project(this.ispatialReference_0);
                         if (!extent.IsEmpty)
                         {
                             this.ispatialReference_0.SetDomain(extent.XMin, extent.XMax, extent.YMin,
                                                                extent.YMax);
                             num = extent.Width / 2.0;
                         }
                     }
                     else if (spatialReference is IGeographicCoordinateSystem)
                     {
                         extent = ((IGeoDataset)this.idataset_0).Extent;
                         extent.Project(this.ispatialReference_0);
                         if (!extent.IsEmpty)
                         {
                             this.ispatialReference_0.SetDomain(extent.XMin, extent.XMax, extent.YMin,
                                                                extent.YMax);
                             num = extent.Width / 2.0;
                         }
                     }
                 }
             }
             if (spatialReference.HasZPrecision())
             {
                 double num6;
                 double num7;
                 spatialReference.GetZDomain(out num6, out num7);
                 this.ispatialReference_0.SetZDomain(num6, num7);
             }
             if (spatialReference.HasMPrecision())
             {
                 double num8;
                 double num9;
                 spatialReference.GetZDomain(out num8, out num9);
                 this.ispatialReference_0.SetZDomain(num8, num9);
             }
             SpatialReferenctOperator.ChangeCoordinateSystem(this.iworkspace_0 as IGeodatabaseRelease,
                                                             this.ispatialReference_0, false);
             this.progressBar1.Visible = true;
             this.int_2 = this.int_3;
             this.progressBar1.Value = this.int_3;
             SRLibCommonFunc.m_pfrm  = this;
             if (this.idataset_0 is IFeatureClass)
             {
                 SRLibCommonFunc.Project((IFeatureClass)this.idataset_0, this.ispatialReference_0,
                                         this.iworkspace_0, this.string_0, num);
             }
             else if (this.idataset_0 is IFeatureDataset)
             {
                 SRLibCommonFunc.Project((IFeatureDataset)this.idataset_0, this.ispatialReference_0,
                                         this.iworkspace_0, this.string_0);
             }
             this.progressBar1.Visible = false;
             this.string_0             = "";
             this.idataset_0           = null;
             this.iworkspace_0         = null;
             this.txtInputFeat.Text    = "";
             this.txtOutFeat.Text      = "";
         }
     }
 }
Exemple #15
0
        public static void Project(IFeatureClass ifeatureClass_0, ISpatialReference ispatialReference_0,
                                   IWorkspace iworkspace_0, string string_0, double double_0)
        {
            string                str2;
            double                num3;
            double                num4;
            double                num5;
            double                num6;
            IEnumFieldError       error;
            IFields               fields2;
            IWorkspace            workspace = ((IDataset)ifeatureClass_0).Workspace;
            IFeatureDataConverter converter = new FeatureDataConverterClass();
            IWorkspaceName        name      = new WorkspaceNameClass
            {
                ConnectionProperties   = workspace.ConnectionProperties,
                WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString()
            };
            IWorkspaceName name2 = new WorkspaceNameClass();

            new PropertySetClass();
            name2.ConnectionProperties   = iworkspace_0.ConnectionProperties;
            name2.WorkspaceFactoryProgID = iworkspace_0.WorkspaceFactory.GetClassID().Value.ToString();
            IDatasetName name3     = new FeatureClassNameClass();
            string       aliasName = ifeatureClass_0.AliasName;
            int          index     = aliasName.LastIndexOf(".");

            if (index != -1)
            {
                aliasName = aliasName.Substring(index + 1);
            }
            name3.Name          = aliasName;
            name3.WorkspaceName = name;
            IDatasetName name4 = new FeatureClassNameClass
            {
                WorkspaceName = name2
            };
            IFieldChecker checker = new FieldCheckerClass
            {
                ValidateWorkspace = iworkspace_0
            };

            string[] strArray = string_0.Split(new char[] { '.' });
            string_0 = strArray[strArray.Length - 1] + "_Project";
            checker.ValidateTableName(string_0, out str2);
            string str3 = str2;
            int    num2 = 1;

            if ((iworkspace_0.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace) ||
                (iworkspace_0.Type == esriWorkspaceType.esriLocalDatabaseWorkspace))
            {
                while (((IWorkspace2)iworkspace_0).get_NameExists(esriDatasetType.esriDTFeatureClass, str3))
                {
                    str3 = str2 + "_" + num2.ToString();
                    num2++;
                }
            }
            else if (iworkspace_0.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                while (File.Exists(str3 + ".shp"))
                {
                    str3 = str2 + "_" + num2.ToString();
                    num2++;
                }
            }
            name4.Name = str3;
            IFields inputField = new FieldsClass();

            index = ifeatureClass_0.Fields.FindField(ifeatureClass_0.ShapeFieldName);
            IField            field            = ifeatureClass_0.Fields.get_Field(index);
            IGeometryDef      geometryDef      = field.GeometryDef;
            ISpatialReference spatialReference = geometryDef.SpatialReference;

            ispatialReference_0.GetDomain(out num3, out num4, out num5, out num6);
            ((IGeometryDefEdit)geometryDef).GridCount_2 = 1;
            ((IGeometryDefEdit)geometryDef).set_GridSize(0, double_0);
            ((IGeometryDefEdit)geometryDef).SpatialReference_2 = ispatialReference_0;
            ((IFieldEdit)field).GeometryDef_2 = geometryDef;
            for (int i = 0; i < ifeatureClass_0.Fields.FieldCount; i++)
            {
                if (i == index)
                {
                    ((IFieldsEdit)inputField).AddField(field);
                }
                else
                {
                    IField field2 = ifeatureClass_0.Fields.get_Field(i);
                    ((IFieldsEdit)inputField).AddField(field2);
                }
            }
            checker.Validate(inputField, out error, out fields2);
            if (m_pfrm != null)
            {
                m_pfrm.FeatureProgress = converter;
            }
            try
            {
                converter.ConvertFeatureClass((IFeatureClassName)name3, null, null, (IFeatureClassName)name4,
                                              geometryDef, fields2, "", 1000, 0);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }
Exemple #16
0
 private void method_1(IName iname_2, string string_1)
 {
     try
     {
         double            num              = 1000.0;
         IDataset          dataset          = iname_2.Open() as IDataset;
         ISpatialReference spatialReference = ((IGeoDataset)dataset).SpatialReference;
         (this.ispatialReference_0 as IControlPrecision2).IsHighPrecision =
             (spatialReference as IControlPrecision2).IsHighPrecision;
         if (spatialReference.HasXYPrecision())
         {
             double num2;
             double num3;
             double num4;
             double num5;
             spatialReference.GetDomain(out num2, out num3, out num4, out num5);
             new PointClass();
             if (!(spatialReference is IUnknownCoordinateSystem))
             {
                 IEnvelope extent;
                 if (spatialReference is IProjectedCoordinateSystem)
                 {
                     extent = ((IGeoDataset)dataset).Extent;
                     extent.PutCoords(num2, num4, num3, num5);
                     extent.Project(this.ispatialReference_0);
                     if (!extent.IsEmpty)
                     {
                         this.ispatialReference_0.SetDomain(extent.XMin, extent.XMax, extent.YMin, extent.YMax);
                         num = extent.Width / 2.0;
                     }
                 }
                 else if (spatialReference is IGeographicCoordinateSystem)
                 {
                     extent = ((IGeoDataset)dataset).Extent;
                     extent.Project(this.ispatialReference_0);
                     if (!extent.IsEmpty)
                     {
                         this.ispatialReference_0.SetDomain(extent.XMin, extent.XMax, extent.YMin, extent.YMax);
                         num = extent.Width / 2.0;
                     }
                 }
             }
         }
         if (spatialReference.HasZPrecision())
         {
             double num6;
             double num7;
             spatialReference.GetZDomain(out num6, out num7);
             this.ispatialReference_0.SetZDomain(num6, num7);
         }
         if (spatialReference.HasMPrecision())
         {
             double num8;
             double num9;
             spatialReference.GetZDomain(out num8, out num9);
             this.ispatialReference_0.SetZDomain(num8, num9);
         }
         SpatialReferenctOperator.ChangeCoordinateSystem(this.iworkspace_0 as IGeodatabaseRelease,
                                                         this.ispatialReference_0, false);
         this.int_2 = this.int_3;
         this.progressBar1.Value = this.int_3;
         SRLibCommonFunc.m_pfrm  = this;
         if (dataset is IFeatureClass)
         {
             if (this.iname_0 is IFeatureDatasetName)
             {
                 SRLibCommonFunc.Project((IFeatureClass)dataset, this.ispatialReference_0,
                                         this.iname_0 as IFeatureDatasetName, string_1, num);
             }
             else
             {
                 SRLibCommonFunc.Project((IFeatureClass)dataset, this.ispatialReference_0, this.iworkspace_0,
                                         string_1, num);
             }
         }
         else if (dataset is IFeatureDataset)
         {
             SRLibCommonFunc.Project((IFeatureDataset)dataset, this.ispatialReference_0, this.iworkspace_0,
                                     string_1);
         }
         dataset = null;
     }
     catch (Exception exception)
     {
         MessageBox.Show("无法对" + (iname_2 as IDatasetName).Name + "作变换,请查看错误日志文件!");
         Logger.Current.Error("", exception, "");
     }
 }
Exemple #17
0
 public static string FormatSpatialReference(ISpatialReference sr)
 {
     try
     {
         if (sr == null)
         {
             return("");
         }
         StringBuilder builder = new StringBuilder();
         if (sr is UnknownCoordinateSystemClass)
         {
             builder.Append("UnknownCoordinateSystem");
         }
         else
         {
             if (sr.Name == "Unknown")
             {
                 builder.Append("UnknownCoordinateSystem");
             }
             else
             {
                 IGeographicCoordinateSystem system2;
                 if (sr is IProjectedCoordinateSystem)
                 {
                     Exception exception;
                     IProjectedCoordinateSystem system = sr as IProjectedCoordinateSystem;
                     builder.Append("投影坐标系:\n");
                     builder.Append("  Name:").Append(system.Name).Append("\n");
                     builder.Append("  Alias:").Append(system.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system.Remarks).Append("\n");
                     builder.Append("投影:").Append(system.Projection.Name).Append("\n");
                     builder.Append("投影参数:\n");
                     builder.Append("   False_Easting:").Append(system.FalseEasting).Append("\n");
                     builder.Append("   False_Northing:").Append(system.FalseNorthing).Append("\n");
                     builder.Append("   Central_Meridian:").Append(system.get_CentralMeridian(true)).Append("\n");
                     try
                     {
                         builder.Append("   Scale_Factor:").Append(system.ScaleFactor).Append("\n");
                     }
                     catch { }
                     builder.Append("   Latitude_Of_Origin:0\n");
                     builder.Append("Linear Unit:").Append(system.CoordinateUnit.Name).Append("(").Append(system.CoordinateUnit.MetersPerUnit).Append(")\n");
                     builder.Append("Geographic Coordinate System:\n");
                     system2 = system.GeographicCoordinateSystem;
                     builder.Append("  Name:").Append(system2.Name).Append("\n");
                     builder.Append("  Alias:").Append(system2.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system2.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system2.Remarks).Append("\n");
                     builder.Append("  Angular Unit:").Append(system2.CoordinateUnit.Name).Append("(").Append(system2.CoordinateUnit.RadiansPerUnit).Append(")\n");
                     builder.Append("  Prime Meridian:").Append(system2.PrimeMeridian.Name).Append("(").Append(system2.PrimeMeridian.Longitude).Append(")\n");
                     builder.Append("  Datum:").Append(system2.Datum.Name).Append("\n");
                     builder.Append("    Spheroid:").Append(system2.Datum.Spheroid.Name).Append("\n");
                     builder.Append("      Semimajor Axis:").Append(system2.Datum.Spheroid.SemiMajorAxis).Append("\n");
                     builder.Append("      Semiminor Axis:").Append(system2.Datum.Spheroid.SemiMinorAxis).Append("\n");
                     builder.Append("      Inverse Flattening:").Append((double)(1.0 / system2.Datum.Spheroid.Flattening)).Append("\n");
                     builder.Append("X/Y Domain:\n");
                     try
                     {
                         double num  = 0.0;
                         double num2 = 0.0;
                         double num3 = 0.0;
                         double num4 = 0.0;
                         double num5 = 0.0;
                         sr.GetDomain(out num, out num3, out num2, out num4);
                         sr.GetFalseOriginAndUnits(out num, out num2, out num5);
                         builder.Append(" Min X:").Append(num).Append("\n");
                         builder.Append(" Min Y:").Append(num2).Append("\n");
                         builder.Append(" Max X:").Append(num3).Append("\n");
                         builder.Append(" Max Y:").Append(num4).Append("\n");
                         builder.Append(" XYScale:").Append(num5).Append("\n");
                         builder.Append("\n");
                     }
                     catch (Exception exception1)
                     {
                         exception = exception1;
                     }
                     builder.Append("Z Domain:\n");
                     try
                     {
                         double num6;
                         double num7;
                         double num8 = 0.0;
                         sr.GetZDomain(out num6, out num7);
                         sr.GetZFalseOriginAndUnits(out num6, out num8);
                         builder.Append("  Min Z:").Append(num6).Append("\n");
                         builder.Append("  Max Z:").Append(num7).Append("\n");
                         builder.Append("  ZScale:").Append(num8).Append("\n");
                         builder.Append("\n");
                     }
                     catch (Exception exception2)
                     {
                         exception = exception2;
                     }
                     try
                     {
                         double num9;
                         double num10;
                         builder.Append("M Domain:\n");
                         double num11 = 0.0;
                         sr.GetMDomain(out num9, out num10);
                         sr.GetMFalseOriginAndUnits(out num9, out num11);
                         builder.Append("  Min M:").Append(num9).Append("\n");
                         builder.Append("  Max M:").Append(num10).Append("\n");
                         builder.Append("  MScale:").Append(num11).Append("\n");
                     }
                     catch (Exception exception3)
                     {
                         exception = exception3;
                     }
                 }
                 else if (sr is IGeographicCoordinateSystem)
                 {
                     builder.Append("Geographic Coordinate System:\n");
                     system2 = sr as IGeographicCoordinateSystem;
                     builder.Append("  Name:").Append(system2.Name).Append("\n");
                     builder.Append("  Alias:").Append(system2.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system2.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system2.Remarks).Append("\n");
                     builder.Append("  Angular Unit:").Append(system2.CoordinateUnit.Name).Append("(").Append(system2.CoordinateUnit.RadiansPerUnit).Append(")\n");
                     builder.Append("  Prime Meridian:").Append(system2.PrimeMeridian.Name).Append("(").Append(system2.PrimeMeridian.Longitude).Append(")\n");
                     builder.Append("  Datum:").Append(system2.Datum.Name).Append("\n");
                     builder.Append("    Spheroid:").Append(system2.Datum.Spheroid.Name).Append("\n");
                     builder.Append("      Semimajor Axis:").Append(system2.Datum.Spheroid.SemiMajorAxis).Append("\n");
                     builder.Append("      Semiminor Axis:").Append(system2.Datum.Spheroid.SemiMinorAxis).Append("\n");
                     builder.Append("      Inverse Flattening:").Append((double)(1.0 / system2.Datum.Spheroid.Flattening)).Append("\n");
                 }
             }
         }
         return(builder.ToString());
     }
     catch (Exception ex)
     { return(""); }
 }
Exemple #18
0
        /// <summary>
        /// 以原工作空间为模板创建新的工作空间
        /// </summary>
        private void CreatWorkspaceFromOrig()
        {
            WaitForm.SetCaption("正在创建新的工作空间...请稍后");
            IFeatureClassContainer pFcContainer = null;
            IFeatureClass          pFcTemp      = null;
            IFeatureClass          pNewFc       = null;
            ISpatialReference      pSr          = null;
            ISpatialReference      pSrTemp      = null;
            IFields pflds = null;
            double  dblXmin, dblXmax, dblYmin, dblYmax;
            double  dblZmin, dblZmax, dblMmin, dblMmax;

            CreateWorkspaceDomains(m_pOrigWorkspace, m_pDestWorkspace);
            IFeatureWorkspace pFeaWorkspace = m_pDestWorkspace as IFeatureWorkspace;
            IEnumDataset      enumDs        = m_pOrigWorkspace.get_Datasets(esriDatasetType.esriDTAny);
            IDataset          pDs           = enumDs.Next();

            while (pDs != null)
            {
                if (pDs.Type == esriDatasetType.esriDTFeatureDataset)
                {
                    pSr     = new UnknownCoordinateSystemClass();
                    pSrTemp = (pDs as IGeoDataset).SpatialReference;
                    if (pSrTemp.HasXYPrecision())
                    {
                        pSrTemp.GetDomain(out dblXmin, out dblXmax, out dblYmin, out dblYmax);
                        pSr.SetDomain(dblXmin, dblXmax, dblYmin, dblYmax);
                    }
                    if (pSrTemp.HasZPrecision())
                    {
                        pSrTemp.GetZDomain(out dblZmin, out dblZmax);
                        pSr.SetZDomain(dblZmin, dblZmax);
                    }
                    if (pSrTemp.HasMPrecision())
                    {
                        pSrTemp.GetMDomain(out dblMmin, out dblMmax);
                        pSr.SetMDomain(dblMmin, dblMmax);
                    }
                    IFeatureDataset pFeaDs = pFeaWorkspace.CreateFeatureDataset(pDs.Name, pSr);
                    pFcContainer = (IFeatureClassContainer)pDs;
                    if (pFcContainer.ClassCount > 0)
                    {
                        for (int i = 0; i < pFcContainer.ClassCount; i++)
                        {
                            try
                            {
                                pFcTemp = pFcContainer.get_Class(i);
                                pflds   = CommonFunction.GetFieldsFormFeatureClass(pFcTemp);

                                //若为注记
                                if (pFcTemp.FeatureType == esriFeatureType.esriFTAnnotation)
                                {
                                    IFeatureWorkspaceAnno pFWSAno    = pFeaWorkspace as IFeatureWorkspaceAnno;
                                    IAnnoClass            pAnnoClass = pFcTemp.Extension as IAnnoClass;
                                    IGraphicsLayerScale   pGLS       = new GraphicsLayerScaleClass();
                                    pGLS.ReferenceScale = pAnnoClass.ReferenceScale;
                                    pGLS.Units          = pAnnoClass.ReferenceScaleUnits;


                                    pNewFc = pFWSAno.CreateAnnotationClass((pFcTemp as IDataset).Name,
                                                                           pflds, pFcTemp.CLSID, pFcTemp.EXTCLSID, pFcTemp.ShapeFieldName,
                                                                           "", pFeaDs, null, pAnnoClass.AnnoProperties, pGLS, pAnnoClass.SymbolCollection, true);
                                    (pNewFc as IClassSchemaEdit).AlterAliasName(pFcTemp.AliasName);
                                }
                                else//若为地理要素
                                {
                                    try
                                    {
                                        pNewFc = pFeaDs.CreateFeatureClass((pFcTemp as IDataset).Name,
                                                                           pflds, pFcTemp.CLSID, pFcTemp.EXTCLSID, pFcTemp.FeatureType, pFcTemp.ShapeFieldName, null);
                                        if (pFcTemp.AliasName == "图廓线")
                                        {
                                            int n = 0;
                                        }
                                        (pNewFc as IClassSchemaEdit).AlterAliasName(pFcTemp.AliasName);
                                    }
                                    catch (System.Exception ex)
                                    {
                                        System.Console.WriteLine(ex.Message);
                                    }
                                }
                            }
                            catch (System.Exception ex)
                            {
                                System.Console.WriteLine(ex.Message);
                            }
                        }
                    }
                }
                else if (pDs.Type == esriDatasetType.esriDTFeatureClass)
                {
                    pFcTemp = (IFeatureClass)pDs;
                    pflds   = CommonFunction.GetFieldsFormFeatureClass(pFcTemp, pSr);
                    try
                    {
                        pNewFc = pFeaWorkspace.CreateFeatureClass(pDs.Name,
                                                                  pflds,
                                                                  pFcTemp.CLSID,
                                                                  pFcTemp.EXTCLSID,
                                                                  pFcTemp.FeatureType,
                                                                  pFcTemp.ShapeFieldName,
                                                                  null);
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex.Message);
                    }
                }
                else if (pDs.Type == esriDatasetType.esriDTTable)
                {
                    ITable pTable = (ITable)pDs;
                    try
                    {
                        ITable pNewTable = pFeaWorkspace.CreateTable(pDs.Name,
                                                                     pTable.Fields,
                                                                     pTable.CLSID,
                                                                     pTable.EXTCLSID,
                                                                     null);
                    }
                    catch (Exception ex)
                    {
                        System.Console.WriteLine(ex.Message);
                    }
                }
                pDs = enumDs.Next();
            }
        }
Exemple #19
0
        public static void Project(IFeatureClass ifeatureClass_0, ISpatialReference ispatialReference_0,
                                   IFeatureDatasetName ifeatureDatasetName_0, string string_0, double double_0)
        {
            IWorkspace            workspace            = ((IDataset)ifeatureClass_0).Workspace;
            IFeatureDataConverter featureDataConverter = new FeatureDataConverter();
            IWorkspaceName        workspaceName        = new WorkspaceName() as IWorkspaceName;

            workspaceName.ConnectionProperties   = workspace.ConnectionProperties;
            workspaceName.WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString();
            IWorkspaceName workspaceName2 = (ifeatureDatasetName_0 as IDatasetName).WorkspaceName;
            IDatasetName   datasetName    = new FeatureClassName() as IDatasetName;
            string         text           = ifeatureClass_0.AliasName;
            int            num            = text.LastIndexOf(".");

            if (num != -1)
            {
                text = text.Substring(num + 1);
            }
            datasetName.Name          = text;
            datasetName.WorkspaceName = workspaceName;
            IWorkspace2  workspace2   = (workspaceName2 as IName).Open() as IWorkspace2;
            IDatasetName datasetName2 = new FeatureClassName() as IDatasetName;

            datasetName2.WorkspaceName = workspaceName2;
            (datasetName2 as IFeatureClassName).FeatureDatasetName = (ifeatureDatasetName_0 as IDatasetName);
            IFieldChecker fieldChecker = new FieldChecker();

            fieldChecker.ValidateWorkspace = (workspace2 as IWorkspace);
            string[] array = string_0.Split(new char[]
            {
                '.'
            });
            string_0 = array[array.Length - 1] + "_Project";
            string text2;

            fieldChecker.ValidateTableName(string_0, out text2);
            string text3 = text2;
            int    num2  = 1;

            if (workspaceName2.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace ||
                workspaceName2.Type == esriWorkspaceType.esriLocalDatabaseWorkspace)
            {
                while (workspace2.get_NameExists(esriDatasetType.esriDTFeatureClass, text3))
                {
                    text3 = text2 + "_" + num2.ToString();
                    num2++;
                }
            }
            else if (workspaceName2.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                while (System.IO.File.Exists(text3 + ".shp"))
                {
                    text3 = text2 + "_" + num2.ToString();
                    num2++;
                }
            }
            datasetName2.Name = text3;
            IFields fields = new ESRI.ArcGIS.Geodatabase.Fields() as IFields;

            num = ifeatureClass_0.Fields.FindField(ifeatureClass_0.ShapeFieldName);
            IField            field       = ifeatureClass_0.Fields.get_Field(num);
            IGeometryDef      geometryDef = field.GeometryDef;
            ISpatialReference arg_1D9_0   = geometryDef.SpatialReference;
            double            num3;
            double            num4;
            double            num5;
            double            num6;

            ispatialReference_0.GetDomain(out num3, out num4, out num5, out num6);
            ((IGeometryDefEdit)geometryDef).GridCount_2 = 1;
            ((IGeometryDefEdit)geometryDef).set_GridSize(0, double_0);
            ((IGeometryDefEdit)geometryDef).SpatialReference_2 = ispatialReference_0;
            ((IFieldEdit)field).GeometryDef_2 = geometryDef;
            for (int i = 0; i < ifeatureClass_0.Fields.FieldCount; i++)
            {
                if (i == num)
                {
                    ((IFieldsEdit)fields).AddField(field);
                }
                else
                {
                    IField field2 = ifeatureClass_0.Fields.get_Field(i);
                    ((IFieldsEdit)fields).AddField(field2);
                }
            }
            IEnumFieldError enumFieldError;
            IFields         outputFields;

            fieldChecker.Validate(fields, out enumFieldError, out outputFields);
            if (SRLibCommonFunc.m_pfrm != null)
            {
                SRLibCommonFunc.m_pfrm.FeatureProgress = featureDataConverter;
            }
            try
            {
                featureDataConverter.ConvertFeatureClass((IFeatureClassName)datasetName, null, ifeatureDatasetName_0,
                                                         (IFeatureClassName)datasetName2, geometryDef, outputFields, "", 1000, 0);
            }
            catch (System.Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
            }
        }
 public static string FormatSpatialReference(ISpatialReference sr)
 {
     try
     {
         if (sr == null)
         {
             return "";
         }
         StringBuilder builder = new StringBuilder();
         if (sr is UnknownCoordinateSystemClass)
         {
             builder.Append("UnknownCoordinateSystem");
         }
         else
         {
             if (sr.Name == "Unknown")
             {
                 builder.Append("UnknownCoordinateSystem");
             }
             else
             {
                 IGeographicCoordinateSystem system2;
                 if (sr is IProjectedCoordinateSystem)
                 {
                     Exception exception;
                     IProjectedCoordinateSystem system = sr as IProjectedCoordinateSystem;
                     builder.Append("投影坐标系:\n");
                     builder.Append("  Name:").Append(system.Name).Append("\n");
                     builder.Append("  Alias:").Append(system.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system.Remarks).Append("\n");
                     builder.Append("投影:").Append(system.Projection.Name).Append("\n");
                     builder.Append("投影参数:\n");
                     builder.Append("   False_Easting:").Append(system.FalseEasting).Append("\n");
                     builder.Append("   False_Northing:").Append(system.FalseNorthing).Append("\n");
                     builder.Append("   Central_Meridian:").Append(system.get_CentralMeridian(true)).Append("\n");
                     try
                     {
                         builder.Append("   Scale_Factor:").Append(system.ScaleFactor).Append("\n");
                     }
                     catch { }
                     builder.Append("   Latitude_Of_Origin:0\n");
                     builder.Append("Linear Unit:").Append(system.CoordinateUnit.Name).Append("(").Append(system.CoordinateUnit.MetersPerUnit).Append(")\n");
                     builder.Append("Geographic Coordinate System:\n");
                     system2 = system.GeographicCoordinateSystem;
                     builder.Append("  Name:").Append(system2.Name).Append("\n");
                     builder.Append("  Alias:").Append(system2.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system2.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system2.Remarks).Append("\n");
                     builder.Append("  Angular Unit:").Append(system2.CoordinateUnit.Name).Append("(").Append(system2.CoordinateUnit.RadiansPerUnit).Append(")\n");
                     builder.Append("  Prime Meridian:").Append(system2.PrimeMeridian.Name).Append("(").Append(system2.PrimeMeridian.Longitude).Append(")\n");
                     builder.Append("  Datum:").Append(system2.Datum.Name).Append("\n");
                     builder.Append("    Spheroid:").Append(system2.Datum.Spheroid.Name).Append("\n");
                     builder.Append("      Semimajor Axis:").Append(system2.Datum.Spheroid.SemiMajorAxis).Append("\n");
                     builder.Append("      Semiminor Axis:").Append(system2.Datum.Spheroid.SemiMinorAxis).Append("\n");
                     builder.Append("      Inverse Flattening:").Append((double)(1.0 / system2.Datum.Spheroid.Flattening)).Append("\n");
                     builder.Append("X/Y Domain:\n");
                     try
                     {
                         double num = 0.0;
                         double num2 = 0.0;
                         double num3 = 0.0;
                         double num4 = 0.0;
                         double num5 = 0.0;
                         sr.GetDomain(out num, out num3, out num2, out num4);
                         sr.GetFalseOriginAndUnits(out num, out num2, out num5);
                         builder.Append(" Min X:").Append(num).Append("\n");
                         builder.Append(" Min Y:").Append(num2).Append("\n");
                         builder.Append(" Max X:").Append(num3).Append("\n");
                         builder.Append(" Max Y:").Append(num4).Append("\n");
                         builder.Append(" XYScale:").Append(num5).Append("\n");
                         builder.Append("\n");
                     }
                     catch (Exception exception1)
                     {
                         exception = exception1;
                     }
                     builder.Append("Z Domain:\n");
                     try
                     {
                         double num6;
                         double num7;
                         double num8 = 0.0;
                         sr.GetZDomain(out num6, out num7);
                         sr.GetZFalseOriginAndUnits(out num6, out num8);
                         builder.Append("  Min Z:").Append(num6).Append("\n");
                         builder.Append("  Max Z:").Append(num7).Append("\n");
                         builder.Append("  ZScale:").Append(num8).Append("\n");
                         builder.Append("\n");
                     }
                     catch (Exception exception2)
                     {
                         exception = exception2;
                     }
                     try
                     {
                         double num9;
                         double num10;
                         builder.Append("M Domain:\n");
                         double num11 = 0.0;
                         sr.GetMDomain(out num9, out num10);
                         sr.GetMFalseOriginAndUnits(out num9, out num11);
                         builder.Append("  Min M:").Append(num9).Append("\n");
                         builder.Append("  Max M:").Append(num10).Append("\n");
                         builder.Append("  MScale:").Append(num11).Append("\n");
                     }
                     catch (Exception exception3)
                     {
                         exception = exception3;
                     }
                 }
                 else if (sr is IGeographicCoordinateSystem)
                 {
                     builder.Append("Geographic Coordinate System:\n");
                     system2 = sr as IGeographicCoordinateSystem;
                     builder.Append("  Name:").Append(system2.Name).Append("\n");
                     builder.Append("  Alias:").Append(system2.Alias).Append("\n");
                     builder.Append("  Abbreviation:").Append(system2.Abbreviation).Append("\n");
                     builder.Append("  Remarks:").Append(system2.Remarks).Append("\n");
                     builder.Append("  Angular Unit:").Append(system2.CoordinateUnit.Name).Append("(").Append(system2.CoordinateUnit.RadiansPerUnit).Append(")\n");
                     builder.Append("  Prime Meridian:").Append(system2.PrimeMeridian.Name).Append("(").Append(system2.PrimeMeridian.Longitude).Append(")\n");
                     builder.Append("  Datum:").Append(system2.Datum.Name).Append("\n");
                     builder.Append("    Spheroid:").Append(system2.Datum.Spheroid.Name).Append("\n");
                     builder.Append("      Semimajor Axis:").Append(system2.Datum.Spheroid.SemiMajorAxis).Append("\n");
                     builder.Append("      Semiminor Axis:").Append(system2.Datum.Spheroid.SemiMinorAxis).Append("\n");
                     builder.Append("      Inverse Flattening:").Append((double)(1.0 / system2.Datum.Spheroid.Flattening)).Append("\n");
                 }
             }
         }
         return builder.ToString();
     }
     catch (Exception ex)
     { return ""; }
 }
Exemple #21
0
        public static void Project(IFeatureClass ifeatureClass_0, ISpatialReference ispatialReference_0,
                                   IWorkspace iworkspace_0, string string_0, double double_0)
        {
            string                str;
            double                num;
            double                num1;
            double                num2;
            double                num3;
            IEnumFieldError       enumFieldError;
            IFields               field;
            IWorkspace            workspace = ((IDataset)ifeatureClass_0).Workspace;
            IFeatureDataConverter featureDataConverterClass = new FeatureDataConverter();
            IWorkspaceName        workspaceNameClass        = new WorkspaceName() as IWorkspaceName;

            workspaceNameClass.ConnectionProperties   = workspace.ConnectionProperties;
            workspaceNameClass.WorkspaceFactoryProgID = workspace.WorkspaceFactory.GetClassID().Value.ToString();

            IWorkspaceName connectionProperties = new WorkspaceName() as IWorkspaceName;
            PropertySet    propertySetClass     = new PropertySet();

            connectionProperties.ConnectionProperties   = iworkspace_0.ConnectionProperties;
            connectionProperties.WorkspaceFactoryProgID = iworkspace_0.WorkspaceFactory.GetClassID().Value.ToString();
            IDatasetName featureClassNameClass = new FeatureClassName() as IDatasetName;
            string       aliasName             = ifeatureClass_0.AliasName;
            int          num4 = aliasName.LastIndexOf(".");

            if (num4 != -1)
            {
                aliasName = aliasName.Substring(num4 + 1);
            }
            featureClassNameClass.Name          = aliasName;
            featureClassNameClass.WorkspaceName = workspaceNameClass;
            IDatasetName datasetName = new FeatureClassName() as IDatasetName;

            {
                datasetName.WorkspaceName = connectionProperties;
            }
            ;
            IFieldChecker fieldCheckerClass = new FieldChecker()
            {
                ValidateWorkspace = iworkspace_0
            };

            string[] strArrays = string_0.Split(new char[] { '.' });
            string_0 = string.Concat(strArrays[(int)strArrays.Length - 1], "_Project");
            fieldCheckerClass.ValidateTableName(string_0, out str);
            string str1 = str;
            int    num5 = 1;

            if (
                !(iworkspace_0.Type == esriWorkspaceType.esriRemoteDatabaseWorkspace
                    ? false
                    : iworkspace_0.Type != esriWorkspaceType.esriLocalDatabaseWorkspace))
            {
                while (((IWorkspace2)iworkspace_0).NameExists[esriDatasetType.esriDTFeatureClass, str1])
                {
                    str1 = string.Concat(str, "_", num5.ToString());
                    num5++;
                }
            }
            else if (iworkspace_0.Type == esriWorkspaceType.esriFileSystemWorkspace)
            {
                while (File.Exists(string.Concat(str1, ".shp")))
                {
                    str1 = string.Concat(str, "_", num5.ToString());
                    num5++;
                }
            }
            datasetName.Name = str1;
            IFields fieldsClass = new ESRI.ArcGIS.Geodatabase.Fields();

            num4 = ifeatureClass_0.Fields.FindField(ifeatureClass_0.ShapeFieldName);
            IField            field1           = ifeatureClass_0.Fields.Field[num4];
            IGeometryDef      geometryDef      = field1.GeometryDef;
            ISpatialReference spatialReference = geometryDef.SpatialReference;

            ispatialReference_0.GetDomain(out num, out num1, out num2, out num3);
            ((IGeometryDefEdit)geometryDef).GridCount_2        = 1;
            ((IGeometryDefEdit)geometryDef).GridSize_2[0]      = double_0;
            ((IGeometryDefEdit)geometryDef).SpatialReference_2 = ispatialReference_0;
            ((IFieldEdit)field1).GeometryDef_2 = geometryDef;
            for (int i = 0; i < ifeatureClass_0.Fields.FieldCount; i++)
            {
                if (i != num4)
                {
                    IField field2 = ifeatureClass_0.Fields.Field[i];
                    ((IFieldsEdit)fieldsClass).AddField(field2);
                }
                else
                {
                    ((IFieldsEdit)fieldsClass).AddField(field1);
                }
            }
            fieldCheckerClass.Validate(fieldsClass, out enumFieldError, out field);
            if (SRLibCommonFunc.m_pfrm != null)
            {
                SRLibCommonFunc.m_pfrm.FeatureProgress = featureDataConverterClass;
            }
            try
            {
                featureDataConverterClass.ConvertFeatureClass((IFeatureClassName)featureClassNameClass, null, null,
                                                              (IFeatureClassName)datasetName, geometryDef, field, "", 1000, 0);
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message);
            }
        }