经纬度可以使用百度的地图API来获取经纬度 最近在研究微信的一些功能,用来做数字营销。如自定义菜单、自动应答、地理位置匹配等需求:
例:
某企业销售仪器,在某用户要咨询某仪器问题时,需要用户提供自己的位置,系统会返回离他最近的代售点或专家。
开发这个需求:
1.需要将专家或代售点位置做成经纬度,放入数据库;
2.在用户提交自己位置后,获取经纬度;
3.根据当前位置的经纬度,框定半径为X的专家所在地范围的经纬度数据;
4.从数据库中搜索符合条件的专家经纬度数据;
5.获取所在地的经纬度,与专家所在地的经纬度做空间二点之间的最短距离,反馈给客户;
以下的百度地图API的说明
http://developer.baidu.com/map/webservice-geocoding.htm
//这是找的一段PHP代码,经过实验,功能正常
根据当前位置的经纬度,框定半径为X的专家所在地范围的经纬度数据(经纬度范围的上下限)
function getAround( $lat, $lon, $raidus){
$PI = 3.14159265;
$EARTH_RADIUS = 6378137;
$RAD = $PI / 180.0;
$latitude = $lat;
$longitude = $lon;
$degree = (24901*1609)/360.0;
$raidusMile = $raidus;
$dpmLat = 1/$degree;
$data=array();
$radiusLat = $dpmLat*$raidusMile;
$minLat = $latitude - $radiusLat;
$maxLat = $latitude + $radiusLat;
$data["maxLat"]=$maxLat;
$data["minLat"]=$minLat;
$mpdLng = $degree*cos($latitude * ($PI/180));
$dpmLng = 1 / $mpdLng;
$radiusLng = $dpmLng*$raidusMile;
$minLng = $longitude - $radiusLng;
$maxLng = $longitude + $radiusLng;
$data["maxLng"]=$maxLng;
$data["minLng"]=$minLng;
return $data;
}
//以下代码的功能是空间二点之间的距离
private const double EARTH_RADIUS = 6378.137;//地球半径
private static double rad(double d)
{ return d * Math.PI / 180.0; }
public static double GetDistance(double lat1, double lng1, double lat2, double lng2)
{
double radLat1 = rad(lat1); double radLat2 = rad(lat2);
double a = radLat1 - radLat2; double b = rad(lng1) - rad(lng2);
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;
}
private void button1_Click(object sender, EventArgs e)
{
//北京上地至西三旗距离
double dis = GetDistance(40.037045681695, 116.32711896985, 40.058288760327, 116.33761486126);
MessageBox.Show(dis.ToString()); }