arcgis engine入门体会(一)

  1. point几何对象建立:
IPoint pPiont = new PointClass();
pPiont.X = 100;
pPiont.Y = 100;
  1. mutipoint 几何对象建立:
//定义第一个点
IPoint pPiont1 = new PointClass();
pPiont1.X = 100;
pPiont2.Y = 100;
//定义第二个点
IPoint pPiont2 = new PointClass();
pPiont2.X = 200;
pPiont2.Y = 200;
//....构建其他点
IPointCollection pMultipoint = new MultipointClass();
object o = Type.Missing;
//添加第一个点,不需要设置点的顺序,参数设置为Type.Missing
pMultipoint.AddPoint(pPiont1, ref o, ref o);
//添加第二个点,不需要设置点的顺序,参数设置为Type.Missing
pMultipoint.AddPoint(pPiont2, ref o, ref o);
//...添加其他点
  1. 使用IGeometryColletion接口创建一个PloyLine对象
//创建一个polyline对象
//定义第一个点
IPoint pPiont1 = new PointClass();
pPiont1.X = 100;
pPiont1.Y = 100;
//定义第二个点
IPoint pPiont2 = new PointClass();
pPiont2.X = 200;
pPiont2.Y = 200;
//创建一个line对象
ILine pLine = new LineClass();
//设置Line对象的起始终止点
pLine.PutCoords(pPiont1, pPiont2);
//QI到ISegment
Isegment pSegment = pLine as ISegment;
//创建一个Path对象
ISegmentCollection pPath = new PathClass();
object o = Type.Missing;
//通过ISegmentCollection接口为Path对象添加Segment对象
pPath.AddSegment(pSegment, ref o, ref o);
//创建一个Polyline对象
IGeometryCollection pPolyline = new PolylineClass();
//通过IGeometryCollection为Polyline对象添加Path对象
pPolyline.AddGeometry(pPath as IGeometry, ref o, ref o);
  1. 构建一个Polygon
//创建一个Ring对象,通过ISegmentCollection接口向其中添加Segment对象
ISegmentCollection pSegCollection = new RingClass();
object o = Type.Missing;
pSegCollection.AddSegment(pSegment1, ref o, ref o);
pSegCollection.AddSegment(pSegment2, ref o, ref o);
//QI到IRing接口封闭Ring对象,使其有效
IRing pRing = pSegCollection as IRing;
pRing.Close();
//使用Ring对象构建Polygon对象
IGemetryCollection pGeometryColl = new PolygonClass();
pGeometryColl.AddGeometry(pRing, ref o, ref o);
  1. 一条10千米的Curve对象,获取2-5千米处的公路曲线代码片段
//QI到ICurve接口
ICurve pCurve = pPolyline as ICurve;
//创建一个Polyline对象
ICurve pNewCurve = new PolylineClass();
bool btrue = true;
//获取-5千米间的曲线对象
pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);
  1. 构建一个Multipatch几何对象
