コード例 #1
0
        private static void SetShp(Layer PointLayer, Fornix fornix)
        {
            if (-1 == PointLayer.FindFieldIndex("trend", 0))
            {
                FieldDefn oFieldName0 = new FieldDefn("trend", FieldType.OFTReal);
                oFieldName0.SetWidth(50);
                oFieldName0.SetPrecision(7);
                PointLayer.CreateField(oFieldName0, 1);
            }
            if (-1 == PointLayer.FindFieldIndex("incli", 0))
            {
                FieldDefn oFieldName1 = new FieldDefn("incli", FieldType.OFTReal);
                oFieldName1.SetWidth(50);
                oFieldName1.SetPrecision(7);
                PointLayer.CreateField(oFieldName1, 1);
            }
            if (-1 == PointLayer.FindFieldIndex("dip", 0))
            {
                FieldDefn oFieldName2 = new FieldDefn("dip", FieldType.OFTReal);
                oFieldName2.SetWidth(50);
                oFieldName2.SetPrecision(7);
                PointLayer.CreateField(oFieldName2, 1);
            }

            for (int i = 0; i < (int)PointLayer.GetFeatureCount(0); ++i)
            {
                Vertex  vertex       = fornix.outSide.upvers.getVer(i);
                Feature pointFeature = PointLayer.GetFeature(i);
                pointFeature.SetField("trend", vertex.occurrence.trend);
                pointFeature.SetField("incli", vertex.occurrence.inclination);
                pointFeature.SetField("dip", vertex.occurrence.dip);
                PointLayer.SetFeature(pointFeature); //更改其值
                pointFeature.Dispose();              //释放对象
            }
        }
コード例 #2
0
        public static FieldDefn ToFieldDefn(MG_Field field)
        {
            FieldType type = ToFieldType(field.Type);
            FieldDefn def  = new FieldDefn(field.Name, type);

            def.SetWidth(field.Width);
            def.SetPrecision(field.Precision);
            return(def);
        }
コード例 #3
0
        public void AddFieldReal(string name, int width, int precision)
        {
            FieldDefn fdefn = new FieldDefn(name, FieldType.OFTReal);

            fdefn.SetWidth(width);
            fdefn.SetPrecision(precision);

            if (_layer.CreateField(fdefn, 1) != 0)
            {
                throw new Exception("Nie można utworzyć pola " + name);
            }
        }
