您的位置:首页 > 其它

根据城市名称获取所在经纬度

2017-12-06 13:54 519 查看
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

public class GetCoordinate {

public static void main(String[] args) {
try {
String[] coordinate = new GetCoordinate().getCoordinate("北京市");
System.out.println(coordinate[0]+"  "+coordinate[1]);//0:经度 1:纬度
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 根据城市名称查询所在经纬度
* @param addr
* 查询的地址
* @return
* @throws IOException
*/
public String[] getCoordinate(String addr) throws IOException {
String lng = null;//经度
String lat = null;//纬度
String address = null;
try {
address = java.net.URLEncoder.encode(addr, "UTF-8");
}catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String key = "NcMnc56RX48MjpsOfP4ZEW5GVHmCCmeg";
String url = String .format("http://api.map.baidu.com/geocoder?address=%s&output=json&key=%s", address, key);
URL myURL = null;
URLConnection httpsConn = null;
try {
myURL = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
InputStreamReader insr = null;
BufferedReader br = null;
try {
httpsConn = (URLConnection) myURL.openConnection();// 不使用代理
if (httpsConn != null) {
insr = new InputStreamReader( httpsConn.getInputStream(), "UTF-8");
br = new BufferedReader(insr);
String data = null;
int count = 1;
while((data= br.readLine())!=null){
if(count==5){
lng = (String)data.subSequence(data.indexOf(":")+1, data.indexOf(","));//经度
count++;
}else if(count==6){
lat = data.substring(data.indexOf(":")+1);//纬度
count++;
}else{
count++;
}
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(insr!=null){
insr.close();
}
if(br!=null){
br.close();
}
}
return new String[]{lng,lat};
}

}


给出城市名字可以得到相应的经纬度,可以用来在地图上定位等操作.(不同地图api坐标可能不相同,需要根据实际情况转换.)该实例是百度地图的经纬度可以直接使用在百度地图上.

注意:运行时必须连接网络,如果网络不通或网络不好,会报错的 

 java.lang.StringIndexOutOfBoundsException: String index out of range: -14

不需要引入任何jar包 都是jdk自带的包.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: