I have database and in it I have class hotel with gps coordinates. I want to get closest places to coordinates which I choose.
I think It should look like this (I found
I post here my solution which I am using for now. But I choose GwynnBliedd answer because he solves my problem in question.
I added DbGeography type to my class and I am using it instead of saving latitude and longitude in database.
locationField = DbGeography.FromText(String.Format("POINT({0} {1})", orig.gps.lat.ToString().Replace(",", "."), orig.gps.lng.ToString().Replace(",", ".")));
Then it's very easy to use linq:
var coord = DbGeography.FromText(String.Format("POINT({0} {1})", latitude.ToString().Replace(",", "."), longitude.ToString().Replace(",", ".")));
var nearest = (from h in db.hotels
where h.location != null
orderby h.location.Distance(coord)
select h).Take(limit);
return nearest;
For now this is working solution and it's good. For sometime I would be using this but as few users said here I'll maybe try UDF with implementing Haversine formula (like in this answer).