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