官方說是可以使用自己的圖片,但是圖片的大小和規格都沒有明說,主要用於添加自己的圖層信息,有在線和離線兩種!估計使用率很低,也就不多說了!

package cq.cake.chwl.ui;

import android.content.res.AssetManager;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.FileTileProvider;

import com.baidu.mapapi.map.MapStatus;

import com.baidu.mapapi.map.MapStatusUpdate;

import com.baidu.mapapi.map.MapStatusUpdateFactory;

import com.baidu.mapapi.map.Tile;

import com.baidu.mapapi.map.TileOverlay;

import com.baidu.mapapi.map.TileOverlayOptions;

import com.baidu.mapapi.map.TileProvider;

import com.baidu.mapapi.map.UrlTileProvider;

import com.baidu.mapapi.model.LatLng;

import com.baidu.mapapi.model.LatLngBounds;

import java.io.InputStream;

import java.nio.ByteBuffer;

import cq.cake.base.BaseToolbarMapActivity;

import cq.cake.chwl.R;

/**

* 地圖SDK自v3.6.0起,新增瓦片圖層(tileOverlay), 該圖層支持開發者添加自有瓦片數據,

* 包括本地加載和在線下載兩種方式。該圖層可隨地圖的平移、縮放、旋轉等操作做相應的變換,

* 它僅位於底圖之上(即瓦片圖層將會遮擋底圖,不遮擋其他圖層),

* 瓦片圖層的添加順序不會影響其他圖層(例如:POI搜索圖層、我的位置圖層等)的疊加關系,

* 適用於開發者擁有某一區域的地圖,並希望使用此區域地圖覆蓋相應位置的百度地圖。

*/

public class TileActivity extends BaseToolbarMapActivity implements BaiduMap.OnMapLoadedCallback{

private TileOverlay tileOverlay;//瓦片圖對象

// 設置瓦片圖的在線緩存大小,默認為20 M

private static final int TILE_TMP = 20 * 1024 * 1024;

private static final int MAX_LEVEL = 21;

private static final int MIN_LEVEL = 3;

Tile offlineTile;

private boolean mapLoaded = false;

MapStatusUpdate mMapStatusUpdate;

private final String onlineUrl = "http://api0.map.bdimg.com/customimage/tile"

+ "?&x={x}&y={y}&z={z}&udt=20150601&customid=light";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_tile);

MapStatus.Builder builder = new MapStatus.Builder();

builder.zoom(16.0f);

builder.target(new LatLng(39.914935D, 116.403119D));

mMapStatusUpdate = MapStatusUpdateFactory.newMapStatus(builder.build());

mBaiduMap.setMapStatus(mMapStatusUpdate);

initOffTile();

}

private void initOffTile() {

TileOverlayOptions options = new TileOverlayOptions();

// 構造顯示瓦片圖范圍,當前為世界范圍

LatLng northeast = new LatLng(80, 180);

LatLng southwest = new LatLng(-80, -180);

// 設置離線瓦片圖屬性option

options.tileProvider(tileProvider)

.setPositionFromBounds(new LatLngBounds.Builder().include(northeast).include(southwest).build());

// 通過option指定相關屬性,向地圖添加離線瓦片圖對象

tileOverlay = mBaiduMap.addTileLayer(options);

if (mapLoaded) {

setMapStatusLimits();

}

}

private void setMapStatusLimits() {

LatLngBounds.Builder builder = new LatLngBounds.Builder();

builder.include(new LatLng(39.94001804746338, 116.41224644234747))

.include(new LatLng(39.90299859954822, 116.38359947963427));

mBaiduMap.setMapStatusLimits(builder.build());

mBaiduMap.setMaxAndMinZoomLevel(17.0f, 16.0f);

mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NONE);

}

@Override

public void onMapLoaded() {

mapLoaded = true;

}

/**

* 定義瓦片圖的離線Provider,並實現相關接口

* MAX_LEVEL、MIN_LEVEL 表示地圖顯示瓦片圖的最大、最小級別

* Tile 對象表示地圖每個x、y、z狀態下的瓦片對象

*/

