第一个自己动手写成的 JAVA 的程序
程序功能是通过高德地图的地理API,将文本格式的地址转换成经纬度。
涉及的知识点有:
- HTTP GET 请求
- URL 编码
- JSON 解析
自己记录一下
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.net.HttpURLConnection;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;
import com.alibaba.fastjson.JSON; // 使用阿里巴巴的 fastjson 库
import com.alibaba.fastjson.JSONObject; //
import com.alibaba.fastjson.JSONArray; //
public class GeoTrans {
public static void main(String[] args) {
String latlgt;
String addr = "海南省海口市秀英区长怡路12号";
String realxy = null;
GeoTrans gt = new GeoTrans();
latlgt = gt.get_xy(addr);
// 将字符串转换成 JSON 对象
JSONObject result = JSON.parseObject(latlgt);
// JSON 中的数组
JSONArray geocodes = result.getJSONArray("geocodes");
// 取字段值
// 字符串数组用 getString() 方法,参数是数字索引值
// JSON 对象取字符字段值也用 getString() 方法,不过参数是字段字符值
realxy = JSON.parseObject(geocodes.getString(0)).getString("location");
System.out.println(realxy);
}
public String get_xy(String addr) {
String base_url = "https://restapi.amap.com/v3/geocode/geo?key=96f7a3de&address=";
String result = null;
try {
// 地址是中文,要 encode 一下
base_url += URLEncoder.encode(addr, "UTF-8");
} catch (UnsupportedEncodingException ex) {
ex.printStackTrace();
}
System.out.println(base_url);
HttpURLConnection conn = null; // HTTP连接对象
InputStream is = null; // 输入流
BufferedReader br = null; // 缓冲读取器
try {
URL url = new URL(base_url);
conn = (HttpURLConnection) url.openConnection(); // 打开一个链接,并转换为 HTTP 连接对象
conn.setRequestMethod("GET"); // 指定为 GET 请求
conn.setRequestTimeout(60000); // 请求超时时间
conn.setReadTimeout(15000); // 读取超时时间
conn.connect(); // 发起请求
if (conn.getResponseCode() == 200) {
is = conn.getInputStream(); // 获取返回的流对象
br = new BufferedReader(new InputStreamReader(is, "UTF-8")); // 读取流数据
StringBuffer sbf = new StringBuffer(); // 字符串乜乜乜
String temp = null;
while ((temp = br.readLine()) != null) { // 只要返回的数据没读完就一直读下去
sbf.append(temp);
sbf.append("
");
}
result = sbf.toString(); // 转换为字符串
}
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (null != br) {
try {
br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (null != is) {
try {
is.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
conn.disconnect(); // 关闭连接
}
return result;
}
}