调用第三方获取两点坐标距离

/**
 * WpnMap.java
 * 版权所有(C) 2012 
 * 创建:cuiran 2012-09-04 09:29:45
 */
package com.wpnmap.map;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import com.wpnmap.bean.TaxiInfo;
import com.wpnmap.util.DistanceComparator;
import com.wpnmap.util.Dom4jUtil;
import com.wpnmap.util.WebClient;
import com.wpnmap.util.WpnConfig;

/**
 * 
 * 计算两点坐标之间距离
 * @author cuiran
 * @version 1.0
 */
public class WpnMap {
	/**
	 * 
	 * TODO
	 * @param x1 起点x1坐标
	 * @param y1 起点y1坐标
	 * @param taxis 对应出租车坐标的集合 不能为空
	 * @param resNum 需要取出的数目 resNum=0 取出全部   resNum>0 and resNum<size 取出resNum个
	 * @return List<TaxiInfo>
	 */
	public static List<TaxiInfo> getListRoadLength(String x1,String y1,List<TaxiInfo> taxis,int resNum){
		 List<TaxiInfo> list=new ArrayList<TaxiInfo>();
		 List<TaxiInfo> list0=new ArrayList<TaxiInfo>();
		try{
			StringBuffer strX = new StringBuffer();			
			StringBuffer strY = new StringBuffer();			
			
			Iterator<TaxiInfo> it=taxis.iterator();
			while(it.hasNext()){
				TaxiInfo info=it.next();
				strX.append(x1+","+info.getX()+",");
				strY.append(y1+","+info.getY()+",");
			}
			
			StringBuffer str = new StringBuffer();	
			String x=strX.toString();
			String y=strY.toString();
			x=x.substring(0, x.length()-1);
			y=y.substring(0, y.length()-1);
			
			str.append(WpnConfig.url)
			   .append("?config=CDR")
			   .append("&xs="+x)
			   .append("&ys="+y)
			   .append("&resType=XML")
			   .append("&enc=gbk")
			   .append("&routeType=1")
			   .append("&a_k="+WpnConfig.key);
			
			String result = WebClient.GetWebContent(str.toString(),"gbk");
			
			List<String> listLen=Dom4jUtil.getListRoadLength(result);
			for(int i=0;i<listLen.size();i++){
				
				TaxiInfo info=taxis.get(i);
				
				info.setDistance(listLen.get(i));
				
				list.add(info);
				
			}
			
			 Comparator<TaxiInfo> ascComparator = new DistanceComparator();
			
			  // 利用Collections类静态工具方法对集合List进行排序
			  Collections.sort(list, ascComparator);

			  if(resNum>0&&resNum<=list.size()){
				  for(int i=0;i<resNum;i++){
					  list0.add(list.get(i));
				  }
			  }else{
				  list0=list;
			  }
			  
			
		}catch (Exception e) {
			e.printStackTrace();
		}
		return list0;
	}
	
	/**
	 * 
	 * 计算两点坐标距离
	 * @param x1 起点x1坐标
	 * @param y1 起点y1坐标
	 * @param x2 起点x2坐标
	 * @param y2 起点y2坐标
	 * @return
	 */
	public  String getDistance(String x1,String y1,String x2,String y2){
		String distance="0";
		try{
			StringBuffer str = new StringBuffer();	
			
			str.append(WpnConfig.url)
			   .append("?config=CD")
			   .append("&x1="+x1)
			   .append("&y1="+y1)
			   .append("&x2="+x2)
			   .append("&y2="+y2)
			   .append("&resType=XML")
			   .append("&enc=gbk")
			   .append("&a_k="+WpnConfig.key);
			String xml;
			xml = WebClient.GetWebContent(str.toString(),"gbk");
			
			distance=Dom4jUtil.getDistance(xml);
			
		}catch (Exception e) {
			e.printStackTrace();
		}
		
		return distance;
	}

	/**
	 * TODO
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值