static void Main(string[] args) { DbGeometry test = DbGeometry.FromText("POLYGON((1 1, 1 2, 3 3, 1 1))"); var foo = test.AsText(); var points = new List <Point>(); Console.WriteLine(foo); if (foo.StartsWith("POLYGON ((") && foo.EndsWith("))")) { foo = foo.Substring(10, foo.Length - 12); var rawPoints = foo.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (var rawPoint in rawPoints) { var splitPoint = rawPoint.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); points.Add(new Point() { X = decimal.Parse(splitPoint[1]), Y = decimal.Parse(splitPoint[0]) }); } } foreach (var point in points) { Console.WriteLine(point.ToString()); } Console.ReadKey(); }
public static DbGeometry MakeValid(DbGeometry geom) { if (geom.IsValid) { return(geom); } return(DbGeometry.FromText(SqlGeometry.STGeomFromText(new SqlChars(geom.AsText()), 4326).MakeValid().STAsText().ToSqlString().ToString(), 4326)); }
/// <summary> /// Generates code to specify the default value for a <see cref="DbGeometry" /> column. /// </summary> /// <param name="defaultValue"> The value to be used as the default. </param> /// <returns> Code representing the default value. </returns> protected virtual string Generate(DbGeometry defaultValue) { return("DbGeometry.FromText(\"" + defaultValue.AsText() + "\", " + defaultValue.CoordinateSystemId + ")"); }
private static void extractPolygon(JObject feature, Dictionary <string, Point3D> labeledPoints, ApplicationDbContext context , List <Point3D> badPolygonsPoints, List <POI> poisToSave) { POI poi = new POI(); poi.Type = null; Polygone toReturn = new Polygone(); toReturn.Points = new List <Point3D>(); int level = int.Parse(feature["properties"]["level"].ToString()); //bool isAccessible = Boolean.Parse(feature["properties"]["accessible"].ToString()); toReturn.Level = level; StringBuilder wktsb = new StringBuilder("POLYGON (("); List <Point3D> labeledPointsFound = new List <Point3D>(); foreach (JArray j in feature["geometry"]["coordinates"][0]) { StringBuilder pointWkt = new StringBuilder("POINT ("); string lon = Regex.Match(j.ToString(), "34\\.\\d+").Value; string lat = Regex.Match(j.ToString(), "32\\.\\d+").Value; wktsb.Append(lon + " " + lat + ","); pointWkt.Append(lon + " " + lat + ")"); if (!toReturn.Points.Exists(Point3D => Point3D.Wkt == pointWkt.ToString())) { if (labeledPoints.ContainsKey(pointWkt.ToString())) { labeledPointsFound.Add(labeledPoints[pointWkt.ToString()]); toReturn.Points.Add(labeledPoints[pointWkt.ToString()]); //break; } else { DbGeometry pointG = DbGeometry.PointFromText(pointWkt.ToString(), 4326); Point3D point = new Point3D { Longitude = Decimal.Parse(lon), Latitude = Decimal.Parse(lat), Wkt = pointWkt.ToString(), LocationG = pointG, Level = level }; toReturn.Points.Add(point); } } } wktsb.Remove(wktsb.Length - 1, 1); wktsb.Append("))"); toReturn.Wkt = wktsb.ToString(); try { DbGeometry polygone = DbGeometry.PolygonFromText(wktsb.ToString(), 4326); if (!polygone.IsValid) { polygone = DbGeometry.FromText(SqlGeometry.STGeomFromText(new SqlChars(polygone.AsText()), 4326).MakeValid().STAsText().ToSqlString().ToString(), 4326); } foreach (Point3D point in badPolygonsPoints) { if (polygone.Contains(point.LocationG)) { return; } } toReturn.LocationG = polygone; } catch (Exception ex) { ex = ex; } // polygon with no info if (labeledPointsFound.Count == 0) { return; } // polygon with more than one anchor point - check if it is 2 entrances if (labeledPointsFound.Count > 1) { if (labeledPointsFound[0].Areas.Count != labeledPointsFound[1].Areas.Count) { return; } else { for (int i = 0; i < labeledPointsFound[0].Areas.Count; i++) { if (!labeledPointsFound[0].Areas[i].AreaID.Equals(labeledPointsFound[1].Areas[i].AreaID)) { return; } } } } Point3D labeledPoint = labeledPointsFound[0]; if (labeledPoint != null) { toReturn.Areas = labeledPoint.Areas; if (labeledPoint.Areas != null && labeledPoint.Areas.Count > 0 && !labeledPoint.Areas[0].AreaID.StartsWith("9")) { poi.Type = POI.POIType.STORE; } if (labeledPoint.Name.ToLower().Contains("atm")) { poi.Type = POI.POIType.ATM; } if (labeledPoint.Name.ToLower().Contains("entrance")) { poi.Type = POI.POIType.ENTRANCE; } if (labeledPoint.Name.ToLower().Contains("toilet") | labeledPoint.Name.ToLower().Contains("wc")) { poi.Type = POI.POIType.WC; } if (labeledPoint.Name.ToLower().Contains("zone")) { poi.Type = POI.POIType.ZONE; } } if (poi.Type != null) { switch (poi.Type) { case POI.POIType.STORE: { poi = new Store { Type = poi.Type, Anchor = labeledPoint, Enabled = true , Floor = level, IsAccessible = labeledPoint.IsAccessible, Name = labeledPoint.Name, Name2 = labeledPoint.Name2, Location = toReturn, Entrances = new List <Point3D>() }; foreach (Point3D entrancePoint in labeledPointsFound) { ((Store)poi).Entrances.Add(entrancePoint); } //context.Stores.AddOrUpdate(new Store[] { (Store)poi }); break; } default: { poi = new POI { Type = poi.Type, Anchor = labeledPoint, Enabled = true, Name = labeledPoint.Name, Location = toReturn }; //poisToSave.Add(poi); break; } } poisToSave.Add(poi); } //return poi; }
public override void Visit(DbConstantExpression e) { Check.NotNull <DbConstantExpression>(e, nameof(e)); switch (((PrimitiveType)TypeHelpers.GetPrimitiveTypeUsageForScalar(e.ResultType).EdmType).PrimitiveTypeKind) { case PrimitiveTypeKind.Binary: byte[] numArray = e.Value as byte[]; if (numArray == null) { throw new NotSupportedException(); } this._key.Append("'"); foreach (int num in numArray) { this._key.AppendFormat("{0:X2}", (object)(byte)num); } this._key.Append("'"); break; case PrimitiveTypeKind.Boolean: case PrimitiveTypeKind.Byte: case PrimitiveTypeKind.Decimal: case PrimitiveTypeKind.Double: case PrimitiveTypeKind.Guid: case PrimitiveTypeKind.Single: case PrimitiveTypeKind.SByte: case PrimitiveTypeKind.Int16: case PrimitiveTypeKind.Int32: case PrimitiveTypeKind.Int64: case PrimitiveTypeKind.Time: this._key.AppendFormat((IFormatProvider)CultureInfo.InvariantCulture, "{0}", e.Value); break; case PrimitiveTypeKind.DateTime: this._key.Append(((DateTime)e.Value).ToString("o", (IFormatProvider)CultureInfo.InvariantCulture)); break; case PrimitiveTypeKind.String: string str = e.Value as string; if (str == null) { throw new NotSupportedException(); } this._key.Append("'"); this._key.Append(str.Replace("'", "''")); this._key.Append("'"); break; case PrimitiveTypeKind.DateTimeOffset: this._key.Append(((DateTimeOffset)e.Value).ToString("o", (IFormatProvider)CultureInfo.InvariantCulture)); break; case PrimitiveTypeKind.Geometry: case PrimitiveTypeKind.GeometryPoint: case PrimitiveTypeKind.GeometryLineString: case PrimitiveTypeKind.GeometryPolygon: case PrimitiveTypeKind.GeometryMultiPoint: case PrimitiveTypeKind.GeometryMultiLineString: case PrimitiveTypeKind.GeometryMultiPolygon: case PrimitiveTypeKind.GeometryCollection: DbGeometry dbGeometry = e.Value as DbGeometry; if (dbGeometry == null) { throw new NotSupportedException(); } this._key.Append(dbGeometry.AsText()); break; case PrimitiveTypeKind.Geography: case PrimitiveTypeKind.GeographyPoint: case PrimitiveTypeKind.GeographyLineString: case PrimitiveTypeKind.GeographyPolygon: case PrimitiveTypeKind.GeographyMultiPoint: case PrimitiveTypeKind.GeographyMultiLineString: case PrimitiveTypeKind.GeographyMultiPolygon: case PrimitiveTypeKind.GeographyCollection: DbGeography dbGeography = e.Value as DbGeography; if (dbGeography == null) { throw new NotSupportedException(); } this._key.Append(dbGeography.AsText()); break; default: throw new NotSupportedException(); } this._key.Append(":"); this._key.Append(e.ResultType.Identity); }
public static string ToWkt(DbGeometry geom) { return(geom.AsText()); }