コード例 #1
0
        /// <summary>
        /// Try to get value from WKT format
        /// SRID=0;POINT (x y) or POINT (x y)
        /// </summary>
        /// <param name="value">WKT string format</param>
        public static bool TryParse(string value, out MySqlGeometry mySqlGeometryValue)
        {
            string[] arrayResult = new string[0];
            string   strResult   = string.Empty;
            bool     hasX        = false;
            bool     hasY        = false;
            Double   xVal        = 0;
            Double   yVal        = 0;
            int      sridValue   = 0;

            try
            {
                if (value.Contains(";"))
                {
                    arrayResult = value.Split(';');
                }
                else
                {
                    strResult = value;
                }

                if (arrayResult.Length > 1 || strResult != String.Empty)
                {
                    string point = strResult != String.Empty ? strResult : arrayResult[1];
                    point = point.Replace("POINT (", "").Replace("POINT(", "").Replace(")", "");
                    var coord = point.Split(' ');
                    if (coord.Length > 1)
                    {
                        hasX = Double.TryParse(coord[0], out xVal);
                        hasY = Double.TryParse(coord[1], out yVal);
                    }
                    if (arrayResult.Length >= 1)
                    {
                        Int32.TryParse(arrayResult[0].Replace("SRID=", ""), out sridValue);
                    }
                }
                if (hasX && hasY)
                {
                    mySqlGeometryValue = new MySqlGeometry(xVal, yVal, sridValue);
                    return(true);
                }
            }
            catch
            {  }

            mySqlGeometryValue = new MySqlGeometry(true);
            return(false);
        }
コード例 #2
0
        /// <summary>
        /// Get value from WKT format
        /// SRID=0;POINT (x y) or POINT (x y)
        /// </summary>
        /// <param name="value">WKT string format</param>
        public static MySqlGeometry Parse(string value)
        {
            if (String.IsNullOrEmpty(value))
            {
                throw new ArgumentNullException("value");
            }

            if (!(value.Contains("SRID") || value.Contains("POINT(") || value.Contains("POINT (")))
            {
                throw new FormatException("String does not contain a valid geometry value");
            }

            MySqlGeometry result = new MySqlGeometry(0, 0);

            MySqlGeometry.TryParse(value, out result);

            return(result);
        }
コード例 #3
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            MySqlGeometry g;

            if (nullVal)
            {
                g = new MySqlGeometry(_type, true);
            }
            else
            {
                if (length == -1)
                {
                    length = (long)packet.ReadFieldLength();
                }

                byte[] newBuff = new byte[length];
                packet.Read(newBuff, 0, (int)length);
                g = new MySqlGeometry(_type, newBuff);
            }
            return(g);
        }
コード例 #4
0
        void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
        {
            byte[] buffToWrite = null;

            try
            {
                buffToWrite = ((MySqlGeometry)val)._valBinary;
            }
            catch
            {
                buffToWrite = val as Byte[];
            }

            if (buffToWrite == null)
            {
                MySqlGeometry v = new MySqlGeometry(0, 0);
                MySqlGeometry.TryParse(val.ToString(), out v);
                buffToWrite = v._valBinary;
            }

            byte[] result = new byte[GEOMETRY_LENGTH];

            for (int i = 0; i < buffToWrite.Length; i++)
            {
                if (buffToWrite.Length < GEOMETRY_LENGTH)
                {
                    result[i + 4] = buffToWrite[i];
                }
                else
                {
                    result[i] = buffToWrite[i];
                }
            }

            packet.WriteStringNoNull("_binary ");
            packet.WriteByte((byte)'\'');
            EscapeByteArray(result, GEOMETRY_LENGTH, packet);
            packet.WriteByte((byte)'\'');
        }
コード例 #5
0
    /// <summary>
    /// Try to get value from WKT format
    /// SRID=0;POINT (x y) or POINT (x y)
    /// </summary>
    /// <param name="value">WKT string format</param>    
    public static bool TryParse(string value, out MySqlGeometry mySqlGeometryValue)
    {
      string[] arrayResult = new string[0];
      string strResult = string.Empty;
      bool hasX = false;
      bool hasY = false;
      Double xVal = 0;
      Double yVal = 0;
      int sridValue = 0;

      try
      {
        if (value.Contains(";"))
          arrayResult = value.Split(';');
        else
          strResult = value;

        if (arrayResult.Length > 1 || strResult != String.Empty)
        {
          string point = strResult != String.Empty ? strResult : arrayResult[1];
          point = point.Replace("POINT (", "").Replace("POINT(", "").Replace(")", "");
          var coord = point.Split(' ');
          if (coord.Length > 1)
          {
            hasX = Double.TryParse(coord[0], out xVal);
            hasY = Double.TryParse(coord[1], out yVal);
          }
          if (arrayResult.Length >= 1)
            Int32.TryParse(arrayResult[0].Replace("SRID=", ""), out sridValue);
        }
        if (hasX && hasY)
        {
          mySqlGeometryValue = new MySqlGeometry(xVal, yVal, sridValue);
          return true;
        }
      }
      catch
      {  }
      
      mySqlGeometryValue = new MySqlGeometry(true);
      return false; 
    }
コード例 #6
0
    /// <summary>
    /// Get value from WKT format
    /// SRID=0;POINT (x y) or POINT (x y)
    /// </summary>
    /// <param name="value">WKT string format</param>    
    public static MySqlGeometry Parse(string value)
    {
      if (String.IsNullOrEmpty(value))
        throw new ArgumentNullException("value");

      if (!(value.Contains("SRID") || value.Contains("POINT(") || value.Contains("POINT (")))
        throw new FormatException("String does not contain a valid geometry value");

      MySqlGeometry result = new MySqlGeometry(0,0);
      MySqlGeometry.TryParse(value, out result);

      return result;
    }
コード例 #7
0
    IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
    {
      MySqlGeometry g;
      if (nullVal)
        g = new MySqlGeometry(_type, true);
      else
      {
        if (length == -1)
          length = (long)packet.ReadFieldLength();

        byte[] newBuff = new byte[length];
        packet.Read(newBuff, 0, (int)length);
        g = new MySqlGeometry(_type, newBuff);        
      }
      return g;
    }
コード例 #8
0
    void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
    {
      byte[] buffToWrite = null;
     
      try
      {
        buffToWrite = ((MySqlGeometry)val)._valBinary;        
      }
      catch 
      {
        buffToWrite = val as Byte[];
      }

      if (buffToWrite == null)
      {
        MySqlGeometry v = new MySqlGeometry(0, 0);
        MySqlGeometry.TryParse(val.ToString(), out v);
        buffToWrite = v._valBinary;
      }

      byte[] result = new byte[GEOMETRY_LENGTH];
     
      for (int i = 0; i < buffToWrite.Length; i++)
      {
       if (buffToWrite.Length < GEOMETRY_LENGTH)
         result[i + 4] = buffToWrite[i];
       else
        result[i] = buffToWrite[i];
      }
      
        packet.WriteStringNoNull("_binary ");
        packet.WriteByte((byte)'\'');
        EscapeByteArray(result, GEOMETRY_LENGTH, packet);
        packet.WriteByte((byte)'\'');      
    }