地区经纬度信息获取利用Google地图API获取文档格式.docx
- 文档编号:20017464
- 上传时间:2023-01-15
- 格式:DOCX
- 页数:33
- 大小:22.50KB
地区经纬度信息获取利用Google地图API获取文档格式.docx
《地区经纬度信息获取利用Google地图API获取文档格式.docx》由会员分享,可在线阅读,更多相关《地区经纬度信息获取利用Google地图API获取文档格式.docx(33页珍藏版)》请在冰豆网上搜索。
;
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<
地址,经纬度>
publicstaticMap<
String,Point>
getAddressLatLng(Stringaddress)
StringBuilderurlBuilder=newStringBuilder();
urlBuilder.append("
?
output=json"
);
&
oe=utf-8"
q="
).append(encodeURLForUTF8(address));
key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA"
mapclient=jsapi"
hl=zh-CN"
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、解析结果
Map<
map=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(List<
String>
addressList)
List<
list=newArrayList<
();
if(null==addressList||addressList.isEmpty())
returnlist;
for(Stringaddress:
//休息一下
Thread.sleep(THREAD_SLEEP_MILLIS);
}catch(InterruptedExceptione)
addrMap=getAddressLatLng(address);
if(false==addrMap.isEmpty())
list.add(addrMap);
else
//System.out.println(address+"
pointisnull!
!
logger.warn("
===========获取经纬度信息为空!
+address);
*解析网页内容地址信息及经纬度信息
*@paramhtmlContent
privatestaticMap<
parseAddressLatLng(StringhtmlContent)
addr=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);
=ss&
ss.length>
1)
StringpointStr=getMiddleStr(ss[1],"
["
"
]"
String[]pss=pointStr.split("
=pss&
pss.length>
doubledefaultValue=0D;
point=newPoint(isNullOrEmpty(pss[0])?
defaultValue:
Double.parseDouble(pss[0].trim()),
isNullOrEmpty(pss[1])?
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);
*获取中间字符串内容
*@paramcontent
*@parambeginStr
*@paramendStr
*@return
privatestaticStringgetMiddleStr(Stringcontent,StringbeginStr,StringendStr)
Stringstr="
if(isNullOrEmpty(content))
returnstr;
content=content.trim();
intbIndex=content.indexOf(beginStr);
inteIndex=-1;
=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);
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;
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("
privatestaticvoidclearProxy()
System.clearProperty(PROXY_HOST_KEY);
System.clearProperty(PROXY_PORT_KEY);
System.clearProperty(PROXY_SET_KEY);
clearProxy====="
privatestaticStringencodeURLForUTF8(Stringstr)
str=.URLEncoder.encode(str,"
}catch(UnsupportedEncodingExceptione)
字符串转码异常,字符串:
+str,e);
*按照指定编码从流中读取信息
*@paraminStream
*@paramencode
*@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("
//关闭读取器,释放资源
reader.close();
return(content.toString());
*获取偏移后的经纬度(Google中国地图偏移接口)
*中国地图和卫星图都存在偏移量,这个是由中国规划局确定的,
*google的地图服务,以ditu.gogle开头的都没有偏差,以maps.google开头的服务就有偏差
*@paramzoom
*偏移级别(从11级到18级,18级最精确)
*@paramsourcePoint
*经纬度对象
publicstaticPointgetOffsetLatLng(intzoom,PointsourcePoint)
if(null==sourcePoint)
spn=0.0,0.0"
z="
).append(zoom);
vp="
urlBuilder.append(sourcePoint.getLatitude());
//纬度
urlBuilder.append(sourcePoint.getLongitude());
//经度
StringhtmlContent=getConte
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 地区 经纬度 信息 获取 利用 Google 地图 API