/// <summary>
        /// 构建Multipatch几何对象
        /// </summary>
        /// <returns>返回Multipatch几何对象</returns>
        public IMultiPatch CreateMultipatch()
        {
            try
            { 
                //创建图形材质对象
                IGeometryMaterial texture = new IGeometryMaterial();
                texture.TextureImage = @"C:\Temp\MyImage.jpg";
                //创建材质列表对象
                IGeometryMaterialList materialList = new IGeometryMaterialList();
                //向材质列表添加材质
                materialList.AddMaterial(texture);
                //创建GeneralMultiPatchCreator对象
                IGeneralMultiPatchCreator multiPatchCreator = new GeneralMultiPatchCreatorClass();
                multiPatchCreator.Init(4, 1, false, false, false, 4, materialList);
                //设置Part:可以使三角扇或环
                multiPatchCreator.SetPatchType(0, esriPatchType.esriPatchTypeTriangleStrip);
                multiPatchCreator.SetMaterialIndex(0,0);
                multiPatchCreator.SetPatchPointIndex(0, 0);
                //创建真实points
                WKSPointZ upperLeft = new WKSPointZ();
                WKSPointZ lowerLeft = new WKSPointZ();
                WKSPointZ upperRight = new WKSPointZ();
                WKSPointZ loweRight = new WKSPointZ();
                upperLeft.X = 0;
                upperLeft.Y = 0;
                upperLeft.Z = 0;
                upperRight.X = 300;
                upperRight.Y = 0;
                upperRight.Z = 0;
                lowerLeft.X = 0;
                lowerLeft.Y = 0;
                lowerLeft.Z = -100;
                loweRight.X = 300;
                loweRight.Y = 1;
                loweRight.Z = -100;
                multiPatchCreator.SetWKSPointZ(0, ref upperRight);
                multiPatchCreator.SetWKSPointZ(1, ref loweRight);
                multiPatchCreator.SetWKSPointZ(2, ref upperLeft);
                multiPatchCreator.SetWKSPointZ(3, ref lowerLeft);
                //设置贴图的点
                WKSPoint textureUpperLeft = new WKSPoint();
                WKSPoint textureLowerLeft = new WKSPoint();
                WKSPoint textureUpperRight = new WKSPoint();
                WKSPoint textureLowerRight = new WKSPoint();
                textureUpperLeft.X = 0; textureUpperLeft.Y = 0;
                textureUpperRight.X = 1; textureUpperRight.Y = 0;
                textureLowerLeft.X = 0; textureLowerLeft.Y = 1;
                textureLowerRight.X = 1; textureLowerRight.Y = 1;
                multiPatchCreator.SetTextureWKSPoint(0, ref textureUpperRight);
                multiPatchCreator.SetTextureWKSPoint(1, ref textureLowerRight);
                multiPatchCreator.SetTextureWKSPoint(2, ref textureUpperLeft);
                multiPatchCreator.SetTrxtureWKSPoint(3, ref textureLowerLeft);
                //创建MultiPatch对象
                IMultiPatch multiPatch = multiPatchCreator.CreateMultiPatch() as IMultiPatch;
                return multiPatch;
            }
            catch(Exception Err)
            {
                MessageBox.Show(Err.Message, "提示", MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
           }
  1. 通过IGeometryCollection创建一个Polygon
/// <summary>
        /// 构造Polygon对象
        /// </summary>
        /// <param name="pRingList">Ring对象集合</param>
        /// <returns>返回一个Polygon对象</returns>
        private IPolygon ConstructorPolygon(List<IRing> pRingList)
        {
            try
            {
                //创建一个Polygon对象
                IGeometryCollection pGCollection = new PolygonClass();
                object o = Type.Missing;
                //遍历Ring集合
                for (int i = 0; i < pRingList.Count; i++)
                {
                    //通过IGeometryCollection接口的AddGeometry方法向Polygon对象中添加Ring子对象
                    pGCollection.AddGeometry(pRingList[i], ref o, ref o);
                }
                //QI至ITopologicalOperator
                ITopologicalOperator pToplogical = pGCollection as ITopologicalOperator;
                //执行Simplify操作
                pToplogical.Simplify();
                IPolygon pPolygon = pGCollection as IPolygon;
                //返回Polygom
                return pPolygon;
            }
            catch (Exception Err)
            { 
                MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                return null;
            }
        }
  1. 合并两个polygon对象为一个polygone对象
private IPolygon MergePolygons(IPolygon firstPolygon, IPolygon SecondPolygon)
        {
            try
            {
                //创建一个Polygon对象
                IGeometryCollection pGCollection1 = new PolygonClass();
                IGeometryCollection pGCollection2 = firstPolygon as IGeometryCollection;
                IGeometryCollection pGCollection3 = SecondPolygon as IGeometryCollection;
                //添加firstPolygon
                pGCollection1.AddGeometryCollection(pGCollection2);
                //添加SecondPolygon
                pGCollection1.AddGeometryCollection(pGCollection3);
                //QI至ITopologicalOperator
                ITopologicalOperator pTopological = pGCollection1 as ITopologicalOperator;
                //执行Simplify操作
                pTopological.Simplify();
                IPolygon pPolygon = pGCollection1 as IPolygon;
                //返回Polygon对象
                return pPolygon;
            }
            catch(Exception Err)
            { 
                MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
                return null;
            }
        }
  1. 改变一个图层的参考
private void ChangeLayerRef(IFeature pFeatureLayer, int gcsType)
    {
        try
        {
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
            //QI到IGeoDataset
            IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;
            //QI到IGeoDatasetSchemaEdit
            IGeoDatasetSchemaEdit pGeoDatabaseSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;
            if(pGeoDatabaseSchemaEdit.CanAlterSpatialReference == true)
            {
                //创建SpatiaReferenceEnciroment对象
                ISpatialReferenceFactory2 pSpaRefFactory = new SpatialReferenceEnviromentClass();
                //创建地理坐标系对象
                IGeographicCoordinateSystem pNewGeoSys = pSpaRefFactory.CreateGeographicCoordinateSystem(gcsType);//4212代表背景1954
                pGeoDatabaseSchemaEdit.AlterSpatialReference(pNewGeoSys);
            }
        }
            catch(Exception Err)
        {
                MessageBox.Show(Err.Message,"提示",MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

    }

基本上是对点线面的操作方法,使用IGeometryCollection合并

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值