在高德地图 Android SDK上添加GeoServer发布的WMS图层
生活随笔
收集整理的這篇文章主要介紹了
在高德地图 Android SDK上添加GeoServer发布的WMS图层
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
因?yàn)轫?xiàng)目需要,要在高德地圖上添加自己的地圖服務(wù)器發(fā)布的地圖,想到了通過WMS來添加。在網(wǎng)上找到了兩篇相關(guān)的博文,用他們的代碼都無法實(shí)現(xiàn),后來感覺這兩個(gè)人根本就沒有實(shí)際去做,代碼里有同樣的邏輯性錯(cuò)誤。自己修改了一下,實(shí)現(xiàn)效果如下圖所示:
首先定義實(shí)體類:
public class Gps {private double wgLat;private double wgLon;public Gps(double wgLat, double wgLon) {setWgLat(wgLat);setWgLon(wgLon);}public double getWgLat() {return wgLat;}public void setWgLat(double wgLat) {this.wgLat = wgLat;}public double getWgLon() {return wgLon;}public void setWgLon(double wgLon) {this.wgLon = wgLon;}@Overridepublic String toString() {return wgLat + "," + wgLon;} }然后擴(kuò)展高德地圖的UrlTileProvider
import android.content.Context; import com.amap.api.maps.model.UrlTileProvider;import java.net.MalformedURLException; import java.net.URL;public class HeritageScopeTileProvider extends UrlTileProvider {private String mRootUrl;//默認(rèn)瓦片大小private static int titleSize = 256;//a=6378137±2(m)//基本參數(shù)private final double initialResolution = 156543.03392804062;//2*Math.PI*6378137/titleSize;private final double originShift = 20037508.342789244;//2*Math.PI*6378137/2.0; 周長(zhǎng)的一半private final double HALF_PI = Math.PI / 2.0;private final double RAD_PER_DEGREE = Math.PI / 180.0;private final double HALF_RAD_PER_DEGREE = Math.PI / 360.0;private final double METER_PER_DEGREE = originShift / 180.0;//一度多少米private final double DEGREE_PER_METER = 180.0 / originShift;//一米多少度private Context context;public HeritageScopeTileProvider(Context context) {super(titleSize, titleSize);this.context = context;//地址寫你自己的wms地址mRootUrl = "http://192.168.101.50:8080/geoserver/indoor/wms?LAYERS=indoor:F1&FORMAT=image%2Fpng&TRANSPARENT=TRUE&SERVICE=WMS&VERSION=1.1.0&REQUEST=GetMap&STYLES=&SRS=EPSG:4326&BBOX=";}@Overridepublic URL getTileUrl(int x, int y, int level) {try {String url = mRootUrl + TitleBounds(x, y, level);return new URL(url);} catch (MalformedURLException e) {e.printStackTrace();}return null;}/*** 根據(jù)像素、等級(jí)算出坐標(biāo)** @param p* @param zoom* @return*/private double Pixels2Meters(int p, int zoom) {return p * Resolution(zoom) - originShift;}/*** 根據(jù)瓦片的x/y等級(jí)返回瓦片范圍** @param tx* @param ty* @param zoom* @return*/private String TitleBounds(int tx, int ty, int zoom) {double minX = Pixels2Meters(tx * titleSize, zoom);double maxY = -Pixels2Meters(ty * titleSize, zoom);double maxX = Pixels2Meters((tx + 1) * titleSize, zoom);double minY = -Pixels2Meters((ty + 1) * titleSize, zoom);//轉(zhuǎn)換成經(jīng)緯度minX = Meters2Lon(minX);minY = Meters2Lat(minY);maxX = Meters2Lon(maxX);maxY = Meters2Lat(maxY);//坐標(biāo)轉(zhuǎn)換工具類構(gòu)造方法 Gps( WGS-84) 轉(zhuǎn) 為高德地圖需要的坐標(biāo)Gps position1 = PositionUtil.gcj_To_Gps84(minY, minX);minX = position1.getWgLon();minY = position1.getWgLat();Gps position2 = PositionUtil.gcj_To_Gps84(maxY, maxX);maxX = position2.getWgLon();maxY = position2.getWgLat();return minX + "," + Double.toString(minY) + "," + Double.toString(maxX) + "," + Double.toString(maxY) + "&WIDTH=256&HEIGHT=256";}/*** 計(jì)算分辨率** @param zoom* @return*/private double Resolution(int zoom) {return initialResolution / (Math.pow(2, zoom));}/*** X米轉(zhuǎn)經(jīng)緯度*/private double Meters2Lon(double mx) {double lon = mx * DEGREE_PER_METER;return lon;}/*** Y米轉(zhuǎn)經(jīng)緯度*/private double Meters2Lat(double my) {double lat = my * DEGREE_PER_METER;lat = 180.0 / Math.PI * (2 * Math.atan(Math.exp(lat * RAD_PER_DEGREE)) - HALF_PI);return lat;}/*** X經(jīng)緯度轉(zhuǎn)米*/private double Lon2Meter(double lon) {double mx = lon * METER_PER_DEGREE;return mx;}/*** Y經(jīng)緯度轉(zhuǎn)米*/private double Lat2Meter(double lat) {double my = Math.log(Math.tan((90 + lat) * HALF_RAD_PER_DEGREE)) / (RAD_PER_DEGREE);my = my * METER_PER_DEGREE;return my;} }其次在頁(yè)面中引用,如果網(wǎng)速慢的話可能過一會(huì)才能看到效果
HeritageScopeTileProvider tileProvider = new HeritageScopeTileProvider(MainActivity.this);aMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider).zIndex(1111).diskCacheDir("/storage/amap/cache").diskCacheEnabled(true).diskCacheSize(100));總結(jié)
以上是生活随笔為你收集整理的在高德地图 Android SDK上添加GeoServer发布的WMS图层的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MM表】MARD VS S032
- 下一篇: mysql高德地图设计_基于高德开放平台