• 几何对象和空间参考


      1   //如何构建Point
      2         private IPoint ConstructPoint(double x, double y)
      3         {
      4             IPoint pPoint = new ESRI.ArcGIS.Geometry.Point();
      5             pPoint.PutCoords(x,y);
      6             return pPoint;
      7         }
      8 
      9 
     10         //如何构建MultiPoint
     11         private IGeometry GetMutipointGeometry()
     12         {
     13             const double multiPointCount = 25;
     14             IPointCollection pointCollection = new Multipoint();
     15             for (int i = 0; i < multiPointCount; i++)
     16             {
     17                 pointCollection.AddPoint(GetPoint(),Type.Missing,Type.Missing);
     18             }
     19             return pointCollection as IGeometry;
     20         }
     21         private IPoint GetPoint()
     22         { 
     23             const double min=-10;
     24             const double max=10;
     25             Random random=new Random();
     26             double x=min+(max-min)*random.NextDouble();
     27             double y = min + (max - min) * random.NextDouble();
     28             return ConstructPoint(x,y);
     29         }
     30 
     31         //Polyline的构成
     32         private IGeometry GetPolylineGeometry()
     33         {
     34             const double pathCount = 3;
     35             const double pathVetexCount = 3;
     36             IGeometryCollection pGeometryCollection = new Polyline() as IGeometryCollection;
     37             for (int i = 0; i < pathCount; i++)
     38             {
     39                 IPointCollection pointCollection = new Path();
     40                 for (int j = 0; j < pathVetexCount; j++)
     41                 {
     42                     pointCollection.AddPoint(GetPoint(),Type.Missing,Type.Missing);
     43                 }
     44                 pGeometryCollection.AddGeometry(pointCollection as IGeometry,Type.Missing,Type.Missing);
     45             }
     46             return pGeometryCollection as IGeometry;
     47         }
     48 
     49         //构造Polygon
     50         public IPolygon CreatePolygonByPoints(IPointCollection pointCollection)
     51         {
     52             IGeometryBridge2 pGeometryBridge2 = new GeometryEnvironment() as IGeometryBridge2;
     53             IPointCollection4 polygon = new Polygon() as IPointCollection4;
     54             WKSPoint[] wksPoint = new WKSPoint[pointCollection.PointCount];
     55             for (int i = 0; i < pointCollection.PointCount; i++)
     56             {
     57                 wksPoint[i].X = pointCollection.get_Point(i).X;
     58                 wksPoint[i].Y = pointCollection.get_Point(i).Y;
     59             }
     60             pGeometryBridge2.SetWKSPoints(polygon as IPointCollection4, wksPoint);
     61             IPolygon pPoly = polygon as IPolygon;
     62             pPoly.Close();
     63             return pPoly;
     64         }
     65 
     66         //通过IGeometryCollection构造Polygon对象
     67         private IPolygon ConstructorPolygon(List<IRing> ringList)
     68         {
     69             try
     70             {
     71                 IGeometryCollection pGCollection = new Polygon() as IGeometryCollection;
     72                 object o = Type.Missing;
     73                 for (int i = 0; i < ringList.Count; i++)
     74                 { 
     75                   //通过IGeometryCollection的AddGeometry方法像polygon里添加Ring对象
     76                     pGCollection.AddGeometry(ringList[i]);
     77                 }
     78                 //QI至ITopologicalOperator
     79                 ITopologicalOperator pTopoloical = pGCollection as ITopologicalOperator;
     80                 //执行Simplify操作
     81                 pTopoloical.Simplify();
     82                 IPolygon polygon = pTopoloical as IPolygon;
     83                 return polygon;
     84 
     85             }
     86             catch(Exception ex)
     87             {
     88                 return null;
     89             }            
     90         }
     91 
     92         private IPolygon MergePoilygons(IPolygon firstPolygon, IPolygon secondPolygon)
     93         {
     94             try
     95             {
     96                 //创建一个Polygon对象
     97                 IGeometryCollection pGCollection = new Polygon() as IGeometryCollection;
     98                 IGeometryCollection pGCollection1 = firstPolygon as IGeometryCollection;
     99                 IGeometryCollection pGCollection2 = secondPolygon as IGeometryCollection;
    100                 pGCollection.AddGeometryCollection(pGCollection1);
    101                 pGCollection.AddGeometryCollection(pGCollection2);
    102                 ITopologicalOperator pTopological = pGCollection as ITopologicalOperator;
    103                 pTopological.Simplify();
    104                 IPolygon polygon = pTopological as IPolygon;
    105                 return polygon;
    106             }
    107             catch (Exception ex)
    108             {
    109                 return null;
    110             }
    111         }
    112 
    113        //等距离打断线
    114         private IEnumGeometry MakeMutiPoints(IPolyline pGeometry,int intPoints)
    115         {
    116             IConstructGeometryCollection pConGeoCollection = new GeometryBag() as IConstructGeometryCollection;
    117             pConGeoCollection.ConstructDivideEqual(pGeometry, intPoints, esriConstructDivideEnum.esriDivideIntoPolylines);
    118             IEnumGeometry pEnumGeo = pConGeoCollection as IEnumGeometry;
    119             return pEnumGeo;
    120         }
    121         //同一基准面的坐标转换
    122         private IPoint GetpProjectedPoint(IPoint pPoint, bool pBool)
    123         {
    124             ISpatialReferenceFactory pSpaceReferenceFactory = new SpatialReferenceEnvironment();
    125             ISpatialReference pFromSpatialReference = pSpaceReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980);
    126             ISpatialReference pToSpatialReference = pSpaceReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_Zone_34);
    127             if (pBool == true)
    128             {
    129                 IGeometry pGeo = pPoint as IGeometry;
    130                 pGeo.SpatialReference = pFromSpatialReference;
    131                 pGeo.Project(pToSpatialReference);
    132                 return pPoint;
    133             }
    134             else 
    135             {
    136                 IGeometry pGeo = pPoint as IPoint;
    137                 pGeo.SpatialReference = pToSpatialReference;
    138                 pGeo.Project(pFromSpatialReference);
    139                 return pPoint;
    140             }        
    141         }
    142         //不同基准面子之间的坐标转换
    143         public void ProjectExExample()
    144         {
    145             ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironment();
    146            // ISpatialReference pFromCustom = pSpatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(@"E:1.prj");
    147 
    148             IPoint pFromPoint = new ESRI.ArcGIS.Geometry.Point();
    149             pFromPoint.X = 518950.788;
    150             pFromPoint.Y = 4335923.97;
    151             IZAware pZAware = pFromPoint as IZAware;
    152             pZAware.ZAware = true;
    153             pFromPoint.Z = 958.4971;
    154             //pFromPoint.SpatialReference = pFromCustom;
    155 
    156             //自定义下定的北京6度19带
    157             pFromPoint.SpatialReference = CreateCustomProjectedSystem();
    158 
    159             //目标投影
    160             IProjectedCoordinateSystem projectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_19);
    161             
    162             //因为目标基准面和原始基准面不在同一个基准面上,所以牵涉参数的设置,我们用七参数转换
    163             ICoordinateFrameTransformation pCoordinateFrameTransformation = new CoordinateFrameTransformation() as ICoordinateFrameTransformation;
    164             pCoordinateFrameTransformation.PutParameters(-112.117,4.530,21.89,-0.00058702,-0.00476421,0.00009358,0.99998006411);
    165             pCoordinateFrameTransformation.PutSpatialReferences(CreateCustomProjectedSystem(),projectedCoordinateSystem as ISpatialReference);
    166 
    167 
    168 
    169             //投影转换
    170             IGeometry2 pGeometry = pFromPoint as IGeometry2;
    171             pGeometry.ProjectEx(projectedCoordinateSystem ,esriTransformDirection.esriTransformForward,pCoordinateFrameTransformation,false,0,0);
    172 
    173 
    174         }
    175 
    176         private IProjectedCoordinateSystem CreateCustomProjectedSystem()
    177         {
    178             ISpatialReferenceFactory2 pSpatialReferenceFactory = new SpatialReferenceEnvironment() as ISpatialReferenceFactory2;
    179             IProjectionGEN pProjection = pSpatialReferenceFactory.CreateProjection((int)esriSRProjectionType.esriSRProjection_GaussKruger) as IProjectionGEN;
    180 
    181             IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
    182 
    183             ILinearUnit pUnit = pSpatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit;
    184 
    185             IParameter[] pParameter = pProjection.GetDefaultParameters();
    186             IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = new ProjectedCoordinateSystem() as IProjectedCoordinateSystemEdit;
    187 
    188             object pName = "WGS-Beijing1954";
    189             object pAlias = "WGS-Beijing1954";
    190             object pAbbreviation = "WGS-Beijing1954";
    191             object pRemarks = "WGS-Beijing1954";
    192             object pUsage = "Caculate meter from lat and lon";
    193             object ppGeographicCoordinateSystemObject = pGeographicCoordinateSystem ;
    194             object pUnitObject = pUnit;
    195             object pProjectionObject = pProjection;
    196             object pParameterObject = pParameter;
    197 
    198             pProjectedCoordinateSystemEdit.Define(ref pName, ref pAlias, ref pAbbreviation, ref pRemarks, ref pUsage, ref ppGeographicCoordinateSystemObject, ref pUnitObject, ref pProjectionObject, ref pParameterObject);
    199 
    200             IProjectedCoordinateSystem5 pProjectedCoordinateSystem = pProjectedCoordinateSystemEdit as IProjectedCoordinateSystem5;
    201             pProjectedCoordinateSystem.FalseEasting = 5000000;
    202             pProjectedCoordinateSystem.LatitudeOfOrigin = 0;
    203             pProjectedCoordinateSystem.set_CentralMeridian(true,111);
    204             pProjectedCoordinateSystem.ScaleFactor = 1;
    205             pProjectedCoordinateSystem.FalseNorthing = 0;
    206             return pProjectedCoordinateSystem;
    207         }
  • 相关阅读:
    学习笔记-- android动画简述
    解决android textview 混合文字、数字换行后对列不齐
    android 瀑布流效果 保存地址
    android 查看MD5、sha1值命令
    android 生成.keystore文件
    读取手机上所有应用程序并显示(APP)
    安卓学习入门地址
    用 Python 理解服务器模型(下)(转载)
    轻松学会Python列表解析式(转载)
    Python使用struct处理二进制(转载)
  • 原文地址:https://www.cnblogs.com/rockman/p/3405094.html
Copyright © 2020-2023  润新知