- 浏览: 189544 次
- 性别:
- 来自: 广州
文章分类
最新评论
摘要:目前的工作是需要手机查找附近N米以内的商户,功能如下图数据库中记录了商家在百度标注的经纬度(如:116.412007,39.947545),最初想法以圆心点为中心点,对半径做循环,半径每增加一个像素(暂定1米)再对周长做循环,到数据库中查询对应点的商家(真是一个长时间的循环工作)上网百度类似的文章有了点眉目大致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,这样的话就需要知道所要求的这个圆的对角线的顶点,问题来了经纬度是一个点,半径是一个距离
数据库中记录了商家在百度标注的经纬度(如:116.412007, 39.947545),
最初想法 以圆心点为中心点,对半径做循环,半径每增加一个像素(暂定1米)再对周长做循环,到数据库中查询对应点的商家(真是一个长时间的循环工作)
上网百度类似的文章有了点眉目
大致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,这样的话就需要知道所要求的这个圆的对角线的顶点,问题来了 经纬度是一个点,半径是一个距离,不能直接加减
终于找到想要的文章
http://digdeeply.org/archives/06152067.html
参考原文章 lz改成了C#类
参考附件11111
以下是代码:
数据库中计算的方式
6371.004 地球半径
6371.004*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+COS(@GPSLat/180*PI())*COS(@Lat/180*PI())*COS((@GPSLng-@Lng)/180*PI())) 计算公式 可查球面弧长计算公式的详细解释【弧长也就是两点之间的距离了】
数据库中记录了商家在百度标注的经纬度(如:116.412007, 39.947545),
最初想法 以圆心点为中心点,对半径做循环,半径每增加一个像素(暂定1米)再对周长做循环,到数据库中查询对应点的商家(真是一个长时间的循环工作)
上网百度类似的文章有了点眉目
大致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,这样的话就需要知道所要求的这个圆的对角线的顶点,问题来了 经纬度是一个点,半径是一个距离,不能直接加减
终于找到想要的文章
http://digdeeply.org/archives/06152067.html
参考原文章 lz改成了C#类
参考附件11111
以下是代码:
/// <summary> /// 经纬度坐标 /// </summary> public class Degree { public Degree(double x, double y) { X = x; Y = y; } private double x; public double X { get { return x; } set { x = value; } } private double y; public double Y { get { return y; } set { y = value; } } } public class CoordDispose { private const double EARTH_RADIUS = 6378137.0;//地球半径(米) /// <summary> /// 角度数转换为弧度公式 /// </summary> /// <param name="d"></param> /// <returns></returns> private static double radians(double d) { return d * Math.PI / 180.0; } /// <summary> /// 弧度转换为角度数公式 /// </summary> /// <param name="d"></param> /// <returns></returns> private static double degrees(double d) { return d * (180 / Math.PI); } /// <summary> /// 计算两个经纬度之间的直接距离 /// </summary> public static double GetDistance(Degree Degree1, Degree Degree2) { double radLat1 = radians(Degree1.X); double radLat2 = radians(Degree2.X); double a = radLat1 - radLat2; double b = radians(Degree1.Y) - radians(Degree2.Y); double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))); s = s * EARTH_RADIUS; s = Math.Round(s * 10000) / 10000; return s; } /// <summary> /// 计算两个经纬度之间的直接距离(google 算法) /// </summary> public static double GetDistanceGoogle(Degree Degree1, Degree Degree2) { double radLat1 = radians(Degree1.X); double radLng1 = radians(Degree1.Y); double radLat2 = radians(Degree2.X); double radLng2 = radians(Degree2.Y); double s = Math.Acos(Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Cos(radLng1 - radLng2) + Math.Sin(radLat1) * Math.Sin(radLat2)); s = s * EARTH_RADIUS; s = Math.Round(s * 10000) / 10000; return s; } /// <summary> /// 以一个经纬度为中心计算出四个顶点 /// </summary> /// <param name="distance">半径(米)</param> /// <returns></returns> public static Degree[] GetDegreeCoordinates(Degree Degree1, double distance) { double dlng = 2 * Math.Asin(Math.Sin(distance / (2 * EARTH_RADIUS)) / Math.Cos(Degree1.X)); dlng = degrees(dlng);//一定转换成角度数 原PHP文章这个地方说的不清楚根本不正确 后来lz又查了很多资料终于搞定了 double dlat = distance / EARTH_RADIUS; dlat = degrees(dlat);//一定转换成角度数 return new Degree[] { new Degree(Math.Round(Degree1.X + dlat,6), Math.Round(Degree1.Y - dlng,6)),//left-top new Degree(Math.Round(Degree1.X - dlat,6), Math.Round(Degree1.Y - dlng,6)),//left-bottom new Degree(Math.Round(Degree1.X + dlat,6), Math.Round(Degree1.Y + dlng,6)),//right-top new Degree(Math.Round(Degree1.X - dlat,6), Math.Round(Degree1.Y + dlng,6)) //right-bottom }; } } //调用方法 static void Main(string[] args) { double a = CoordDispose.GetDistance(new Degree(116.412007, 39.947545), new Degree(116.412924, 39.947918));//116.416984,39.944959 double b = CoordDispose.GetDistanceGoogle(new Degree(116.412007, 39.947545), new Degree(116.412924, 39.947918)); Degree[] dd = CoordDispose.GetDegreeCoordinates(new Degree(116.412007, 39.947545), 102); Console.WriteLine(a+" "+b); Console.WriteLine(dd[0].X + "," + dd[0].Y ); Console.WriteLine(dd[3].X + "," + dd[3].Y); Console.ReadLine(); }
数据库中计算的方式
6371.004 地球半径
6371.004*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+COS(@GPSLat/180*PI())*COS(@Lat/180*PI())*COS((@GPSLng-@Lng)/180*PI())) 计算公式 可查球面弧长计算公式的详细解释【弧长也就是两点之间的距离了】
发表评论
-
枚举类型帮助类 EnumHelper
2019-09-02 11:29 520项目中出现的问题: 项目中会有很多地方用到文字提醒,如果在每个 ... -
C# zip文件解压压缩帮助类
2019-08-30 11:43 585原文: https://www.cnblogs.com/sun ... -
使用ITextSharp对pdf文件打水印
2019-08-19 17:13 783在项目中需要对pdf文件中的部分信息进行遮挡隐藏,于是找到了I ... -
HMAC_SHA1加密
2019-08-16 10:36 981hmacsha1在很多签名计算中都很常用了,这里对两种可能返回 ... -
.NET/java Office组件神器——Aspose.Total 17.x/18.x/19.x破解版+破解补丁下载【转】
2019-07-29 15:22 2672先上大神的网站地址: [url] https://masuit ... -
通过UserAgent判断智能手机(设备,Android,IOS)【转】
2019-07-02 17:51 1040///<summary> /// ... -
8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码【转】
2019-06-12 17:36 2308服务器使用了word的类库,在使用过程中日志报标题错误 解决 ... -
C#(同步调用、异步调用、异步回调)--转
2019-06-05 12:04 708本文将主要通过“同步调用”、“异步调用”、“异步回调”三个示例 ... -
C# 利用word书签写入自定义数据
2019-05-14 18:08 647原文参考地址: https://www.cnblogs.com ... -
C# 项目中引用office组件后在服务器遇到的问题集锦
2019-02-13 16:03 9481、要在服务器安装相同版本的office完整版程序 本地测试机 ... -
C# word转pdf
2019-01-17 14:55 678写在最前面,如果要部署,服务器需要安装相同版本的office, ... -
C# 操作word
2019-01-17 14:49 521需要单独引入的是COM中的Microsoft Office 1 ... -
给上传的文件生成缩略图(图片和视频)
2018-11-28 17:47 891备注:里面用到的ffmpeg ... -
获取视频文件的截图
2018-11-28 17:36 695视频获取第一帧截图的方法: https://www.cnblo ... -
excel文件转为DataTable
2018-11-02 17:38 1596在人员初始化的时候,通常会用到excel编辑好,导入到数据库中 ... -
DataTable导出excel
2018-11-02 16:36 1150网上有很多关于导出的例子,这里讲一个利用NPOI导出excel ... -
未能加载文件或程序集,System.Net.Http或它的某一个依赖项。系统找不到指定的文件。
2018-10-30 17:21 4723具体的错误描述: 未能加载文件或程序集“System.Net. ... -
将app请求的简单json串转化为字典
2017-11-16 11:18 816通过Newtonsoft的DeserializeObject& ... -
WebAPI启用session功能
2017-11-16 11:04 1759第一步:简单建立两个类,以备修改WebApi的路由方式 第一 ... -
webapi记录请求和返回日志
2017-11-15 17:12 2144需求: 记录每个接口的请求参数及返回参数,方便以后回溯 fi ...
相关推荐
3. 商家在选择店铺位置时,可以分析周边环境,测量到公交站、停车场的距离,以便于客户到达。 4. 旅行者可以规划自驾游路线,通过测量不同景点间的距离来安排行程。 综上所述,百度地图的测量距离和获取经纬度功能...
接下来,服务器需要根据这些经纬度坐标,在数据库中查找并返回距离用户最近的一系列商家信息。 - **SQL计算经纬度距离的自定义函数**:为了计算两点之间的距离,可以使用SQL中的自定义函数`GetDistance`。这个函数...
例如,O2O服务中用于查找周边商家;物流配送中规划最优路线;旅游应用中显示景点分布;社交软件中分享位置信息等。开发者需了解如何结合业务需求,有效利用地图API来提升用户体验。 在提供的"百度地图线路查询标记...
在电子商务系统中,用户的位置信息用于查找附近的商家,通过比较经纬度,展示按距离排序的周边服务。 3.2 SQLite数据库 SQLite是Android内置的关系型数据库,适用于嵌入式设备,占用资源少。SQLiteOpenHelper是...
在毕业设计项目中,可以将用户的经纬度发送至服务器,计算出最近的商家,并按照距离排序展示周边环境。 SQLite是Android系统自带的关系型数据库,特别适合嵌入式应用,占用资源少,操作简便。Android提供了...
此外,矢量数据支持复杂的地理分析,如距离计算、缓冲区分析、网络分析等,对于城市规划、交通管理等领域非常有用。 二、自贡市建筑物信息 自贡市,位于中国四川省南部,是一个历史悠久的城市,拥有丰富的文化遗产...
对于地理位置数据,可能需要考虑经纬度与距离计算、聚类分析等GIS相关特征。 四、地理信息系统(GIS) GIS技术在商场定位中尤为重要,因为它可以处理地理位置数据。参赛者可能需要结合地图数据,计算店铺与居民区、...
3. **谷歌距离矩阵服务**:计算多点之间的距离和行驶时间,适用于路线规划应用。 四、企业服务 1. **谷歌地图商务版**:为企业提供定制化的地图解决方案,如内部地图、员工导航、资产追踪等。 2. **商家信息管理**...
3. 海上航线:从徐州到甲国,最近的海上航线可能会经过苏伊士运河,因为这通常是连接亚洲和非洲最短的航线,而好望角、巴拿马运河、麦哲伦海峡分别位于非洲南部、美洲中部和南美洲南部,距离较远。 4. 雪线高度与...
商家可以通过位置信息推送周边优惠活动,用户则能根据当前位置发现附近的餐馆、商场等生活设施,实现O2O(线上到线下)的无缝对接。 总的来说,基于即时通讯社交应用的位置分享及导航方法,是信息技术与日常生活的...
3. **经纬度**:精确的地理位置坐标,便于在地图上展示和进行距离计算。 4. **类别**:如快餐、正餐、甜品、咖啡馆等,揭示了餐饮业态的多样性。 5. **营业时间**:了解店铺的运营时段,有助于理解消费者的活动模式...
- **轨迹跟踪**:记录用户的行驶路径并计算行驶距离。 - **资讯查询**:根据用户当前位置查询附近信息,如影院、商家等。 - **好友通信**:显示好友位置并支持聊天通信功能。 - **日志备忘**:具备日志记录功能...
此外,它还支持查询行车路线和周边商家信息,是出行规划的得力助手。 2. **纵览窗口**:提供当前3D视图的概览,帮助用户了解当前视角下的地理范围和方向,便于调整视角和规划探索路线。 3. **显示/隐藏侧边栏**:...