WCF REST 根据请求距离,返回附近用户的实例
来源:互联网 发布:.net网络爬虫 多线程 编辑:程序博客网 时间:2024/04/29 23:49
更新当前用户的坐标,并返回附近用户列表:
1.请求实体(UserLocationRequest):
public class UserLocationRequest { [DataMember(Name = "id")] public Guid ID { get; set; } //经度 [DataMember(Name = "longitude")] public decimal Longitude { get; set; } //纬度 [DataMember(Name = "latitude")] public decimal Latitude { get; set; } //距离/千米 [DataMember(Name = "distance")] public decimal Distance{ get; set; } }
2.IUserService:
/// <summary> /// 更新用户个人坐标,并根据距离单位返回附近用户 /// </summary> /// <returns></returns> [WebInvoke(UriTemplate = "/GetUserByDistance", Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)] IList<UserResponse> GetUserByDistance(UserLocationRequest request);
3.UserService:
public IList<UserResponse> GetUserByDistance(UserLocationRequest request) { try { User user = _db.Users.Single(m => m.ID == request.ID); if (user != null) { user.Longitude = request.Longitude; user.Latitude = request.Latitude; _db.SaveChanges(); // GetUserByDistance 定义在数据库的存储过程,下面会附上(谨记对好参数顺序和逗号) const string sql = "exec GetUserByDistance @UserID,@Distance,@Longitude,@Latitude "; SqlParameter[] parameters = new[] { new SqlParameter("@UserID", request.ID), new SqlParameter("@Distance", request.Distance), new SqlParameter("@Longitude", request.Longitude), new SqlParameter("@Latitude", request.Latitude), }; return _db.Database.SqlQuery<UserResponse>(sql, parameters).ToList(); } } catch (Exception) { return null; } return null; }
USE [XXX]GO/****** Object: StoredProcedure [dbo].[GetUserByDistance] Script Date: 12/21/2013 00:39:38 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<Author,,Name>-- Create date: <Create Date,,>-- Description:<Description,,>-- =============================================ALTER PROCEDURE [dbo].[GetUserByDistance]@UserID uniqueidentifier,@Distance decimal(18,4),@Longitude decimal(18,4),@Latitude decimal(18,4)ASBEGIN select *from (select ID,LoginName,Nickname,Intro,HeadImgUrl,dbo.fnGetDistance(Longitude,Latitude,@Longitude,@Latitude) as Distance from Users where Latitude!=0 and Longitude!=0 and ID!=@UserID) T where Distance<=@DistanceEND
5.用到计算两经纬度距离的函数(fnGetDistance):
USE [LingLiTong]GO/****** Object: UserDefinedFunction [dbo].[fnGetDistance] Script Date: 12/21/2013 22:13:40 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE FUNCTION [dbo].[fnGetDistance](@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNS FLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EARTH_RADIUS REAL SET @EARTH_RADIUS = 6378.137 DECLARE @RadLatBegin REAL,@RadLatEnd REAL,@RadLatDiff REAL,@RadLngDiff REAL SET @RadLatBegin = @LatBegin *PI()/180.0 SET @RadLatEnd = @LatEnd *PI()/180.0 SET @RadLatDiff = @RadLatBegin - @RadLatEnd SET @RadLngDiff = @LngBegin *PI()/180.0 - @LngEnd *PI()/180.0 SET @Distance = 2 *ASIN(SQRT(POWER(SIN(@RadLatDiff/2), 2)+COS(@RadLatBegin)*COS(@RadLatEnd)*POWER(SIN(@RadLngDiff/2), 2))) SET @Distance = @Distance * @EARTH_RADIUS -- SET @Distance = Round(@Distance * 10000) / 10000 RETURN @Distance ENDGO
6.User实体:
public class User { public Guid ID { get; set; } public String LoginName { get; set; } //登录名 public String Password { get; set; } //密码 .... public decimal Longitude { get; set; } //经度 public decimal Latitude { get; set; } //纬度 }
7.UserResponse
public class UserResponse { [DataMember(Name = "id")] public Guid ID { get; set; } [DataMember(Name = "nickname")] public String Nickname { get; set; } [DataMember(Name = "distance")] public double Distance { get; set; } }
0 0
- WCF REST 根据请求距离,返回附近用户的实例
- WCF REST 上传用户头像图片实例
- PHP微信开发---根据用户回复的关键词和位置,返回附近的信息
- 根据GEOHASH,查找附近的人,判断距离远
- [WCF REST] 一个简单的REST服务实例
- 根据经纬度获取附近的数据、和与当前经纬度的距离
- 根据经纬度获取附近的数据、和与当前经纬度的距离
- 根据一个给定经纬度的点和距离,进行附近地点查询
- WCF解析jason返回的小实例
- WCF 实例 —— 基于ADO.NET POCO Entity Framework的REST WCF
- WCF 实例 —— 基于ADO.NET POCO Entity Framework的REST WCF
- WCF 实例 —— 基于ADO.NET POCO Entity Framework的REST WCF
- 发送rest请求获取返回值的方法
- tpshop商城根据用户坐标,向数据库查找附近的商家
- 找出附近距离自己最近的店家
- 附近的人位置距离计算方法
- 基于WCF的REST服务
- Geohash距离估算 附近的人的距离
- 游戏程序中的骨骼插件
- WCF REST 上传用户头像图片实例
- 微服务架构解析
- 抽象编程
- 健身资料
- WCF REST 根据请求距离,返回附近用户的实例
- Numpy 数组基础操作--索引、组合、分割、复制、遍历、转换、序列化(四)
- vimball
- Himi浅谈游戏开发de自学历程!(仅供参考)
- cocos2d 各种字体名称及其效果
- Nginx初步-1:架设Nginx服务器
- Nginx初步-2: 添加nginx-upload-module模块
- Matlab计算机视觉/图像处理工具箱推荐
- IOS学习笔记 运用Quartz 2D框架绘图理论基础(1)