今天可以提取关键字,输出详细的省市县(区),并调用百度地图接口输出准确的经纬度,并输出所在的市县。
关键代码:
public static String addressResolution(String address){
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县|.+区|.+市)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)";
Matcher m=Pattern.compile(regex).matcher(address);
String province=null,city=null,county=null;
String str="";
while(m.find()){
province=m.group("province");
city=m.group("city");
county=m.group("county");
str = province + city + county;
}
return str;
}
public static String getlocation1(String loc){
String location2="";
String url="http://api.map.baidu.com/geocoding/v3/?address="+loc+"10号&output=xml&ak=ld0uqubVfSTAUlXH5qIMN2F3Snsp16LU&callback=showLocation";
//System.out.println(url);
Document doc = null;
java.net.HttpURLConnection conn = null;
InputStream ins = null;
SAXReader reader = null;
try{
//HttpTimeoutHandler hth = new HttpTimeoutHandler(600000);
URL conURL = new URL(null,url);
conn = (HttpURLConnection) conURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
ins = conn.getInputStream();
reader =new SAXReader();
doc= reader.read(ins);
//System.out.println(url);
Element root=doc.getRootElement();
String docXmlText=doc.asXML();
//System.out.println(docXmlText);
Element e=root.element("result");
Element location=e.element("location");
Element lng=location.element("lng");
Element lat=location.element("lat");
String lng1=lng.asXML();
String lat1=lat.asXML();
lng1=lng1.substring(lng1.indexOf("<lng>")+5,lng1.indexOf("</lng>"));
lat1=lat1.substring(lat1.indexOf("<lat>")+5,lat1.indexOf("</lat>"));
System.out.println("lng:"+lng1);
System.out.println("lat:"+lat1);
location2=getLocation(lat1,lng1);
List<Element> list = root.elements("location");
//System.out.println(url);
for (Element object : list) {
//System.out.println(url);
//System.out.println(object.getName());
for (Element element : (List<Element>) object.elements()) {
//System.out.print(((Element) element).getName() + ":");
//System.out.print(element.getText() + " ");
}
//System.out.println();
}
ins.close();
conn.disconnect();
}catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally {
try {
if (ins != null) {
ins.close();
ins = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
try {
if (conn != null) {
conn.disconnect();
conn = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return location2;
}
public static String getLocation(String lat,String lng){
String location1="";
String url="http://api.map.baidu.com/reverse_geocoding/v3/?ak=ld0uqubVfSTAUlXH5qIMN2F3Snsp16LU&output=xml&coordtype=wgs84ll&location="+lat+","+lng;
//System.out.println(url);
Document doc = null;
java.net.HttpURLConnection conn = null;
InputStream ins = null;
SAXReader reader = null;
try{
//HttpTimeoutHandler hth = new HttpTimeoutHandler(600000);
URL conURL = new URL(null,url);
conn = (HttpURLConnection)conURL.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
ins = conn.getInputStream();
reader =new SAXReader();
doc= reader.read(ins);
//System.out.println(url);
Element root=doc.getRootElement();
String docXmlText=doc.asXML();
//System.out.println(docXmlText);
Element e=root.element("result");
Element location=e.element("formatted_address");
location1=location.asXML();
location1=location1.substring(location1.indexOf("address>")+8,location1.indexOf("</formatted_address>"));
/* System.out.println("lng"+lng1);
System.out.println("lat"+lat1);
// System.out.println("location"+location.asXML());
//System.out.println("xiayukun"+e.asXML());
lng1=lng1.substring(lng1.indexOf("<lng>")+5,lng1.indexOf("</lng>"));
System.out.println(lng1);
lat1=lat1.substring(lat1.indexOf("<lat>")+5,lat1.indexOf("</lat>"));
System.out.println(lat1);*/
List<Element> list = root.elements("location");
//System.out.println(url);
for (Element object : list) {
//System.out.println(url);
//System.out.println(object.getName());
for (Element element : (List<Element>) object.elements()) {
//System.out.print(((Element) element).getName() + ":");
//System.out.print(element.getText() + " ");
}
System.out.println();
}
ins.close();
conn.disconnect();
}catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally {
try {
if (ins != null) {
ins.close();
ins = null;
}
} catch (IOException e1) {
e1.printStackTrace();
}
try {
if (conn != null) {
conn.disconnect();
conn = null;
}
} catch (Exception e2) {
e2.printStackTrace();
}
}
return location1;
}
public static void main(String[] args) throws IOException
{
System.out.println(addressResolution(getlocation1(addressResolution("河北省沧州市临港经济技术开发区规划一号路南"))));
}
截图:

原文:https://www.cnblogs.com/jccjcc/p/12488776.html