`
叫我Fox
  • 浏览: 14622 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

android添加WMS图层

    博客分类:
  • GIS
阅读更多

目前,关于OCG,WMS的Android客户端介绍的文章还是比较少。

下面翻译一篇很好的文章,介绍了如何实现WMS图层

原文地址
http://androidgps.blogspot.com/2008/09/simple-wms-client-for-android.html

 

 

 

Google's maps are not the only ones of interest: for those interested in science there are many more maps out there that show things like population density, cloud images, etc.
我们不仅仅对谷歌地图感兴趣,因为有很多地图服务具有特殊的科学意义,计算人口密度,显示云图像等等。
Some of these maps are available via Web Map Service WMS interfaces as specified by the OGC. WMS is essentially a standardised interface to maps on the Web that allows a client to specify the format (e.g. PNG), the size (e.g. 320x460) and the exact geographical coordinates: and what the user gets in return in an image.
这些地图服务中一些可以通过OGC规范的WMS形式发布。WMS是一个标准化的网络地图接口,它可以让客户端以地图坐标去确认(320x460)大小的PNG瓦片,从而返回用户一个完整的地图影像。

That makes it very easy to overlay Google Maps with all sorts of imagery, particularly satellite imagery.
这让用各种图层,尤其是卫星影像覆盖谷歌地图变得非常简单。
For this we start out defining a new Overlay class, WMSClient:

 

private class WMSOverlay extends Overlay {
  @Override
  public void draw(Canvas canvas, MapView mapView,
           boolean shadow) {
   super.draw(canvas, mapView, shadow);
   WMSLoader wmsclient = new WMSLoader();
   GeoPoint[] cornerCoords = MapUtils.getCornerCoordinates(mapView.getProjection(), canvas);
   Bitmap image = wmsclient.loadMap(canvas.getWidth(), canvas.getHeight(), cornerCoords[0], cornerCoords[1]);
   
   Paint semitransparent = new Paint();
   semitransparent.setAlpha(0x888);
   canvas.drawBitmap(image, 0, 0, semitransparent);
  }
  
 }
 

It is very simple: it somehow gets a Bitmap image from a class WMSLoader, to which I come in a second. Then it simply draws that image on the canvas, making it here semitransparent, so we see the underlying Google image.
这非常简单:就是是从WMSLoader中得到一幅位图。接着将图像画在容器中,让容器半透明,谷歌的影像就会在底图上了。
To get the WMS image we first need to get the corner coordinates of the screen, which is not very difficult as the projection object has a translation function for this (0,0) is the left top corner, and the right bottom is (width(), height()).
首先我们必须得到屏幕四角的坐标,这不是非常困难,因为头因对象以及通过函数this(0,0)得到左上角的坐标,而右下角的坐标为(width(), height())。

 


WMSLoader:

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import com.google.android.maps.GeoPoint;

public class WMSLoader {
 public static String TAG = "WMSLoader";
 
 public Bitmap loadMap(int width, int height, GeoPoint ul, GeoPoint lr) {
  URL url = null;
     
  try {
   url = new URL(String.format("http://iceds.ge.ucl.ac.uk/cgi-bin/icedswms?"  +
     "LAYERS=lights&TRANSPARENT=true&FORMAT=image/png&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application/vnd.ogc.se_inimage&SRS=EPSG:4326" + "" +
     "&BBOX=%f,%f,%f,%f&WIDTH=%d&HEIGHT=%d", 
     MapUtils.longitude(ul), MapUtils.latitude(lr),
     MapUtils.longitude(lr), MapUtils.latitude(ul), width, height));
  } catch (MalformedURLException e) {
   Log.e(TAG, e.getMessage());
  }
  InputStream input = null;
  try {
   input = url.openStream();
  } catch (IOException e) {
   Log.e(TAG, e.getMessage());
  }
  return BitmapFactory.decodeStream(input);
 }

 This class here has most of the URL hard-coded for proof of concept. Here we get an image from the ICEDS server, an academic WMS Server at University College London. In this case the 'lights' layer, which shows night-time light pollution - an indication of populatio density (or industrial activity). We just compose the complete URL, then open the input stream, where we get the image and pass it back to our Overlay. Bingo.

这个类可接受大多数的URL。在个示例里我们得到ICEDS server数据,学术伦敦大学学院的WMS服务器的形象。在这种情况下,'light'层,这表明夜间光污染- 一个人口的密度(或工业活动)的指示。
我们组装的完整的URL,然后打input stream,我们就得到的图像,并将它传递到我们的叠加。

(There is a thing about projections: Google Maps uses a form of Mercator, the one supported by the ICEDS server is WGS84. That means pixels will not lie exactly on top of each other, but it matters most when the image is zoomed out. We would need a server supporting the Google Maps projection to be exact....)

有一个关于 投影 的事情 :谷歌 地图 使用了 墨卡托投影 ,由 ICEDS 服务器所支持的 一个是 WGS84坐标 形式。 这意味着 像素 在匹配 准确, 我们需要 一台 准确支持 谷歌地图 的投影的地图服务。

最后图如下:

 


博客中关于MapUtil类的迷也没有解开,不过在评论中找到了源代码

full example of his WMS

http://code.google.com/p/android-eksempler/source/browse/trunk/AndroidElementer/src/eks/kort/KortAktivitet.java

 

 

翻译的不好 ,见笑

  • 大小: 34.9 KB
分享到:
评论

相关推荐

    Android-wms-layer:使用Google Map API在Android中添加WMS图层

    Android WMS层使用Google Map API在Android中添加WMS图层。 该项目是基于gradle的项目。原始项目

    mapboxwms天地图,高德地图,谷歌地图

    首先,你需要获取地图服务的WMS服务URL,然后创建一个WMS图层实例,并将其添加到地图实例中。例如,在Leaflet中,这可以通过`L.tileLayer.wms()`方法实现: ```javascript var wmsLayer = L.tileLayer.wms("地图...

    supermap加载天地图图层

    3. **添加图层**:将创建的图层对象添加到地图容器中,这样就可以在SuperMap界面中看到天地图的数据了。 4. **参数设置**:根据需求,可以设置图层的透明度、比例尺范围、投影方式等参数,以优化显示效果。 5. **...

    ArcGIS for android 访问天地图

    1. 添加图层切换:你可以动态地添加或移除图层,以满足不同场景的需求。 2. 实现地理编码和反地理编码:ArcGIS 提供了 `Geocoder` 类来实现地址到坐标、坐标到地址的转换。 3. 图形绘制和标注:通过 `Graphic` 和 ...

    wms源码java-mobile-android-samples:CARTO移动SDK的Android示例

    Android 示例(Java 和 Kotlin) 官方文档: 参考: 样本结构 你好地图如何初始化地图、在地图上设置市场、收听地图点击以及更改该标记的颜色和大小的基本示例。 高级地图 底图底图 - 选择不同的底图、样式、瓷砖...

    arcgis for Android 加载天地图

    3. **添加图层**: 使用 `Basemap` 类的 `createFromUrl()` 方法加载天地图服务。你可以选择不同的图层类型,如卫星影像(vec)或地形图(ter)。例如: ```java Basemap basemap = Basemap....

    SuperMap iMobile for Android打开在线三维场景

    在实现这一功能时,开发者需要了解天地图的服务接口,通常是TMS(Tile Map Service)或者OGC的WMS服务,并且知道如何在iMobile中添加这些服务作为图层。 接下来,我们来看如何操作。首先,开发者需要在iMobile应用...

    arcgis在线图层加载插件,可以加载百度地图、高德地图等在线地图

    arcgis在线图层加载插件,可以加载百度地图、高德地图等在线地图。MapOnline地图插件_升级版 v1.2,新增了“GoogleEarth地图”与“历史地图”,可以“加载自定义切片”,可以“以切片的方式访问WMS服务”,比ArcMap...

    Android客户端-使用MBTliles离线地图包

    4. 图层管理:支持图层的添加、删除、隐藏和显示控制。 五、开发实践与注意事项 在实际开发中,开发者需要注意兼容性问题,确保MBTiles文件在不同Android设备上的读取和渲染。此外,地图数据的更新和同步也是关键,...

    arcgis-runtime-samples-android-100.4.0.zip

    此外,还可以自定义底图,如添加自定义瓦片图层或WMS服务。 2. **图层操作**:ArcGIS支持多种图层类型,包括影像图层、地形图层、矢量图层等。开发者可以动态添加、删除和管理这些图层,控制其透明度、可见性等属性...

    android 使用osmdroid 加载离线map格式数据以及地图网格

    此外,osmdroid还支持添加标记、轨迹、自定义图层等功能,使得地图应用更加丰富。例如,我们可以使用Marker类添加点标记: ```java Marker marker = new Marker(mapView); marker.setPosition(new GeoPoint(51.5074,...

    arcgis for Android在线加载天地图

    7. **实现地图功能**: ArcGIS for Android还提供了丰富的功能,如图层管理、标记添加、地理编码、地理查询等,可以根据需要进行集成。 在提供的压缩包文件“OnLineTianDi”中,可能包含示例代码或资源,帮助开发者...

    安卓—arcgis-runtime-sdk-android-100.3.0.rar

    此外,还可以添加不同类型的图层(如矢量图层、影像图层、地形图层等)、标记点、线和面,以及进行空间分析,如缓冲区分析、距离计算、地理编码等。 5. **离线地图**:ArcGIS Runtime SDK还支持离线地图功能,...

    ArcGis for Android读取天地图2.0

    在ArcGIS for Android中,开发者需要获取天地图2.0的Web服务URL,通常是WMS或TMS服务。通过调用`AGSTiledMapServiceLayer`类,可以将天地图服务添加到地图中。例如: ```java AGSTiledMapServiceLayer tmsLayer =...

    arcgis-runtime-sdk-android-documentation-100-12-0.zip

    6. 数据编辑:允许用户在应用程序中直接编辑地图数据,包括添加、修改和删除图层中的要素。 三、API与编程模型 ArcGIS Runtime SDK for Android 提供了丰富的API,用于地图的创建、图层的管理和操作、地理服务的...

    ArcGIS RunTime SDK for Android 2.0

    ArcGIS RunTime SDK for Android 2.0 提供了全面的地图渲染和图层管理能力,支持多种地图格式,包括矢量和栅格数据。开发者可以轻松地加载在线地图服务,如Web Map Services (WMS) 和 Web Feature Services (WFS),...

    maplibre 开源gis地图工具 heatmap 热力图html前端代码示例

    4. **创建热力图图层**:使用`map.addLayer()`方法添加热力图图层,将其链接到之前添加的数据源,并设置图层的样式。样式中可以设置`heatmap-intensity`、`heatmap-radius`、`heatmap-color`等属性,控制热力图的...

    UCMap for Android

    ### UCMap for Android 开发教程知识点详述 #### 一、配置开发环境 **1.1 搭建Android开发环境** 为了开始使用UCMap for Android进行开发,首先需要搭建一个合适的开发环境。本节将详细介绍如何搭建Android开发...

    arcgis-runtime-sdk-android-100.11.0.rar

    地图图层可以自由添加、删除和调整顺序。 - **缩放和平移**:提供流畅的缩放和平移操作,用户可以通过双指手势或控件进行地图的查看。 - **旋转和倾斜**:对于3D地图,支持旋转和倾斜操作,提供多角度观察地图的...

Global site tag (gtag.js) - Google Analytics