百度地圖地理編碼服務的使用(java將中文地址轉換成經緯度數據)

前言

客戶有一批數據,只有中文地址,想要在GIS上展示每個數據的位置。百度開發者網站查找了一下,找到了地理編碼服務可以解決問題。


地理編碼服務

地理編碼服務(又名Geocoder)是一類Web API接口服務;
  地理編碼服務提供將結構化地址數據(如:北京市海淀區上地十街十號)轉換爲對應座標點(經緯度)功能;
  地理編碼服務當前未推出國際化服務,解析地址僅限國內;
在這裏插入圖片描述

功能介紹

用戶可通過該功能,將結構化地址(省/市/區/街道/門牌號)解析爲對應的位置座標。地址結構越完整,地址內容越準確,解析的座標精度越高。

官方文檔地址

java代碼

直接執行main函數,當然除了java其他語言也很方便。

package geocoding;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
public class LatitudeUtils {

	public static final String KEY_1 = "自己的AK";

	public static Map getGeocoderLatitude(String address) {
		BufferedReader in = null;
		try {
			// 將地址轉換成utf-8的16進制
			address = URLEncoder.encode(address, "UTF-8");
			URL tirc = new URL("http://api.map.baidu.com/geocoder/v2/?address=" + address + "&output=json&ak=" + KEY_1);
			in = new BufferedReader(new InputStreamReader(tirc.openStream(), "UTF-8"));
			String res;
			StringBuilder sb = new StringBuilder("");
			while ((res = in.readLine()) != null) {
				sb.append(res.trim());
			}
			String str = sb.toString();
			Map map = null;
			if (StringUtils.isNotEmpty(str)) {
				int lngStart = str.indexOf("lng\":");
				int lngEnd = str.indexOf(",\"lat");
				int latEnd = str.indexOf("},\"precise");
				if (lngStart > 0 && lngEnd > 0 && latEnd > 0) {
					String lng = str.substring(lngStart + 5, lngEnd);
					String lat = str.substring(lngEnd + 7, latEnd);
					map = new HashMap();
					map.put("lng", lng);
					map.put("lat", lat);
					return map;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				in.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return null;
	}
	
	public static void main(String[] args) {
   
		Map map = getGeocoderLatitude("北京市海淀區上地十街十號");
		System.out.println(map.get("lng")+","+map.get("lat"));
		
	}
	

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章