⑴ 百度地圖lbs 怎麼通過java自定義麻點圖
「麻點圖」實現原理:
1、將麻點做在同一張圖片上,然後利用自定義圖層介面,將麻點圖貼在地圖底圖上;
2、然後利用熱區介面,使滑鼠放在熱點上,有文字顯示。
3、可以自己加上信息窗口等覆蓋物,讓熱區hotspot看起來像標注marker一樣。
⑵ 怎樣在java中調用百度地圖的API
網路地圖Web服務API為開發者提供http介面,即開發者通過http形式發起檢索請求,獲取返回json或xml格式的檢索數據。
api官網說明鏈接:
http://developer..com/map/webservice.htm
1、可用介面列舉:
獲取相關地址提示 place suggestion
http://api.map..com/place/v2/suggestion?query=水杉®ion=成都&output=json&ak=
2、獲取坐標 geocoding
http://api.map..com/geocoder?address=錦江區菱安路299號&output=json&key=
http://api.map..com/place/v2/search?ak=&output=json&query=藍光coco金沙&page_size=10&page_num=0&scope=1®ion=成都
{
"status":0,
"message":"ok",
"total":2,
"results":[
{
"name":"藍光COCO金沙",
"location":{
"lat":30.687544,
"lng":103.996691
},
"address":"西三環外金沙西源大道(IT大道旁)",
"uid":"223992992c5ee7e0841541df"
},
{
"name":"藍光COCO金沙2期",
"location":{
"lat":30.681123,
"lng":103.991123
},
"address":"青羊區金沙IT大道旁",
"uid":"b7bb5abb1cd4982213293580"
}
]
}
3、設施導航
http://api.map..com/place/v2/search?ak=&output=json&query=圖書館&page_size=20&page_num=0&scope=2®ion=成都
4、java測試類:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class LocationUtil {
private static final String BAIDU_APP_KEY = "";
/**
* 返回輸入地址的經緯度坐標 key lng(經度),lat(緯度)
*/
public static Map<String, String> getLatitude(String address) {
try {
// 將地址轉換成utf-8的16進制
address = URLEncoder.encode(address, "UTF-8");
// 如果有代理,要設置代理,沒代理可注釋
// System.setProperty("http.proxyHost","192.168.172.23");
// System.setProperty("http.proxyPort","3209");
URL resjson = new URL("http://api.map..com/geocoder?address="
+ address + "&output=json&key=" + BAIDU_APP_KEY);
BufferedReader in = new BufferedReader(new InputStreamReader(
resjson.openStream()));
String res;
StringBuilder sb = new StringBuilder("");
while ((res = in.readLine()) != null) {
sb.append(res.trim());
}
in.close();
String str = sb.toString();
System.out.println("return json:" + str);
if(str!=null&&!str.equals("")){
Map<String, String> map = null;
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<String, String>();
map.put("lng", lng);
map.put("lat", lat);
return map;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String args[]) {
Map<String, String> map = LocationUtil.getLatitude("成都 高新西區西區大道1398號");
if (null != map) {
System.out.println(map.get("lng"));
System.out.println(map.get("lat"));
}
}
}
⑶ 怎樣用java調用百度地圖的JavaScript API
這種地圖類的api都是基於前端的 簡單的就是說 你在前端用javascript實例化一個地圖 可以通過自定義伺服器請求獲取你需要的數據 然後把數據返回給api api就會自動幫你處理數據 產生新的視圖
⑷ 如何使用java和百度地圖api 得到兩點之間的路程(駕車行駛距離)
獲取到兩點的經緯度,再調用網路地圖的api計算。我記得,有一個計算距離的api.
<scripttype="text/javascript">
//網路地圖API功能
varmap=newBMap.Map("allmap");
map.centerAndZoom("重慶",12);//初始化地圖,設置城市和地圖級別。
varpointA=newBMap.Point(106.486654,29.490295);//創建點坐標A--大渡口區
varpointB=newBMap.Point(106.581515,29.615467);//創建點坐標B--江北區
alert('從大渡口區到江北區的距離是:'+(map.getDistance(pointA,pointB)).toFixed(2)+'米。');//獲取兩點距離,保留小數點後兩位
varpolyline=newBMap.Polyline([pointA,pointB],{strokeColor:"blue",strokeWeight:6,strokeOpacity:0.5});//定義折線
map.addOverlay(polyline);//添加折線到地圖上
</script>
⑸ java開發 怎麼把圖層放到百度地圖上
如果要在網路地圖上實現一張自己自定義的地圖,就需要使用網路地圖自定義圖層介面。實現效果如下:
但是網路地圖中關於自定義圖層的介紹甚少,便以此博文以記錄,方便同行了解和使用。
網路地圖官方文檔中,關於自定義圖層的介紹是這樣的:
=========華麗麗的分隔線===========
自定義圖層
地圖坐標系
在使用自定義圖層前,您需要了解網路地圖的地圖坐標系,網路地圖坐標系涉及:
經緯度球面坐標系統
墨卡托平面坐標系統
圖塊編號系統
經緯度是一種利用三維空間的球面來定義地球上的空間的球面坐標系,它能夠標示地球上任何一個位置。通過倫敦格林尼治天文台原址的經線為0度經線,從0度經線向東、向西各分180度。赤道為0度緯線,赤道以北的緯線稱為北緯、以南的稱為南緯。在網路地圖中,東經和北緯用正數表示,西經和南緯用負數表示。例如北京的位置大約是北緯39.9度,東經116.4度,那麼用數值標示就是經度116.6,緯度39.9。
在網路地圖中,習慣經度在前,緯度在後,例如:
var point = new BMap.Point(116.404, 39.915); // 創建點坐標,經度在前,緯度在後
由於網路地圖是顯示在平面上的,因此在地圖內部系統中需要將球面坐標轉換為平面坐標,這個轉換過程稱為投影。網路地圖使用的是墨卡托投影。墨卡托平面坐標如下圖所示,平面坐標與經緯度坐標系的原點是重合的。
網路地圖在每一個級別將整個地圖劃分成若干個圖塊,通過編號系統將整個圖塊整合在一起以便顯示完整的地圖。當地圖被拖動或者級別發生變化時,地圖API將會根據平面坐標計算出當前視野內所需顯示的圖塊的編號。網路地圖圖塊編號規則如下圖所示:
從平面坐標原點開始的右上方向的圖塊編號為0,0,以此類推。在最低的縮放級別(級別 1)中,整個地球由 4 張圖塊組成。隨著級別的增長,地圖所使用的圖塊個數也隨之增多。
定義取圖規則
通過TileLayer類開發者可以實現自定義圖層。其中,TileLayer實例的getTilesUrl方法需要實現,用來告訴API取圖規則。getTilesUrl方法的參數包括tileCoord和zoom,其中tileCoord為圖塊的編號信息,zoom為圖塊的級別,每當地圖需要顯示特定級別的特定位置的圖塊時就會自動調用此方法,並提供這兩個參數。使用者需要告知API特定編號和級別所對應的圖塊的地址,這樣API就能正常顯示自定義的圖層了。
添加和移除自定義圖層
以下代碼在每個圖塊的所有縮放級別上顯示一個簡單的透明疊加層,使用浮動紅色小水滴表示圖塊的輪廓。
var map = new BMap.Map("l-map"); // 創建地圖實例
var point = new BMap.Point(116.404, 39.915); // 創建點坐標
map.centerAndZoom(point,15); // 初始化地圖,設置中心點坐標和地圖級別
var tilelayer = new BMap.TileLayer(); // 創建地圖層實例
tilelayer.getTilesUrl=function(){ // 設置圖塊路徑
return "layer.gif";
};
map.addTileLayer(tilelayer); // 將圖層添加到地圖上
=========華麗麗的分隔線============
這里講得讓人一知半解,最主要的是,文檔中並沒有說明如何實現getTilesUrl方法,以及如何實現將一張自己的地圖分隔成符合網路地圖要求的圖塊。
現在記錄一下我解決這個問題的過程。
首先,我先下載網路地圖瓦格圖片切圖工具:https://github.com/jiazheng/BaiMapTileCutter
其次,找到自己的地圖,導入其中進行切片,參考Sup_Heaven轉的博文:http://blog.csdn.net/sup_heaven/article/details/8461586
最後將圖片放入項目資源文件中,實現getTitlesUrl方法即可。
這里需要補充一下的同,Sup_Heaven轉的博文中,並沒有詳細說明中心點和瓦格圖片之間的關系,只告訴我們其然卻不知其所以然。藉助度娘了解。網路地圖的所有瓦格圖片都是256px*256px的正方形圖片,其圖片的位置由經緯度和放大倍數zoom決定,所以在使用工具TileCutter時,設置對的級別范圍和中心點,否則會導致切出的圖片與實際需要不符。如果大家在使用過程有疑問的,歡迎留言交流
⑹ 百度地圖api java怎麼用
一、申請密鑰
1、先用eclipse創建一個Android工程
2、在網路api官網上申請一個密鑰,鏈接:http://lbsyun..com/apiconsole/key
bubuko.com,布布扣
二、工程配置
1、將mapapi_vX_X_X.jar拷貝到工程libs目錄下,將libBaiMapSDK_vX_X_X.so拷貝到libs\armeabi
目錄下,拷貝完成後,如下所示:
註:liblocSDK3.so和locSDK_3.1.jar為網路定位SDK所使用資源,開發者可根據實際需求自行添加。
bubuko.com,布布扣
2、右鍵工程屬性,在Libraries中選擇「Add External JARs」,選擇mapapi_vX_X_X.jar,確定返回
配置好以上步驟,即可使用網路地圖了
三、顯示網路地圖
1、在android配置清單文件中AndroidManifest.xml添加開發密鑰和所需許可權
<application> <meta-data android:name="com..lbsapi.API_KEY" android:value="開發者 key" /> </application>
所需許可權
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、在xml布局中添加地圖控制項
<com..mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
?3、在應用程序創建時初始化,SDK引用的全局變數Context
注意:在SDK各功能組件使用之前都需要調用
SDKInitializer.initialize(getApplicationContext());,因此我們建議該方法放在Application的初始化方法中
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
SDKInitializer.initialize(getApplicationContext());
System.out.println("SDKInitializer一初始化");
}
}
設置自定義的application為默認應用
<application
android:name="com.bao.ah.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
//注意該方法要再setContentView方法之前實現
//SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
4、網路地圖應和Activity生命周期綁定
public class MainActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
//注意該方法要再setContentView方法之前實現
//SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//獲取地圖控制項引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity執行onPause時執行mMapView. onPause (),實現地圖生命周期管理
mMapView.onPause();
}
}
⑺ java使用百度地圖,進行點定位,點位置不正確
用的是網路地圖api2.0吧,2.0有這個問題,不知道為什麼
可以這樣寫,頁面一載入,就重新定義坐標
⑻ 百度地圖有沒有介面計算兩點之間的路線距離
我想通過Java調用網路地圖的介面來計算兩點之間的路線距離,不過沒看到有這個介面。
雖然jdk1.6裡面能調用js方法,但是網路地圖需要密鑰,所以難搞了。:'(