上週剛接到一個需求,產品以爲高德的默認地圖樣式很差看,想要一個手繪地圖貼合上去,看着美觀不少,然而我心裏確是抵觸的,沒法 ,產品講了,只能先回答試試看看。接下拉就是一搏谷歌搜索。html
web端有現成的方案,直接貼合自定義圖片web
var imageLayer = new AMap.ImageLayer({
url: 'gulangyu.png',
bounds: new AMap.Bounds(
[118.057708, 24.436293], //左下角
[118.077706, 24.454069] //右上角
),
zooms: [15, 18]
});
var map = new AMap.Map('container', {
resizeEnable: true,
center: [118.067042,24.444673],
zoom: 15,
layers: [
new AMap.TileLayer(),
imageLayer
]
});
複製代碼
上面就能夠直接貼合手繪地圖,須要四角定位,而後直接把圖片的圖層貼合上去。緩存
考慮到性能問題以及後續的web和native的交互,在低端手機顯示比較卡頓,先廢棄此方案。bash
[web端的具體貼合能夠參考]www.cnblogs.com/milkmap/p/6…ide
此方案我想一想就以爲扯淡,Marker自己就是作標識用的,要貼合在地圖上面,缺點一堆的,點數過多,圖片內存佔用大,沒法縮放等,後面我直接拒絕性能
經過查看高德的文檔ui
顯示在基本地圖上面的一個圖層,貌似能夠完成貼合手繪地圖而後這個須要後臺配合提供在線的瓦片圖服務 具體代碼以下url
private void initTile() {
//後臺的瓦片圖路徑
final String tileUrl = "http://******/mapImg/tiles/";
TileOverlayOptions tileOverlayOptions =
new TileOverlayOptions().tileProvider(new UrlTileProvider(256, 256) {
@Override
public URL getTileUrl(int x, int y, int zoom) {
try {
// x橫座標 ,y縱座標,zoom縮放比
String url = tileUrl + zoom+ "/"+x + "_" + y + ".png";
LogUtils.i(url);
return new URL(url);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
});
tileOverlayOptions.diskCacheEnabled(true)
//添加緩存路徑
.diskCacheDir("/storage/emulated/0/amap/OMCcache")
//瓦片圖數量
.diskCacheSize(100000)
.memoryCacheEnabled(true)
.memCacheSize(100000)
//顯示的優先級
.zIndex(-9999);
//添加到地圖
TileOverlay mtileOverlay = aMap.addTileOverlay(tileOverlayOptions);
}
複製代碼
只須要返回後臺的圖片url路徑便可完成瓦片圖加載,其中x,y都是根據zoom的縮放比計算的,並且獲取圖片,要注意對應的參數,還有一個比較重要的是zIndex的設置,若是還有路徑規劃相似的Overlay須要設置zIndex的大小,以達到顯示與手繪地圖圖層之上spa