一、BD09坐標系和WGS84坐標系介紹
BD09坐標系是百度地圖使用的一種經緯度坐標系,它是在GCJ-02基礎上加密得到的,因此也稱為BD-09MC(百度—09經緯度坐標系)。WGS84坐標系是全球定位系統(GPS)所使用的坐標系,以地球橢球體為基準面,經過多次修正和完善後,已成為世界標準的地理坐標系。由於兩個坐標系基準面不同,因此需要進行坐標轉換操作。
二、坐標轉換方法
坐標轉換可以通過數學計算方法和調用第三方API兩種方式實現。下面分別介紹這兩種方法。
1. 數學計算法
數學計算法需要用到一些公式,轉換過程如下:
1)將BD09經緯度轉換為BD09墨卡托坐標。BD09經緯度轉BD09墨卡托坐標公式如下: x = lon * 20037508.34 / 180; y = log(tan((90 + lat) * pi / 360)) / (pi / 180); y = y * 20037508.34 / 180; 2)將BD09墨卡托坐標轉換為WGS84墨卡托坐標(即GCJ-02坐標系)。BD09墨卡托坐標轉GCJ-02坐標系的公式如下: x = x / 20037508.34 * 180; y = y / 20037508.34 * 180; y = 180 / pi * (2 * atan(exp(y * pi / 180)) - pi / 2); gcjLon = x - (cos((a * pi) / 180) * x + sin((a * pi) / 180) * y) + 0.0065; gcjLat = y - (sin((a * pi) / 180) * x + cos((a * pi) / 180) * y) + 0.006; a:此處a為偏移角度,中國在地圖上的投影採用的是2000國家大地坐標系,該系的常數為54年橢球的偏移量+CGCS2000三維七參數坐標系轉換常數,也就是說54年橢球基準面轉成2000三維基準面+由CGCS2000轉換而成的平面坐標系。
3)將GCJ-02坐標轉換為WGS84坐標。具體實現可以使用開源庫,如Java語言中的WGS84ToGCJ02和GCJ02ToWGS84方法,也可以使用相關API,如WebService的坐標轉換接口。
2. 調用API法
調用API法是使用現有的坐標轉換API,如高德地圖、百度地圖等,通過調用API的方式將BD09坐標系轉換為WGS84坐標。
Java代碼示例: public String convertBD09toWGS84(double lat, double lon) throws Exception{ String lngLat = lon + "," + lat; String url = "https://api.map.baidu.com/geoconv/v1/?coords="+lngLat+"&from=5&to=6&ak=your_ak"; String json = HttpClientUtil.getData(url); JSONObject jsonObject = JSONObject.fromObject(json); if (jsonObject.getInt("status") != 0){ throw new Exception("調用API返回異常"); } JSONArray result = jsonObject.getJSONArray("result"); double wgsLon = ((JSONObject)result.get(0)).getDouble("x"); double wgsLat = ((JSONObject)result.get(0)).getDouble("y"); return wgsLat + "," + wgsLon; } 調用百度地圖API,參數解釋: coords:需要轉換的坐標,格式為“經度,緯度”,多組坐標之間用英文分號分隔,坐標個數不超過100個。 from:原坐標系,可選值為0、2、3、4、5或6(詳情請查閱百度API文檔) to:目標坐標系,可選值同上 ak:開發者密鑰,需要用戶去百度地圖開放平台註冊獲取。
三、總結
本文主要介紹了BD09坐標系和WGS84坐標系的概念及坐標轉換方法。隨着地圖應用的普及和開發的不斷深入,坐標轉換的需求越來越多。具體的轉換方式可以根據實際情況來選擇,比如需要精度更高的可以選擇數學計算法,而對於一些簡單的應用,調用API就可以滿足需求。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/236444.html