/// <summary>
 /// 获取SDO_GEOMETRY的SDO_ELEM_INFO(维数组,仅针对简单图形)
 /// 说明:SDO_ELEM_INFO(sdo_starting_offset,sdo_etype,sdo_interpretation)
 /// SDO_STARTING_OFFSET:声明了组成当前几何片段的第一个坐标在SDO_ORDINATES数组中的坐标序号。坐标序号是从1开始起算的而非从0开始。
 /// SDO_ETYPE:声明元素的类型。
 /// SDO_ETYPE 值 = 1, 2, 1003,或2003,说明几何为简单的几何类型。可以全部按SDO_ELEM_INFO 属性单元【即三个以逗号隔开的数】来理解sdo_ordinate_array中的坐标序列。
 /// 特别说明:SDO_ETYPE 值 = 1003 ,假如几何类型为面,则表示为外多边形环(以逆时针顺序)
 ///          SDO_ETYPE 值 = 2003 ,假如几何类型为面,则表示为内多边形环(以顺时针顺序)
 /// </summary>
 /// <param name="gType"></param>
 /// <returns></returns>
 public static double[] GetElemInfo(sdogeometryTypes.GTYPE gType)
 {
     double[] arr = new double[3];
     //只支持简单类型,arr[0]=1表示SDO_ORDINATES数据第一个值开始是坐标
     arr[0] = 1;
     double type = System.Convert.ToDouble(gType);
     switch (gType)
     {
         case sdogeometryTypes.GTYPE.POINT:
             arr[1] = 1;
             arr[2] = 1;
             break;
         case sdogeometryTypes.GTYPE.LINE:
             arr[1] = 2;
             arr[2] = 1;
             break;
         case sdogeometryTypes.GTYPE.POLYGON://外围逆时针,不处理空岛的情况
             arr[1] = 1003;
             arr[2] = 1;
             break;
         case sdogeometryTypes.GTYPE.UNKNOWN_GEOMETRY:
             arr[1] = 0;
             arr[2] = -999;
             break;
         default:
             arr[1] = 1;
             arr[2] = 1;
             break;
     }
     return arr;
 }
        /// <summary>
        /// 根据SDOORDINATE坐标数组构建WKT格式的坐标串
        /// </summary>
        /// <param name="sdoOrdinate"></param>
        /// <returns></returns>
        public static string GetWKTFromSdoOrdinate(double[] sdoOrdinate,sdogeometryTypes.GTYPE gType)
        {
            string ordinateStr = string.Empty;
            ordinateStr = sdoOrdinate[0].ToString();
            for (int i = 1; i < sdoOrdinate.Length; i++)
            {
                ordinateStr += "," + sdoOrdinate[i];
            }

            if (gType == sdogeometryTypes.GTYPE.POINT)
            {
                if (sdoOrdinate.Length != 2)
                {
                    throw new ArgumentNullException("点图形坐标数目不正确。");
                }
                ordinateStr = "Point(" + sdoOrdinate[0].ToString() + " " + sdoOrdinate[1].ToString() + ")";
            }
            else if (gType == sdogeometryTypes.GTYPE.LINE)
            {
                if (sdoOrdinate.Length < 4)
                {
                    throw new ArgumentNullException("线图形坐标数目不正确。");
                }
                ordinateStr = "LINESTRING (";
                for (int i = 0; i < sdoOrdinate.Length; i++)
                {
                    if (i % 2 == 0)//偶数:0,2,4,6……
                    {
                        ordinateStr += sdoOrdinate[i] + " ";
                    }
                    else if (i % 2 == 1)//奇数:1,,35,7……
                    {
                        ordinateStr += sdoOrdinate[i] + ",";
                    }
                }
                ordinateStr += ")";
            }
            else if (gType == sdogeometryTypes.GTYPE.POLYGON)
            {
                if (sdoOrdinate.Length < 6)
                {
                    throw new ArgumentNullException("面图形坐标数目不正确。");
                }
                ordinateStr = "POLYGON ((";
                for (int i = 0; i < sdoOrdinate.Length; i++)
                {
                    if (i % 2 == 0)//偶数:0,2,4,6……
                    {
                        ordinateStr += sdoOrdinate[i] + " ";
                    }
                    else if (i % 2 == 1)//奇数:1,,35,7……
                    {
                        ordinateStr += sdoOrdinate[i] + ",";
                    }
                }
                ordinateStr += "))";
            }
            return ordinateStr;
        }