`
longgangbai
  • 浏览: 7330321 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

GIS的学习(二十四)android异步调用geoserver wms中的地图

阅读更多

   在geoserver的客户端通过wms的GetMap实现地图的图片的调用和下载。

具体的API如下:

GetMap¶
The GetMap operation requests that the server generate a map. The core parameters specify one or more layers and styles to appear on the map, a bounding box for the map extent, a target spatial reference system, and a width, height, and format for the output, The response is a map image, or other map output artifact, depending on the format requested. GeoServer provides a wide variety of output formats, described in WMS output formats.

The information needed to specify values for parameters such as layers, styles and srs are supplied by the Capabilities document.

A good way to get to know the GetMap parameters is to experiment with the WMS Reflector.

The standard parameters for the GetMap operation are:

Parameter Required? Description 
service Yes Service name. Value is WMS. 
version Yes Service version. Value is one of 1.0.0, 1.1.0, 1.1.1, 1.3. 
request Yes Operation name. Value is GetMap. 
layers Yes Layers to display on map. Value is a comma-separated list of layer names. 
styles Yes Styles in which layers are to be rendered. Value is a comma-separated list of style names, or empty if default styling is required. Style names may be empty in the list. 
srs or crs Yes Spatial Reference System for map output. Value is in form EPSG:nnn. crs is the parameter key used in WMS 1.3.0. 
bbox Yes Bounding box for map extent. Value is minx,miny,maxx,maxy in units of the SRS. 
width Yes Width of map output, in pixels. 
height Yes Height of map output, in pixels. 
format Yes Format for the map output. See WMS output formats for supported values. 
transparent No Whether the map background should be transparent. Values are true or false. Default is false 
bgcolor No Background color for the map image. Value is in the form RRGGBB. Default is FFFFFF (white). 
exceptions No Format in which to report exceptions. Default value is application/vnd.ogc.se_xml. Other valid values are application/vnd.ogc.inimage and application/vnd.ogc.se_blank. 

GeoServer provides a number of useful vendor-specific parameters, which are documented in the WMS vendor parameters section.

An example request for a PNG map image using default styling is:

http://localhost:8080/geoserver/wms?
request=GetMap
&service=WMS
&version=1.1.1
&layers=topp%3Astates
&styles=
&srs=EPSG%3A4326
&bbox=-145.15104058007,21.731919794922,-57.154894212888,58.961058642578&
&width=780
&height=330
&format=image%2Fpng

 

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    > 
    <Button
      android:id="@+id/btnFirst"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="异步下载方式一"
     >
    </Button>
    
    <Button
      android:id="@+id/btnSecond"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:text="异步下载方式二"
     >
    </Button>
    
    <FrameLayout
     android:layout_width="fill_parent"
     android:layout_height="match_parent"
     android:id="@+id/frameLayout"
    >
    
   <ImageView
    android:id="@+id/image" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerInside" 
    android:padding="2dp"
    >
   </ImageView> 
    
    <ProgressBar 
     android:id="@+id/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center">
  </ProgressBar> 
    
  </FrameLayout> 
</LinearLayout>

 

主要配置文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.easyway.geoserver.map"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".GeoServerGetMapActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

 

具体代码实现如下:

package com.geoserver.map;

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

import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ProgressBar;
/**
 * 异步下载图片的两种方式
 * 
 * 
 * 本实例的目的通过geoserver 的wms调用相关的地图图片的服务
 * 采用的操作为GetMap实现。相关的操作。
 * 
 * 
 * 
 * 
 * @Title: 
 * @Description: 实现TODO
 * @Copyright:Copyright (c) 2011
 * @Company:
 * @Date:2012-9-10
 * @author  longgangbai
 * @version 1.0
 */
public class GeoServerGetMapActivity extends Activity  implements OnClickListener{    
		 private Button btnFirst;    
		 private Button btnSecond;  
		 private ProgressBar progress;    
		 private FrameLayout frameLayout;    
		 private Bitmap bitmap=null;    
		 ProgressDialog dialog=null;            
		 @Override    
		 public void onCreate(Bundle savedInstanceState) {        
			 super.onCreate(savedInstanceState);        
			 setContentView(R.layout.main);                
			 btnFirst=(Button)this.findViewById(R.id.btnFirst);        
			 progress=(ProgressBar)this.findViewById(R.id.progress);         
			 progress.setVisibility(View.GONE);        
			 frameLayout=(FrameLayout)this.findViewById(R.id.frameLayout);                
			 btnFirst.setOnClickListener(this);  
			 btnSecond=(Button)this.findViewById(R.id.btnSecond);    
			 btnSecond.setOnClickListener(this);  
			 
	    }

		//前台ui线程在显示ProgressDialog,
		//后台线程在下载数据,数据下载完毕,关闭进度框
		@Override
		public void onClick(View view) {
			final String urlString=getGeoServerGetMap();
		    switch(view.getId()){
		        case R.id.btnFirst: 
		            dialog = ProgressDialog.show(this, "", 
		                    "下载数据,请稍等 …", true, true); 
		            //启动一个后台线程
		            handler.post(new Runnable(){
		                @Override
		                public void run() { 
		                     //这里下载数据
		                    try{
		                        URL  url = new URL(urlString);
		                        HttpURLConnection conn  = (HttpURLConnection)url.openConnection();
		                        conn.setDoInput(true);
		                        conn.connect(); 
		                        InputStream inputStream=conn.getInputStream();
		                        bitmap = BitmapFactory.decodeStream(inputStream); 
		                        Message msg=new Message();
		                        msg.what=1;
		                        handler.sendMessage(msg);
		                    } catch (MalformedURLException e1) { 
		                        e1.printStackTrace();
		                    } catch (IOException e) {
		                        // TODO Auto-generated catch block
		                        e.printStackTrace();
		                    }  
		                }
		            });  
		            break;
		        case R.id.btnSecond: 
		        	MyASyncTask asyncTask=new MyASyncTask();
		        	asyncTask.execute(urlString);
		        	break;
		    }
		}

		 /**这里重写handleMessage方法,接受到子线程数据后更新UI**/
	    private Handler handler=new Handler(){
	        @Override
	        public void handleMessage(Message msg){
	            switch(msg.what){
	            case 1:
	                //关闭
	                ImageView view=(ImageView)frameLayout.findViewById(R.id.image);
	                view.setImageBitmap(bitmap);
	                dialog.dismiss();
	                break;
	            }
	        }
	    };
	    
	    
	    public String getGeoServerGetMap(){
	    	StringBuffer sb=new StringBuffer();
	    	sb.append("http://10.100.108.20:8080/geoserver/wms?");//wms路径
	        sb.append("request=GetMap"); //geoserver的操作
	    	sb.append("&service=WMS"); //服务的类型
	    	sb.append("&version=1.1.1"); //版本
	    	sb.append("&layers=topp:states"); //图层的名称
	    	sb.append("&srs=EPSG:4326"); //图源的类型
	    	sb.append("&bbox=-145.15104058007,21.731919794922,-57.154894212888,58.961058642578"); //图层的范围
	    	sb.append("&width=780");
	    	sb.append("&height=330");
	    	sb.append("&format=image/png");//图片的格式
	    	return sb.toString();
	    }
	    class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {
	    	@Override
	        protected Bitmap doInBackground(String... params) {
	            Bitmap bitmap=null;
	            try {
	                
	                URL url = new URL(params[0]);
	                HttpURLConnection con=(HttpURLConnection) url.openConnection();
	                con.setDoInput(true);
	                con.connect();
	                InputStream inputStream=con.getInputStream();
	                
	                bitmap=BitmapFactory.decodeStream(inputStream); 
	                inputStream.close();
	            } 
	             catch (MalformedURLException e) {
	                    e.printStackTrace();
	                }catch (IOException e) {
	                // TODO Auto-generated catch block
	                e.printStackTrace();
	            } 
	            return bitmap;
	        }
	    	//执行获得图片数据后,更新UI:显示图片,隐藏进度条
	        @Override
	        protected void onPostExecute(Bitmap Result){
	            ImageView imgView=(ImageView)frameLayout.getChildAt(0);
	            imgView.setImageBitmap(Result);
	            ProgressBar bar=(ProgressBar)frameLayout.getChildAt(1);
	            bar.setVisibility(View.GONE);
	        }
	    }
}

 

 

分享到:
评论

相关推荐

    html Leaflet调用wms地图服务

    html版本Leaflet调用地图 主要使用Leaflet调用ahocevar的geoserver wms服务

    openlayer调用geoserver发布的地图实现地图的基本功能

    在调用GeoServer发布的地图时,OpenLayers主要通过WMS GetMap 请求来获取地图切片。以下是一个基本的OpenLayers配置示例,展示了如何加载GeoServer发布的地图: ```javascript var map = new ol.Map({ target: '...

    geoserver发布WMS,图层有SLD符号化

    总结来说,GeoServer安装配置后,可以发布WMS服务,这涉及到在UDig中对shp文件进行符号化并生成SLD文件。需要编辑SLD文件以适配正确的字符集,然后在GeoServer中创建工作区、数据存储、图层,并应用SLD样式。最终,...

    28.(leaflet篇)leaflet接入geoserver发布的wms服务.zip

    在本教程中,我们将深入探讨如何使用Leaflet.js库与GeoServer集成,以显示通过WMS(Web Map Service)发布的地图数据。Leaflet是一个轻量级的JavaScript库,专为Web上的交互式地图设计,而GeoServer是一个开源的...

    Mapbox加载wms

    将WMS集成到Mapbox中,可以让用户访问和展示由Geoserver等地图服务提供商发布的地理数据。Geoserver是另一个开源项目,它支持WMS服务的发布和管理,能够处理多种GIS数据格式。 要实现Mapbox加载WMS,首先需要在...

    GeoServer发布WMS等服务

    如何发布数据等描述,简单的操作提示,geoserver发布wms wfs等服务

    80.(leaflet篇)leaflet调用geoserver发布的postgis数据图层.zip

    在本教程中,我们将深入探讨如何使用Leaflet.js库调用通过Geoserver发布的PostGIS数据库中的地理空间数据,创建地图图层。首先,我们来理解每个组件的作用: 1. **Leaflet.js**: Leaflet是一个轻量级的JavaScript库...

    leaflet结合geoserver实现地图属性查询.zip

    - **添加WMS图层**:使用L.tileLayer与GeoServer的WMS服务接口连接,将地图数据叠加到Leaflet地图上。 - **监听地图点击事件**:使用Leaflet的`map.on('click', function(event) {...})`监听地图点击事件,获取...

    GeoServer瓦片缓存机制研究

    但是,在面对庞大地图数据、庞大的用户交互时,如果仅仅采用 GeoServer 作为 GIS 服务器,势必导致地图数据传输缓慢甚至获取服务出错。为了解决这个问题,本文研究了 GeoServer 中的瓦片缓存机制,包括瓦片金字塔的...

    leaflet结合geoserver实现地图空间查询.zip

    - 添加图层:通过调用`L.tileLayer`方法,添加由GeoServer提供的WMS图层到地图上。 3. **实现空间查询** - 创建交互元素:使用Leaflet的`L.Marker`、`L.Polygon`等工具,让用户可以绘制兴趣区域或选择特定地点。 ...

    geoServer+openLayers简单小例子

    在"geoServer+openLayers简单小例子"中,OpenLayers被用来调用通过GeoServer发布的地图数据。这通常涉及到以下几个步骤: 1. **配置GeoServer**:首先,你需要在本地安装GeoServer并配置它来发布你的地图数据。这...

    geoserver中Google地图样式SLD.rar

    在GIS(地理信息系统)领域,GeoServer是一款开源的、基于Java的服务器软件,它能够发布地理数据并提供WMS(Web Map Service)和WFS(Web Feature Service)等OGC(Open Geospatial Consortium)标准服务。...

    geoserver 2.3 优化方案详解

    从影像数据、矢量数据、切片数据等多方面,对geoserver的优化提出完整,全方位的优化策略,是迄今为止最新最详细的geoserver优化方案。

    geoserver 地图专题图

    OpenLayers则是一个强大的JavaScript库,用于在网页中创建交互式的二维地图。 1. **Geoserver的使用**:在Tomcat这样的应用服务器中部署Geoserver,无需安装版,只需解压并配置即可。这简化了部署过程,使得地理...

    openlayers3+geoserver地图交互

    在本案例中,“map_shp”包含全国省界和县道的数据,这些数据在GeoServer上注册后,可以通过WMS服务获取到地图图像,或者通过WFS服务获取原始的地理空间数据。 OpenLayers 3是实现地图交互的主要工具。它提供了丰富...

    Cesium加载Geoserver跨域问题

    在IT行业中,尤其是在Web GIS(Web地理信息系统)领域,Cesium和Geoserver是两个非常重要的工具。Cesium是一款强大的JavaScript库,用于创建交互式的3D地球浏览器,而Geoserver则是一个开源的GIS服务器,用于发布和...

    geoserver-2-18以及跨域配置和发布pbf插件

    GeoServer是一款开源的地理信息系统(GIS)服务器,它能够发布和管理地理空间数据,并提供Web服务接口,如WMS(Web Map Service)和WFS(Web Feature Service)。在本文中,我们将深入探讨GeoServer 2.18版本,特别...

    geoserver配置图层缓存

    在GIS领域,Geoserver是一款开源的地理信息系统服务器,它能够发布、管理和处理地理空间数据。在处理大量请求时,为了提升服务响应速度和用户体验,配置图层缓存是必不可少的步骤。本篇文章将深入探讨如何在...

    Leaflet调用wms地图服务.7z

    我们将重点关注标题中提到的"Leaflet调用wms地图服务"以及描述中的"使用netcore调用wms地图服务"。 首先,让我们了解Leaflet。Leaflet是一个轻量级、高性能的JavaScript库,专门用于创建交互式地图应用。它提供了...

    地图服务器基于geoserver改造

    总结起来,"地图服务器基于geoserver改造"是一个将开源GeoServer与Tomcat结合的项目,旨在提供一个易于部署和使用的GIS服务。改造的核心在于利用Tomcat的便利性和GeoServer的强大功能,为用户提供一个高效、稳定的...

Global site tag (gtag.js) - Google Analytics