我正在尝试在我的页面上集成Google Map,但在我集成之前,我需要从数据库中提取数据,我需要提取一个地方的lat和lon然后我想要提取那些地方也在提取的地方lat / lon附近。
我有一个需要mofiication的查询
public static List<PlaceMap> GetPlace(this IEnumerable<Place> places, string hotelName, ref DataEntities ctx)
{
var place= ctx.places
.Where(h=>h.HotelName==hotelName)
.Select(s => new PlaceMap
{
PlaceName= s.PlaceName,
Latitude = s.Latitude,
Longitude = s.Longitude,
NearByPlaces = ????
}).SingleOrDefault();
return place;
}
答案 0 :(得分:2)
查看实体框架的DBGeography:
public static List<PlaceMap> GetPlace(this IEnumerable<Place> places, string hotelName, ref DataEntities ctx)
{
var place= ctx.places
.Where(h=>h.HotelName==hotelName)
.Select(s => new PlaceMap
{
PlaceName= s.PlaceName,
Latitude = s.Latitude,
Longitude = s.Longitude,
NearByPlaces = ctx.places.Where
(
x=>
DbGeography.FromText("POINT(" + s.Longitude + " " + s.Latitude + ")")
.Distance
(
DbGeography.FromText("POINT(" + x.Longitude + " " + x.Latitude + ")")
) < YourRadiousInMeters
)
}).SingleOrDefault();
return place;
}
答案 1 :(得分:0)
NearByPlaces = (from p in ctx.places
where p.Latitude > s.Latitude - latrange &&
p.Latitude < s.Latitude + latrange &&
p.Longitude > s.Longitude - longrange &&
p.Longitude < S.Longitude + longrange
select /* whatever */).ToArray()
话虽这么说,如果你有很多地方(例如数百万)并且你的数据库上没有空间索引,那么这样的查询可能效率很低。显然,为了获得空间索引,您需要使用空间类型来存储位置,而不是单独的纬度和经度列。在SQL Server中,您将使用SqlGeography列。可以将实体框架作为DbGeography进行查询。
这应该回答您的实际问题,但它当然不会解决您的方法的其他问题,请参阅其他人发布到您的问题的评论。