『壹』 java瓦片地圖開發如何實現地圖的平滑縮放
java瓦片地圖開發實現地圖的平滑縮放可以採用以下方法:
1、利用java圖彎枝形界面庫對瓦片地圖進行顯示,可以使用Java2D或JavaFX等庫。
2、在地圖縮放時,可以使用雙線性插值演算法對地圖數據進敬粗行埋稿敏處理,以達到平滑縮放的效果。
3、在縮放時,可以通過計算地圖數據的位置和大小,來決定需要載入哪些瓦片,並且可以使用緩存技術來優化瓦片載入的速度。
『貳』 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時,設置對的級別范圍和中心點,否則會導致切出的圖片與實際需要不符。如果大家在使用過程有疑問的,歡迎留言交流
『叄』 java開發中在離線情況下可以調用百度地圖嗎
手機的JAVA,可以的,網路地圖的官方網站中有示範的,先下載好地圖在SD卡
『肆』 百度地圖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和百度地圖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>