Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find closest location with longitude and latitude

Tags:

c#

linq

I am working on a application where I need to get nearby location, my web service will receive 2 parameters (decimal longitude, decimal latitude )

I have a table where the locations are saved in database with longitude and latitude fields,

I want to retrieve the nearest locations.

Can anyone help?

Here is my code:

 var locations = from l in locations       select l 

Here are further details about this : i have a 2 fields (decimal(18, 2) null) 1 latitude, 2 longitude inside a database table,

and i have a method

public List<Locations>  GetLocation(decimal? Long, decimal? lat)  { var Loc = from l in Locations   //// now here is how to get nearest location ? how to query?   //// i have also tried Math.Abs(l.Lat - lat) its giving error about nullable decimal always hence i have seted decimal to nullable or converted to nullable  //// also i have tried where (l.lat - Lat) * (l.lon - Long)  this is also giving error about can not convert decimal to bool return Loc.ToList(); } 
like image 389
Ashfaque Ali Solangi Avatar asked Oct 11 '12 08:10

Ashfaque Ali Solangi


People also ask

How do I find the nearest location using latitude and longitude in Excel?

To get the latitude of the address in cell B2, use the formula = GetLatitude(B2) To get the longitude of the address in cell B2, use the formula = GetLongitude(B2) To get both the latitude and longitude of the address in cell B2, use the formula = GetCoordinates(B2)

How do I find the nearest location using latitude and longitude in C#?

Format("POINT({0} {1})", longitude, latitude)); var nearbyLocations = (from location in _context. Locations where // (Additional filtering criteria here...) select new { LocationID = location.ID, Address1 = location. Address1, City = location. City, State = location.


1 Answers

You could first convert the location data in database to System.Device.Location.GeoCoordinate, then use LINQ to find the nearest one.

var coord = new GeoCoordinate(latitude, longitude); var nearest = locations.Select(x => new GeoCoordinate(x.Latitude, x.Longitude))                        .OrderBy(x => x.GetDistanceTo(coord))                        .First(); 
like image 133
Fung Avatar answered Oct 18 '22 13:10

Fung