/// <summary>
 /// 根据ShapeLib的图形类型返回SDO_GEOMETRY的图形类型
 /// </summary>
 /// <param name="shapeType"></param>
 /// <returns></returns>
 /// <remark>只处理2D图形中的普通类型,如点、线、面;不处理3D和曲线;</remark>>
 public static sdogeometryTypes.GTYPE GetSdoGType(ShapeLib.ShapeType shapeType)
 {
     sdogeometryTypes.GTYPE gType = sdogeometryTypes.GTYPE.UNKNOWN_GEOMETRY;
     switch (shapeType)
     {
         case ShapeLib.ShapeType.Point:
             gType = sdogeometryTypes.GTYPE.POINT;
             break;
         case ShapeLib.ShapeType.PolyLine:
             gType = sdogeometryTypes.GTYPE.LINE;
             break;
         case ShapeLib.ShapeType.Polygon:
             gType = sdogeometryTypes.GTYPE.POLYGON;
             break;
         case ShapeLib.ShapeType.MultiPoint:
             gType = sdogeometryTypes.GTYPE.MULTIPOINT;
             break;
         default:
             break;
     }
     return gType;
 }
 /// <summary>
 /// 根据ShapeLib的图形类型返回SDO_GEOMETRY图形的值
 /// </summary>
 /// <param name="shapeType"></param>
 /// <returns>decimal</returns>
 /// <remark>只处理2D图形中的普通类型,如点、线、面;不处理3D和曲线;</remark>>
 public static double GetSdoGTypeValue(ShapeLib.ShapeType shapeType)
 {
     return System.Convert.ToDouble(GetSdoGType(shapeType));
 }
示例#3
0
        /// <summary>
        /// Creates the database file that contains meta data about the shapes.
        /// </summary>
        /// <param name="shapetype"></param>
        /// <param name="SHPFile"></param>
        private void WriteDBF(ShapeLib.ShapeType shapetype, string SHPFile, bool convertTags)
        {
            string filename;
            int shapes = 0;
            List<MetaData> elementData;
            List<string> fields = new List<string>();

            switch (shapetype)
            {
                case ShapeLib.ShapeType.Polygon:
                    filename = SHPFile + "-polygons";
                    shapes = areas;
                    elementData = polygonsData;
                    break;
                case ShapeLib.ShapeType.PolyLine:
                    filename = SHPFile + "-lines";
                    shapes = ways;
                    elementData = linesData;
                    break;
                case ShapeLib.ShapeType.Point:
                    filename = SHPFile + "-points";
                    shapes = points;
                    elementData = pointsData;
                    break;
                default:
                    return;
            }

            IntPtr hDbf = ShapeLib.DBFCreate(filename);
            if (hDbf.Equals(IntPtr.Zero))
            {
                Console.WriteLine("Error:  Unable to create {0}.dbf!", filename);
                return;
            }

            // add some fields. Fields have to be initialized before data is added
            int iRet = ShapeLib.DBFAddField(hDbf, "shapeID", ShapeLib.DBFFieldType.FTInteger, 4, 0);
            iRet = ShapeLib.DBFAddField(hDbf, "shapeName", ShapeLib.DBFFieldType.FTString, 50, 0);
            // if tags have to be converted, collect the names of all tags
            if (convertTags)
            {
                for (int iShape = 0; iShape < shapes; iShape++)
                {
                    foreach (KeyValuePair<string, string> entry in elementData[iShape].Tags)
                    {
                        // Make sure that fields are only added once
                        if (!fields.Contains(entry.Key))
                        {
                            fields.Add(entry.Key);
                        }
                    }
                }
                // create fields in the DB for all tags
                foreach (string field in fields)
                {
                    iRet = ShapeLib.DBFAddField(hDbf, field, ShapeLib.DBFFieldType.FTString, 128, 0);
                }
            }

            // populate
            for (int iShape = 0; iShape < shapes; iShape++)
            {
                iRet = (ShapeLib.DBFWriteIntegerAttribute(hDbf, iShape, 0, iShape));
                iRet = (ShapeLib.DBFWriteStringAttribute(hDbf, iShape, 1, elementData[iShape].Name));
                // If tags should be converted, write their values to the appropriate fields
                if (convertTags)
                {
                    foreach (KeyValuePair<string, string> entry in elementData[iShape].Tags)
                    {
                        // Cut the entry after 128 characters
                        int stringLength = entry.Value.Length;
                        if (stringLength > 127)
                        {
                            stringLength = 127;
                        }
                        iRet = ShapeLib.DBFWriteStringAttribute(hDbf, iShape, fields.IndexOf(entry.Key) + 2, entry.Value.Substring(0, stringLength));
                    }
                }
            }

            ShapeLib.DBFClose(hDbf);
        }