Android高德地圖貼合圖片完成手繪地圖展現

上週剛接到一個需求,產品以爲高德的默認地圖樣式很差看,想要一個手繪地圖貼合上去,看着美觀不少,然而我心裏確是抵觸的,沒法 ,產品講了,只能先回答試試看看。接下拉就是一搏谷歌搜索。html

1.使用web版本的高德地圖,而後和native交互完成

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

2.使用Marker點貼合圖片

此方案我想一想就以爲扯淡,Marker自己就是作標識用的,要貼合在地圖上面,缺點一堆的,點數過多,圖片內存佔用大,沒法縮放等,後面我直接拒絕性能

3.使用瓦片圖TileOverlay

經過查看高德的文檔ui

image
顯示在基本地圖上面的一個圖層,貌似能夠完成貼合手繪地圖

而後這個須要後臺配合提供在線的瓦片圖服務 具體代碼以下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

相關文章
相關標籤/搜索