‘壹’ 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>