因为项目需要,要在高德地图上添加自己的地图服务器发布的地图,想到了通过WMS来添加。在网上找到了两篇相关的博文,用他们的代码都无法实现,后来感觉这两个人根本就没有实际去做,代码里有同样的逻辑性错误。自己修改了一下,实现效果如下图所示:

首先定义实体类:

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;}
}

然后扩展高德地图的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;//默认瓦片大小private static int titleSize = 256;//a=6378137±2(m)//基本参数private final double initialResolution = 156543.03392804062;//2*Math.PI*6378137/titleSize;private final double originShift = 20037508.342789244;//2*Math.PI*6378137/2.0; 周长的一半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;}/*** 根据像素、等级算出坐标** @param p* @param zoom* @return*/private double Pixels2Meters(int p, int zoom) {return p * Resolution(zoom) - originShift;}/*** 根据瓦片的x/y等级返回瓦片范围** @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);//转换成经纬度minX = Meters2Lon(minX);minY = Meters2Lat(minY);maxX = Meters2Lon(maxX);maxY = Meters2Lat(maxY);//坐标转换工具类构造方法 Gps( WGS-84) 转 为高德地图需要的坐标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";}/*** 计算分辨率** @param zoom* @return*/private double Resolution(int zoom) {return initialResolution / (Math.pow(2, zoom));}/*** X米转经纬度*/private double Meters2Lon(double mx) {double lon = mx * DEGREE_PER_METER;return lon;}/*** Y米转经纬度*/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经纬度转米*/private double Lon2Meter(double lon) {double mx = lon * METER_PER_DEGREE;return mx;}/*** Y经纬度转米*/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;}
}

其次在页面中引用,如果网速慢的话可能过一会才能看到效果

 HeritageScopeTileProvider tileProvider = new HeritageScopeTileProvider(MainActivity.this);aMap.addTileOverlay(new TileOverlayOptions().tileProvider(tileProvider).zIndex(1111).diskCacheDir("/storage/amap/cache").diskCacheEnabled(true).diskCacheSize(100));

在高德地图 Android SDK上添加GeoServer发布的WMS图层相关推荐

  1. mapbox 添加geoserver发布的wms服务及wms服务属性查询

    <!DOCTYPE html> <html><head><meta charset='utf-8' /><title>mapbox 添加 g ...

  2. skylin怎么添加geoserver发布的wfs图层

    新建图层 连接geoserver服务器 wfs server中格式为http://youip:8080/geoserver/youkongjian/wfs?service=WFS

  3. Android 集成高德地图——当前定位,添加图标,画路线,设置显示中心位置,比例,地图刷新位置监听,判断GPS开启,去打开GPS

    /*** 判断定位服务是否开启** @param* @return true 表示开启*/ public static boolean isLocationEnabled(Context contex ...

  4. android高德地图上加自定义菜单,高德地图Android室内地图如何自定义覆盖物

    高德地图Android室内地图如何自定义覆盖物 亲,小德看到亲已经在开坛创建工单咨询了呢,建议亲耐心等待回复哦,会有开发大神给亲回复哦~ gao de di tu a n d r o i d shi ...

  5. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  6. android开发百度地图坐标偏差,利用百度地图Android sdk高仿微信发送位置功能及遇到的问题...

    接触了百度地图开发平台半个月了,这2天试着模仿了微信给好友发送位置功能,对百度地图的操作能力又上了一个台阶 我在实现这个功能的时候,遇到一些困难,可能也是别人将会遇到的困难,特在此列出 1.在微信发送 ...

  7. 百度地图 Android SDK - 检索功能使用的简单演示样例

    百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...

  8. 高德地图 Android API 的基站定位原理及使用方法

    基站定位是根据通讯网络基站信息进行定位的方法,此定位方法需要有较丰富的基站地理信息数据支持.高德地图目前的基站数据库支持 GSM 网络和CDMA网络. 定位机制 Android 平台主要使用三个 Cl ...

  9. 高德地图 android api 实现自动定位

    未经允许,禁止转载,违者必究! 浣熊我最近在研究高德地图android api,看到第三章定位信息后半部分关于"如何通过MyLocationOverlay 实现自动定位"的时候我凌 ...

最新文章

  1. Basic local alignment search tool (BLAST)
  2. solve Ax+By+C=0
  3. 赋能 打造应对不确定性的敏捷团队 pdf_《赋能》:麦克里斯特尔教你打造应对不确定性的敏捷团队...
  4. Windows Server 2008中部署AD
  5. linux+用户的shell,linux更换用户_更改linux用户登录shell的方法
  6. pyqt5 tableview 设置行颜色_Tools Ⅰ:如何用 PyQt5 和 Qt Designer 在 Pycharm 中愉快地开发软件...
  7. 原 剑指offer(刷题11-20)--c++,Python版本
  8. Perceptual:英特尔感知计算挑战赛 正式启动
  9. Linux之/etc/group文件
  10. R语言︱缺失值处理之多重插补——mice包
  11. 【学习笔记】cs231n-assignment2-FullyConnectedNets
  12. 征信报告 加密文档_Secret Folder for Mac(文件加密隐藏软件)
  13. 远程访问内网监控摄像头【无公网IP】
  14. 计算机的硬盘配额如何更改,磁盘配额怎么设置
  15. matlab fisher z变换,关于GCA统计
  16. 【plang 1.4.6】Plang高级编程语言(发布)
  17. 王卫的新算盘?顺丰上线专享急件服务,从北京到上海收费上千元
  18. 利用单片机最小系统外接DS12C887 在LCD1602上显示实时时钟
  19. 什么是未登录词 Out-of-vocabulary(OOV)?
  20. idea中导入git项目时出现:Warning: Permanently added‘github.com’ (RSA) to the list of known hosts......

热门文章

  1. 云栖大会上宣布即将开源的手淘Atlas什么来头?
  2. 餐饮企业如何在疫情考题中渡过难关?
  3. [软件安全].任伟.扫描版
  4. 接班人不是克隆出来的:华为再显接班难
  5. 电子邮件头Received分析
  6. 三天2亿游玩人次,近期爆火的「人生重开模拟器」,好玩在哪?
  7. CMD设置代理 注册表设置IE代理
  8. 对勾函数_对勾函数-什么是对勾函数请问什么是对勾函数?如何使用 – 手机爱问...
  9. ios13全选手势_苹果手机双指、三指等操作手势,升级iOS13之后,居然多了这么多新操作?...
  10. 七牛云 Bucket是什么?怎么取得