地区经纬度信息获取利用Google地图API获取.docx

上传人:b****5 文档编号:6995487 上传时间:2023-01-15 格式:DOCX 页数:33 大小:22.50KB
下载 相关 举报
地区经纬度信息获取利用Google地图API获取.docx_第1页
第1页 / 共33页
地区经纬度信息获取利用Google地图API获取.docx_第2页
第2页 / 共33页
地区经纬度信息获取利用Google地图API获取.docx_第3页
第3页 / 共33页
地区经纬度信息获取利用Google地图API获取.docx_第4页
第4页 / 共33页
地区经纬度信息获取利用Google地图API获取.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

地区经纬度信息获取利用Google地图API获取.docx

《地区经纬度信息获取利用Google地图API获取.docx》由会员分享,可在线阅读,更多相关《地区经纬度信息获取利用Google地图API获取.docx(33页珍藏版)》请在冰豆网上搜索。

地区经纬度信息获取利用Google地图API获取.docx

地区经纬度信息获取利用Google地图API获取

地区经纬度信息获取(利用Google地图API获取)

packagecom.leg3s.rld.util;

importjava.io.BufferedReader;

importjava.io.DataInputStream;

importjava.io.DataOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.InputStreamReader;

importjava.io.OutputStream;

importjava.io.OutputStreamWriter;

importjava.io.UnsupportedEncodingException;

import.HttpURLConnection;

import.URL;

import.URLConnection;

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

importjava.util.Map.Entry;

importorg.apache.log4j.Logger;

/**

*地址经纬度信息获取工具类

*

*@authorliuw

*@createdate2010/01/18

*/

publicclassAddressLatLngUtil

