For the distance calculation

A UDF (user defined function) to calculate distance between two zip codes as follow:
首先获取zip地址对应的经纬度值,从zip表中可以得到。
string  sqlSel  =   " select latitud,longitud from ziptable where zip_cd =  "   +  zip;
using  (SqlDataReader dr  =  SqlHelper.ExecuteReader(strCon, CommandType.Text, sqlSel))
{
    
if  (dr.Read())
    {
        latitud 
=  Convert.ToDouble(dr[ 0 ]);     // 得到zip地址的经度值
        longitud  =  Convert.ToDouble(dr[ 1 ]);   // 得到zip地址的纬度值
    }
}

计算任意两个zip之间的距离:
其中,参数latitud,longitud为其中一个zip的经纬度;lat,lon为另一个zip的经纬度。然后计算两个zip之间的距离。

private  double  GetDistance( double  latitud,  double  longitud,  double  lat,  double  lon)
{
    distance 
=
    Math.
Round ( 3959   *  Math. Atan (Math. Sqrt ( 1   -  ((Math. Sin (latitud  /   57.3 *  Math. Sin (lat  /   57.3 +
    Math.
Cos (latitud  /   57.3 *  Math. Cos (lat  /   57.3 *  Math. Cos (lon  /   57.3   -  longitud  /   57.3 ))  *  (Math. Sin (latitud  /   57.3
    
*  Math. Sin (lat  /   57.3 +  Math. Cos (latitud  /   57.3 *  Math. Cos (lat  /   57.3 *  Math. Cos (lon  /   57.3   -  longitud  /   57.3 )))) 
    
/  (Math. Sin (latitud  /   57.3 *  Math. Sin (lat  /   57.3 +  Math. Cos (latitud  /   57.3 *  Math. Cos (lat  /   57.3 *  
    Math.
Cos (lon  /   57.3   -  longitud  /   57.3 ))),  2 );
    
return  distance;
}

 

转载于:https://www.cnblogs.com/qiangshu/archive/2010/06/23/1763556.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化这段代码:def calTravelCost(route_list,model): timetable_list=[] distance_of_routes=0 time_of_routes=0 obj=0 for route in route_list: timetable=[] vehicle=model.vehicle_dict[route[0]] travel_distance=0 travel_time=0 v_type = route[0] free_speed=vehicle.free_speed fixed_cost=vehicle.fixed_cost variable_cost=vehicle.variable_cost for i in range(len(route)): if i == 0: next_node_id=route[i+1] travel_time_between_nodes=model.distance_matrix[v_type,next_node_id]/free_speed departure=max(0,model.demand_dict[next_node_id].start_time-travel_time_between_nodes) timetable.append((int(departure),int(departure))) elif 1<= i <= len(route)-2: last_node_id=route[i-1] current_node_id=route[i] current_node = model.demand_dict[current_node_id] travel_time_between_nodes=model.distance_matrix[last_node_id,current_node_id]/free_speed arrival=max(timetable[-1][1]+travel_time_between_nodes,current_node.start_time) departure=arrival+current_node.service_time timetable.append((int(arrival),int(departure))) travel_distance += model.distance_matrix[last_node_id, current_node_id] travel_time += model.distance_matrix[last_node_id, current_node_id]/free_speed+\ + max(current_node.start_time - arrival, 0) else: last_node_id = route[i - 1] travel_time_between_nodes = model.distance_matrix[last_node_id,v_type]/free_speed departure = timetable[-1][1]+travel_time_between_nodes timetable.append((int(departure),int(departure))) travel_distance += model.distance_matrix[last_node_id,v_type] travel_time += model.distance_matrix[last_node_id,v_type]/free_speed distance_of_routes+=travel_distance time_of_routes+=travel_time if model.opt_type==0: obj+=fixed_cost+travel_distance*variable_cost else: obj += fixed_cost + travel_time *variable_cost timetable_list.append(timetable) return timetable_list,time_of_routes,distance_of_routes,obj
06-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值