コード例 #4
0
ファイル: ShpOperate.cs プロジェクト: TsaiYoung/iSGMS
        /// <summary>
        /// 输出shapefile 文件
        /// </summary>
        /// <param name="trees"></param>
        /// <param name="path"></param>
        public void Createshp(List <Tree> trees, string path)
        {
            DataSource outds = oDriver.CreateDataSource(path, null);

            if (outds == null)
            {
                Console.WriteLine("创建矢量文件失败!");
                return;
            }
            SpatialReference sr = oLayer.GetSpatialRef();

            if (sr == null)
            {
                string wkt = "";
                sr = new SpatialReference(wkt);
            }
            Layer outLayer = outds.CreateLayer("PointLayer", sr, wkbGeometryType.wkbPoint, null);

            //create fields
            FieldDefn oFieldID = new FieldDefn("ID", FieldType.OFTInteger);

            outLayer.CreateField(oFieldID, 1);

            FieldDefn oFieldX = new FieldDefn("X", FieldType.OFTReal);// float型

            oFieldX.SetWidth(18);
            oFieldX.SetPrecision(8);
            outLayer.CreateField(oFieldX, 1);

            FieldDefn oFieldY = new FieldDefn("Y", FieldType.OFTReal);

            oFieldY.SetWidth(18);
            oFieldY.SetPrecision(8);
            outLayer.CreateField(oFieldY, 1);

            FieldDefn oDBH = new FieldDefn("DBH", FieldType.OFTReal);

            oDBH.SetWidth(18);
            oDBH.SetPrecision(8);
            outLayer.CreateField(oDBH, 1);

            FieldDefn oHeight = new FieldDefn("Height", FieldType.OFTReal);

            oHeight.SetWidth(18);
            oHeight.SetPrecision(8);
            outLayer.CreateField(oHeight, 1);

            FieldDefn oUBH = new FieldDefn("UBH", FieldType.OFTReal);

            oUBH.SetWidth(18);
            oUBH.SetPrecision(8);
            outLayer.CreateField(oUBH, 1);

            FieldDefn oCH = new FieldDefn("CH", FieldType.OFTReal);

            oCH.SetWidth(18);
            oCH.SetPrecision(8);
            outLayer.CreateField(oCH, 1);

            FieldDefn oCW = new FieldDefn("CW", FieldType.OFTReal);

            oCW.SetWidth(18);
            oCW.SetPrecision(8);
            outLayer.CreateField(oCW, 1);

            FieldDefn eUBH = new FieldDefn("eUBH", FieldType.OFTReal);

            eUBH.SetWidth(18);
            eUBH.SetPrecision(8);
            outLayer.CreateField(eUBH, 1);

            FieldDefn sUBH = new FieldDefn("sUBH", FieldType.OFTReal);

            sUBH.SetWidth(18);
            sUBH.SetPrecision(8);
            outLayer.CreateField(sUBH, 1);

            FieldDefn wUBH = new FieldDefn("wUBH", FieldType.OFTReal);

            wUBH.SetWidth(18);
            wUBH.SetPrecision(8);
            outLayer.CreateField(wUBH, 1);

            FieldDefn nUBH = new FieldDefn("nUBH", FieldType.OFTReal);

            nUBH.SetWidth(18);
            nUBH.SetPrecision(8);
            outLayer.CreateField(nUBH, 1);

            FieldDefn eCH = new FieldDefn("eCH", FieldType.OFTReal);

            eCH.SetWidth(18);
            eCH.SetPrecision(8);
            outLayer.CreateField(eCH, 1);

            FieldDefn sCH = new FieldDefn("sCH", FieldType.OFTReal);

            sCH.SetWidth(18);
            sCH.SetPrecision(8);
            outLayer.CreateField(sCH, 1);

            FieldDefn wCH = new FieldDefn("wCH", FieldType.OFTReal);

            wCH.SetWidth(18);
            wCH.SetPrecision(8);
            outLayer.CreateField(wCH, 1);

            FieldDefn nCH = new FieldDefn("nCH", FieldType.OFTReal);

            nCH.SetWidth(18);
            nCH.SetPrecision(8);
            outLayer.CreateField(nCH, 1);

            FieldDefn eCW = new FieldDefn("eCW", FieldType.OFTReal);

            eCW.SetWidth(18);
            eCW.SetPrecision(8);
            outLayer.CreateField(eCW, 1);

            FieldDefn sCW = new FieldDefn("sCW", FieldType.OFTReal);

            sCW.SetWidth(18);
            sCW.SetPrecision(8);
            outLayer.CreateField(sCW, 1);

            FieldDefn wCW = new FieldDefn("wCW", FieldType.OFTReal);

            wCW.SetWidth(18);
            wCW.SetPrecision(8);
            outLayer.CreateField(wCW, 1);

            FieldDefn nCW = new FieldDefn("nCW", FieldType.OFTReal);

            nCW.SetWidth(18);
            nCW.SetPrecision(8);
            outLayer.CreateField(nCW, 1);

            FieldDefn oBiomass = new FieldDefn("Biomass", FieldType.OFTReal);

            oBiomass.SetWidth(18);
            oBiomass.SetPrecision(8);
            outLayer.CreateField(oBiomass, 1);

            FieldDefn oMortality = new FieldDefn("Mortality", FieldType.OFTString);

            oMortality.SetWidth(50);
            outLayer.CreateField(oMortality, 1);

            FieldDefn oCutting = new FieldDefn("Cutting", FieldType.OFTString);

            oCutting.SetWidth(50);
            outLayer.CreateField(oCutting, 1);

            // create feature
            FeatureDefn oDefn = outLayer.GetLayerDefn();

            for (int i = 0; i < trees.Count; i++)
            {
                Feature oFeature = new Feature(oDefn);
                oFeature.SetField(0, i);
                oFeature.SetField(1, double.Parse(trees[i].X.ToString("0.00")));
                oFeature.SetField(2, double.Parse(trees[i].Y.ToString("0.00")));
                oFeature.SetField(3, double.Parse(trees[i].DBH.ToString("0.00")));
                oFeature.SetField(4, double.Parse(trees[i].Height.ToString("0.00")));
                oFeature.SetField(5, double.Parse(trees[i].UnderBranchHeight.ToString("0.00")));
                oFeature.SetField(6, double.Parse(trees[i].CrownHeight.ToString("0.00")));
                oFeature.SetField(7, double.Parse(trees[i].CrownWidth.ToString("0.00")));
                if (trees[i].eastUnderBranchHeight > 0)
                {
                    oFeature.SetField(8, double.Parse(trees[i].eastUnderBranchHeight.ToString("0.00")));
                    oFeature.SetField(9, double.Parse(trees[i].southUnderBranchHeight.ToString("0.00")));
                    oFeature.SetField(10, double.Parse(trees[i].westUnderBranchHeight.ToString("0.00")));
                    oFeature.SetField(11, double.Parse(trees[i].northUnderBranchHeight.ToString("0.00")));
                }
                if (trees[i].eastCrownHeight > 0)
                {
                    oFeature.SetField(12, double.Parse(trees[i].eastCrownHeight.ToString("0.00")));
                    oFeature.SetField(13, double.Parse(trees[i].southCrownHeight.ToString("0.00")));
                    oFeature.SetField(14, double.Parse(trees[i].westCrownHeight.ToString("0.00")));
                    oFeature.SetField(15, double.Parse(trees[i].northCrownHeight.ToString("0.00")));
                }
                if (trees[i].eastCrownWidth > 0)
                {
                    oFeature.SetField(16, double.Parse(trees[i].eastCrownWidth.ToString("0.00")));
                    oFeature.SetField(17, double.Parse(trees[i].southCrownWidth.ToString("0.00")));
                    oFeature.SetField(18, double.Parse(trees[i].westCrownWidth.ToString("0.00")));
                    oFeature.SetField(19, double.Parse(trees[i].northCrownWidth.ToString("0.00")));
                }
                oFeature.SetField(20, double.Parse(trees[i].Biomass.ToString("0.00")));
                if (trees[i].isMortality)
                {
                    oFeature.SetField(21, "Mortality");
                }
                if (trees[i].isCutting)
                {
                    oFeature.SetField(22, "Cutting");
                }
                Geometry geoTree = new Geometry(wkbGeometryType.wkbPoint);
                geoTree.AddPoint(double.Parse(trees[i].X.ToString("0.00")), double.Parse(trees[i].Y.ToString("0.00")), 0);
                oFeature.SetGeometry(geoTree);
                outLayer.CreateFeature(oFeature);
            }
        }