FileTileProvider tileProvider = new FileTileProvider() {

@Override

public Tile getTile(int x, int y, int z) {

// 根據地圖某一狀態下x、y、z加載指定的瓦片圖

String filedir = "LocalTileImage/" + z + "/" + z + "_" + x + "_" + y + ".jpg";

Bitmap bm = getFromAssets(filedir);

if (bm == null) {

return null;

}

// 瓦片圖尺寸必須滿足256 * 256

offlineTile = new Tile(bm.getWidth(), bm.getHeight(), toRawData(bm));

bm.recycle();

return offlineTile;

}

@Override

public int getMaxDisLevel() {

return MAX_LEVEL;

}

@Override

public int getMinDisLevel() {

return MIN_LEVEL;

}

};

/**

* 瓦片文件解析為Bitmap

* @param fileName

* @return 瓦片文件的Bitmap

*/

public Bitmap getFromAssets(String fileName) {

AssetManager am = this.getAssets();

InputStream is = null;

Bitmap bm;

try {

is = am.open(fileName);

bm = BitmapFactory.decodeStream(is);

return bm;

} catch (Exception e) {

e.printStackTrace();

return null;

}

}

/**

* 解析Bitmap

* @param bitmap

* @return

*/

byte[] toRawData(Bitmap bitmap) {

ByteBuffer buffer = ByteBuffer.allocate(bitmap.getWidth()

* bitmap.getHeight() * 4);

bitmap.copyPixelsToBuffer(buffer);

byte[] data = buffer.array();

buffer.clear();

return data;

}

/**

* 使用瓦片圖的在線方式

*/

private void onlineTile() {

mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);

if (tileOverlay != null && mBaiduMap != null) {

tileOverlay.removeTileOverlay();

}

// final String urlString = mEditText.getText().toString();

/**

* 定義瓦片圖的在線Provider,並實現相關接口

* MAX_LEVEL、MIN_LEVEL 表示地圖顯示瓦片圖的最大、最小級別

* urlString 表示在線瓦片圖的URL地址

*/

TileProvider tileProvider = new UrlTileProvider() {

@Override

public int getMaxDisLevel() {

return MAX_LEVEL;

}

@Override

public int getMinDisLevel() {

return MIN_LEVEL;

}

@Override

public String getTileUrl() {

return onlineUrl;

}

};

TileOverlayOptions options = new TileOverlayOptions();

// 構造顯示瓦片圖范圍,當前為世界范圍

LatLng northeast = new LatLng(80, 180);

LatLng southwest = new LatLng(-80, -180);

// 通過option指定相關屬性,向地圖添加在線瓦片圖對象

tileOverlay = mBaiduMap.addTileLayer(options.tileProvider(tileProvider).setMaxTileTmp(TILE_TMP)

.setPositionFromBounds(new LatLngBounds.Builder().include(northeast).include(southwest).build()));

if (mapLoaded) {

mBaiduMap.setMaxAndMinZoomLevel(21.0f, 3.0f);

mBaiduMap.setMapStatusLimits(new LatLngBounds.Builder().include(northeast).include(southwest).build());

mBaiduMap.setMapStatus(mMapStatusUpdate);

}

}

}

最后的效果圖:

百度地图瓦片 android,深入學習百度地圖Android SDK v4.0.0【第五關】瓦片圖層相关推荐

  1. BaiduMap---百度地图官方Demo之调用百度地图(介绍如何调启百度地图实现自身业务功能)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  2. html5 百度地图api文档,开发指南--百度地图JavaScript API大众版.doc

    开发指南--百度地图JavaScriptAPI大众版开发指南--百度地图JavaScriptAPI大众版 简介 JavaScript API大众版 JavaScript API功能介绍 百度地图Jav ...

  3. python百度地图标注_利用python和百度地图API实现数据地图标注

    如题,先上效果图: 主要分为两大步骤使用python语句,通过百度地图API,对已知的地名抓取经纬度 使用百度地图API官网的html例程,修改数据部分,实现呈现效果 一.使用python语句,通过百 ...

  4. js百度地图小车html,Web js实现百度地图实时轨迹画线 小车车行驶轨迹 | 彬菌

    版权声明:转载原创文章请以超链接形式请注明原文章出处,尊重作者,尊重原创! 恰饭广告 注意: 1.百度地图ak换成自己在百度地图官网申请 2.建议使用firefox浏览器,google被墙无法调用gp ...

  5. 百度地图离线开发demo(vue+百度地图3.0+百度瓦片)(仅供参考,学习探讨)

    公司需求开发离线地图功能.搜索学习,踩坑,试验(由于参考借鉴了n多文章,就不分别贴出对应文章了,感谢分享...),最终整合了一套集成vue的离线地图开发方案,文章将分享一整套的解决方案思路与方式.后续 ...

  6. 基于 android 平台的百度地图手机导航设计文献综述,文献综述-基于Android平台的手机Web地图服务设计.doc...

    PAGE 1 文 献 综 述 毕业设计题目: 基于Android平台的 手机Web地图服务设计 PAGE 4 PAGE \* MERGEFORMAT 1 基于Android平台的手机Web地图服务设计 ...

  7. Android studio3.0对于百度地图api开发(4)——百度地图地图覆盖物制作

    承接上文未完的继续介绍,上文内容:https://blog.csdn.net/qq_41562408/article/details/82810484主要实现百度地图的定位以及对于地图覆盖物进行简单介 ...

  8. retrofit 解析百度地图api 返回数据_新版百度地图建筑数据含高度解析

    注:本文中所述内容仅作为研究用途,不包括任何技术细节,不提供数据爬取.非法攻击的咨询和支持.另:百度建筑轮廓数据中存在明显签名式错误,下载使用容易被追求侵权. 矢量瓦片:爬取百度地图必须要了解矢量瓦片 ...

  9. 安卓java百度地图api文档_Android调用百度地图API 实时定位代码

    [java]代码库package yu.hong.map; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.GeoPoint; ...

最新文章

  1. Java纸牌拖拉机简单模拟
  2. Erlang China 大会 - CN Erlounge III - 发起
  3. loadrunner11录制不成功解决方法(收集)
  4. 反射调用 java bean的set和get方法
  5. mlp神经网络_白天鹅黑天鹅灰天鹅?卷积神经网络帮你搞定识别
  6. 智能硬件的时代,嵌入式是否已经日薄西山
  7. 笔记本电脑5年没清灰了_返利网5年估值腰斩,没了P2P六亿对赌难完成
  8. Java笔记之对象代理实例
  9. 帝豪gl车机系统降级_何以剑指合资?帝豪GL/英朗底盘对比
  10. [SQL实战]之查找当前薪水排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by
  11. 前景看淡,移动医疗九成或将成炮灰
  12. 软件需求模式阅读笔记之一
  13. Linux安装nginx做端口映射
  14. 基于fdw的跨Greenplum集群数据库查询实现
  15. 【光学】基于matlab色散曲线拟合【含Matlab源码 2053期】
  16. keil5 mdk安装教程
  17. centos os u盘启动盘_UltraISO制作u盘centos启动盘教程
  18. 解决百度网盘下载慢,提速下载
  19. 伊利诺伊大学在线计算机硕士,UIUC伊利诺伊大学厄巴纳香槟分校计算机科学硕士MSc in Computer Science...
  20. 蓝桥杯省赛真题2016题解

热门文章

  1. 笔记本硬盘坏了还能恢复数据吗 笔记本硬盘坏了怎么修复
  2. Android10的WIFI 名称读取为空解决
  3. 京东到家开放平台消息系统-进阶之路
  4. 高考选日语可以学计算机吗,如果高考选日语,大学选专业有什么限制
  5. anaconda3更新后,菜单栏中没有Anaconda Promt
  6. Zookeeper客户端Curator详解
  7. 日语口语1.11  松田社長がおいでになることを伺っておりまして、ずっと待っておりました
  8. Docker 图片水印中文乱码显示为方框, 设置Docker容器字体
  9. 通过耳机口左右声道输出得到4路控制信号
  10. LiveData的使用及详解