专注于知识
经验、资源的分享

C#如何实现根据经纬度获取最近门店/商家

最近有个客户需要做一个小功能,在微信内可以查看附近的门店并且可以导航到门店,下面我把功能实现流程以及注意事项跟大家简单介绍一下,希望对遇到同样问题或需求的小伙伴有所帮助,谢谢。

第一,数据库设计以及录入门店信息。

行政区域表,主要用于门店地址的省市区的下拉选择,之前是分享过的(最新最全的省市区三级数据

门店信息表,主要存储店铺名、电话、地址、经纬度,微信内置地图是使用腾讯地图,腾讯地图使用的是火星坐标,门店的经纬度我是使用腾讯地图标记收集的,我是住在海珠赤岗,我增加了一个测试门店01,地址是正佳广场,还增加了一个测试门店02,地址赤岗纵横公寓(在我附近),如果是逻辑正确的话,显示在第一个位置的一定是测试门店02,我会在最后揭晓答案的。

第二,获取用户经纬度。

获取用户经纬度有很多种,比如HTML5页面,如果在浏览器打开,需要第三方地图应用支持;如果是在微信内打开,可以通过微信公众号获取。

我是做的HTML5页面,在微信内打开,如何在微信内获取用户经纬度,这里就不多说了,还有一点大家要注意,我在使用微信内置地图查看位置接口,传入的的经纬度是字符串,在安卓上正常的,但是在苹果上却没有反应,使用微信Web开发工具调试,发现返回的{errmsg: “openlocation:ok”},在网上找到的答案是经纬度要传入数值型的

第三,计算用户经纬度与门店经纬度两点之间的距离。

计算经纬度两点之间距离的方法大致分为三种:数据库、程序、JS,但是最灵活、效率最高的还是使用数据库,打个比方说如果你要获取最近5公里的门店,数据库直接计算返回结果,而程序和JS需要获取所有的门店数据之后再进行计算过滤,如果门店数据太多,轻则造成服务器反应延时,重则造成服务器宕机。

我在网上找到了很多计算经纬度两点间距离的文章,大多数都是复制粘贴,计算出来的结果相差甚远。功夫不负有心人,铁杆也能磨成针,历时二个小时,尝试十几次,终于找到了。

下面就是SqlServer计算经纬度两点间距离的函数

--计算经纬度两点间距离,返回单位KM
CREATE FUNCTION [dbo].[f_GetDistance]
( 
@GPSLng DECIMAL(12,6),
@GPSLat DECIMAL(12,6),
@Lng  DECIMAL(12,6),
@Lat DECIMAL(12,6)
)
RETURNS DECIMAL(12,4)
AS
BEGIN
   DECLARE @result DECIMAL(12,4)
   SELECT @result = (6378137.0*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+COS(@GPSLat/180*PI())*COS(@Lat/180*PI())*COS((@GPSLng-@Lng)/180*PI())))/1000
   RETURN @result
END

如何使用该函数,Sql语句如下

select *,dbo.f_GetDistance(121.457896,21.369855,lng,lat) as Distance from 门店表 order by Distance

最后我们一起检验结果的时候到了,请看下图,结果非常满意,默认显示了离我最近的测试门店02

我们再一起看一下打开微信内置地图的位置跟当时设置的是否一致,答案也是一致的,如下图

好了,时间也不早了,关于C#如何实现根据经纬度获取最近门店也到此结束了,有什么问题大家请在下方留言,原创是非常非常不容易,转载请注明出处,

谢谢大家了。

 

 

赞(4) 打赏
本文原创转载请注明出处:阿斌分享 » C#如何实现根据经纬度获取最近门店/商家
分享到: 更多 (0)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #-9
    头像

    感谢分享

    绿软吧4个月前 (07-03)回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