private static void InsertItemWithDbGeographyValue() { using (ReservationContext ctx = new ReservationContext()) { AccommodationProperty accommProperty = new AccommodationProperty { Name = "Club & Hotel Letoonia", // In order: POINT(Long Lat) Location = DbGeography.FromText("POINT(29.097218832015983 36.63622153677499)") }; ctx.AccommodationProperties.Add(accommProperty); ctx.SaveChanges(); } }
private static void GetNearestAccommodationPropertiesWithSpecificDistance(DbGeography targetLocation, float distanceInKm) { using (ReservationContext ctx = new ReservationContext()) { float distanceInMeters = (distanceInKm * 1000); var accommProperties = (from accommProperty in ctx.AccommodationProperties let distance = accommProperty.Location.Distance(targetLocation) where distance <= distanceInMeters orderby distance select new { Name = accommProperty.Name, Distance = distance }).ToArray(); foreach (var accommProperty in accommProperties) { Console.WriteLine("Name: {0}, Distance: {1} meters", accommProperty.Name, accommProperty.Distance); } } }
private static void GetNearestAccommodationProperties(DbGeography targetLocation, int takeTop) { // ref: http://www.west-wind.com/weblog/posts/2012/Jun/21/Basic-Spatial-Data-with-SQL-Server-and-Entity-Framework-50 // quote: The STDistance function returns the straight line distance between the passed // in point and the point in the database field. The result for // SRID 4326 is always in meters. using (ReservationContext ctx = new ReservationContext()) { // Order by distance (nearest one is at the top) var accommProperties = (from accommProperty in ctx.AccommodationProperties let distance = accommProperty.Location.Distance(targetLocation) orderby distance select new { Name = accommProperty.Name, Distance = distance }).Take(takeTop).ToArray(); foreach (var accommProperty in accommProperties) { Console.WriteLine("Name: {0}, Distance: {1} meters", accommProperty.Name, accommProperty.Distance); } } }