/// <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)); }
/// <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); }