{

privatestaticfinalStringREQUEST_ENCODE="UTF-8";

privatestaticfinalStringADDRESS_KEY="\"address\"";

privatestaticfinalStringADDRESS_COUNTRY_KEY="\"CountryName\"";

privatestaticfinalStringADDRESS_REGION_KEY="\"AdministrativeAreaName\"";

privatestaticfinalStringADDRESS_CITY_KEY="\"LocalityName\"";

privatestaticfinalStringADDRESS_POINT_KEY="\"coordinates\"";

privatestaticfinalStringADDRESS_SPLIT_STR=":

";

privatestaticfinalStringLOCATION_COUNTRY_KEY="\"country\"";

privatestaticfinalStringLOCATION_REGION_KEY="\"region\"";

privatestaticfinalStringLOCATION_CITY_KEY="\"city\"";

//privatestaticfinalStringLOCATION_POINT_KEY="\"location\"";

privatestaticfinalStringLOCATION_POINT_LATITUDE_KEY="\"latitude\"";

privatestaticfinalStringLOCATION_POINT_LONGITUDE_KEY="\"longitude\"";

privatestaticfinalStringLOCATION_POINT_PRECISIONY_KEY="\"accuracy\"";

privatestaticfinalStringLOCATION_SPLIT_STR=",";

publicstaticfinalintMIN_ZOOM=11;

publicstaticfinalintMAX_ZOOM=18;

privatestaticfinalintDOWNNUM_FOR_PROXY=8000;

privatestaticfinalintCONNECT_TIMEOUT=30000;//30秒

privatestaticfinalintTHREAD_SLEEP_MILLIS=200;

privatestaticbooleanflag=false;

privatestaticintdownNum=0;

privatestaticStringproxyHost="165.228.128.10";

privatestaticStringproxyPort="3128";

privatestaticStringproxySet="true";

privatestaticfinalLoggerlogger=Logger.getLogger(AddressLatLngUtil.class);

/**

*获取地址详细信息及经纬度信息

*

*@paramaddress

*@returnMap<地址,经纬度>

*/

publicstaticMapgetAddressLatLng(Stringaddress)

{

StringBuilderurlBuilder=newStringBuilder();

urlBuilder.append("

urlBuilder.append("?

output=json");

urlBuilder.append("&oe=utf-8");

urlBuilder.append("&q=").append(encodeURLForUTF8(address));

urlBuilder.append("&key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA");

urlBuilder.append("&mapclient=jsapi");

urlBuilder.append("&hl=zh-CN");

urlBuilder.append("&callback=_xdc_._1g4gm5mh3");

//logger.info(urlBuilder.toString());

HttpURLConnectionhttpConnection=null;

try

{

//1、构造HttpURLConnection连接

URLurl=newURL(urlBuilder.toString());

URLConnectionurlConnection=url.openConnection();

httpConnection=(HttpURLConnection)urlConnection;

httpConnection.setDoInput(true);

httpConnection.setDoOutput(true);

httpConnection.setConnectTimeout(CONNECT_TIMEOUT);

httpConnection.connect();

//2、接收响应结果

InputStreaminStream=httpConnection.getInputStream();

StringhtmlContent=getContentByStream(inStream,REQUEST_ENCODE);

//关闭流资源

inStream.close();

//3、解析结果

Mapmap=parseAddressLatLng(htmlContent);

updateProxy();

returnmap;

}catch(Exceptione)

{

//TODOAuto-generatedcatchblock

e.printStackTrace();

logger.error("===========获取经纬度信息异常!

请求地址:

"+address,e);

returnjava.util.Collections.emptyMap();

}finally

{

//关闭连接

if(null!

=httpConnection)

{

httpConnection.disconnect();

}

}

}

/**

*根据地址信息获取经纬度

*

*@paramaddressList地址集合

*@returnList>

*/

publicstaticList>getAddressLatLng(ListaddressList)

{

List>list=newArrayList>();

if(null==addressList||addressList.isEmpty())

{

returnlist;

}

for(Stringaddress:

addressList)

{

try

{

//休息一下

Thread.sleep(THREAD_SLEEP_MILLIS);

}catch(InterruptedExceptione)

{

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

MapaddrMap=getAddressLatLng(address);

if(false==addrMap.isEmpty())

{

list.add(addrMap);

}

else

{

//System.out.println(address+"pointisnull!

!

!

");

logger.warn("===========获取经纬度信息为空!

请求地址:

"+address);

}

}

returnlist;

}

/**

*解析网页内容地址信息及经纬度信息

*

*@paramhtmlContent

*@returnMap<地址,经纬度>

*/

privatestaticMapparseAddressLatLng(StringhtmlContent)

{

Mapaddr=newHashMap

(1);

if(isNullOrEmpty(htmlContent))

{

returnaddr;

}

String[]contents=htmlContent.split("\r\n");

String[]ss=null;

Stringaddress=null;

Stringcountry=null;

Stringregion=null;

Stringcity=null;

Pointpoint=null;

for(Stringline:

contents)

{

if(isNullOrEmpty(line))

{

continue;

}

line=line.trim();

if(line.contains(ADDRESS_POINT_KEY))

{

/*

*"coordinates":

[113.9465830,22.5309650,0]

*/

ss=line.split(ADDRESS_SPLIT_STR);

if(null!

=ss&&ss.length>1)

{

StringpointStr=getMiddleStr(ss[1],"[","]");

String[]pss=pointStr.split(",");

if(null!

=pss&&pss.length>1)

{

doubledefaultValue=0D;

point=newPoint(isNullOrEmpty(pss[0])?

defaultValue:

Double.parseDouble(pss[0].trim()),

isNullOrEmpty(pss[1])?

defaultValue:

Double.parseDouble(pss[1].trim()));

}

}

}

elseif(line.contains(ADDRESS_KEY))

{

address=getValue(line,ADDRESS_KEY);

}

elseif(line.contains(ADDRESS_COUNTRY_KEY))

{

country=getValue(line,ADDRESS_COUNTRY_KEY);

}

elseif(line.contains(ADDRESS_REGION_KEY))

{

region=getValue(line,ADDRESS_REGION_KEY);

}

elseif(line.contains(ADDRESS_CITY_KEY))

{

city=getValue(line,ADDRESS_CITY_KEY);

}

//默认取第一个地址信息

if(false==isNullOrEmpty(address)

&&null!

=point)

{

point.setCountry(country);

point.setRegion(region);

point.setCity(city);

break;

}

}//end-for-contents

//如果地址不为空

if(false==isNullOrEmpty(address))

{

addr.put(address,point);

}

returnaddr;

}

/**

*获取中间字符串内容

*

*@paramcontent

*@parambeginStr

*@paramendStr

*@return

*/

privatestaticStringgetMiddleStr(Stringcontent,StringbeginStr,StringendStr)

{

Stringstr="";

if(isNullOrEmpty(content))

{

returnstr;

}

content=content.trim();

intbIndex=content.indexOf(beginStr);

inteIndex=-1;

if(null!

=beginStr&&beginStr.equals(endStr))

{

intindex=content.substring(bIndex+beginStr.length()).indexOf(endStr);

eIndex=content.substring(0,bIndex+beginStr.length()).length()+index;

}

elseif(null!

=endStr&&false==endStr.equals(beginStr))

{

eIndex=content.indexOf(endStr);

}

if(-1!

=bIndex&&-1!

=eIndex)

{

str=content.substring(bIndex+beginStr.length(),eIndex);

}

returnstr;

}

privatestaticfinalStringPROXY_HOST_KEY="http.proxyHost";

privatestaticfinalStringPROXY_PORT_KEY="http.proxyPort";

privatestaticfinalStringPROXY_SET_KEY="http.proxySet";

/**

*切换代理

*/

privatestaticsynchronizedvoidupdateProxy()

{

downNum++;

if(downNum%DOWNNUM_FOR_PROXY==0)

{

if(flag)

{

clearProxy();

flag=false;

}

else

{

setProxy();

flag=true;

}

}

}

privatestaticvoidsetProxy()

{

System.setProperty(PROXY_HOST_KEY,proxyHost);

System.setProperty(PROXY_PORT_KEY,proxyPort);

System.setProperty(PROXY_SET_KEY,proxySet);

logger.info("setProxy====="+proxyHost+":

"+proxyPort);

//System.out.println("setProxy====="+proxyHost+":

"+proxyPort);

}

privatestaticvoidclearProxy()

{

System.clearProperty(PROXY_HOST_KEY);

System.clearProperty(PROXY_PORT_KEY);

System.clearProperty(PROXY_SET_KEY);

logger.info("clearProxy=====");

//System.out.println("clearProxy=====");

}

privatestaticStringencodeURLForUTF8(Stringstr)

{

try

{

str=.URLEncoder.encode(str,"UTF-8");

}catch(UnsupportedEncodingExceptione)

{

//TODOAuto-generatedcatchblock

e.printStackTrace();

logger.error("字符串转码异常,字符串:

"+str,e);

}

returnstr;

}

/**

*按照指定编码从流中读取信息

*

*@paraminStream

*@paramencode

*@return

*@throwsIOException

*/

privatestaticStringgetContentByStream(InputStreaminStream,Stringencode)throwsIOException

{

if(null==inStream)

{

returnnull;

}

StringBuildercontent=newStringBuilder();

//采用指定编码格式读取流内容

BufferedReaderreader=newBufferedReader(newInputStreamReader(inStream,encode));

Stringmessage=null;

while(null!

=(message=reader.readLine()))

{

content.append(message);

content.append("\r\n");

}

//关闭读取器,释放资源

reader.close();

return(content.toString());

}

/**

*获取偏移后的经纬度(Google中国地图偏移接口)

*中国地图和卫星图都存在偏移量,这个是由中国规划局确定的,

*google的地图服务,以ditu.gogle开头的都没有偏差,以maps.google开头的服务就有偏差

*

*@paramzoom

*偏移级别(从11级到18级,18级最精确)

*@paramsourcePoint

*经纬度对象

*@return

*/

publicstaticPointgetOffsetLatLng(intzoom,PointsourcePoint)

{

if(null==sourcePoint)

{

returnnull;

}

StringBuilderurlBuilder=newStringBuilder();

urlBuilder.append("

urlBuilder.append("?

spn=0.0,0.0");

urlBuilder.append("&z=").append(zoom);

urlBuilder.append("&vp=");

urlBuilder.append(sourcePoint.getLatitude());//纬度

urlBuilder.append(",");

urlBuilder.append(sourcePoint.getLongitude());//经度

HttpURLConnectionhttpConnection=null;

try

{

//1、构造HttpURLConnection连接

URLurl=newURL(urlBuilder.toString());

URLConnectionurlConnection=url.openConnection();

httpConnection=(HttpURLConnection)urlConnection;

httpConnection.setDoInput(true);

httpConnection.setDoOutput(true);

httpConnection.setConnectTimeout(CONNECT_TIMEOUT);

httpConnection.connect();

//2、接收响应结果

InputStreaminStream=httpConnection.getInputStream();

StringhtmlContent=getConte

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1