`

重写openalyers 的方法,加载天地图瓦片数据

 
阅读更多
将TiandituLayer 加载到OpenLayers.js Grid类后。
OpenLayers.Layer.TiandituLayer = OpenLayers.Class(OpenLayers.Layer.Grid,
		{

			mapType : null,
			mirrorUrls : null,
			topLevel : null,
			bottomLevel : null,

			topLevelIndex : 0,
			bottomLevelIndex : 20,
			topTileFromX : -180,
			topTileFromY : 90,
			topTileToX : 180,
			topTileToY : -270,

			isBaseLayer : true,
             
			initialize : function(name, url, options) {

				options.topLevel = options.topLevel ? options.topLevel
						: this.topLevelIndex;
				options.bottomLevel = options.bottomLevel ? options.bottomLevel
						: this.bottomLevelIndex;
				options.maxResolution = this
						.getResolutionForLevel(options.topLevel);
				options.minResolution = this
						.getResolutionForLevel(options.bottomLevel);
				var newArguments = [ name, url, {}, options ];
				OpenLayers.Layer.Grid.prototype.initialize.apply(this,
						newArguments);
			},

			clone : function(obj) {

				if (obj == null) {
					obj = new OpenLayers.Layer.TDTLayer(this.name, this.url,
							this.options);
				}

				obj = OpenLayers.Layer.Grid.prototype.clone
						.apply(this, [ obj ]);

				return obj;
			},

			getURL : function(bounds) {
				var level = this
						.getLevelForResolution(this.map.getResolution());
				var coef = 360 / Math.pow(2, level);
				var x_num = this.topTileFromX < this.topTileToX ? Math
						.round((bounds.left - this.topTileFromX) / coef) : Math
						.round((this.topTileFromX - bounds.right) / coef);
				var y_num = this.topTileFromY < this.topTileToY ? Math
						.round((bounds.bottom - this.topTileFromY) / coef)
						: Math.round((this.topTileFromY - bounds.top) / coef);

				var type = this.mapType;
				if (type == "EMap") {
					if (level >= 2 && level <= 10) {
						type = "A0512_EMap";
					} else if (level == 11 || level == 12) {
						type = "B0627_EMap1112";
					} else if (level >= 13 && level <= 18) {
						type = "siwei0608";
					}
				}else if(type=="RMap"){
				    if (level >= 2 && level <= 7) {
						type = "sbsm0210";
					} else if (level >= 8 && level <= 10) {
						type = "sbsm0210";
					} else if (level >= 11 && level <= 14) {
						type = "e11";
					}else if (level >= 15 && level <= 18) {
						type = "sbsm1518";
					}
				}
           
				var url = this.url;
				
				if (this.mirrorUrls != null) {
					url = this.selectUrl(x_num, this.mirrorUrls);
				}
              
				return this.getFullRequestString({
					T : type,
					X : x_num,
					Y : y_num,
					L : level
				}, url);
			},
			selectUrl : function(a, b) {
				return b[a % b.length]
			},
			getLevelForResolution : function(res) {
				var ratio = this.getMaxResolution() / res;
				if (ratio < 1)
					return 0;
				for ( var level = 0; ratio / 2 >= 1;) {
					level++;
					ratio /= 2;
				}
				return level;
			},
			getResolutionForLevel : function(level) {
				return 360 / 256 / Math.pow(2, level);
			},
			getMaxResolution : function() {
				return this.getResolutionForLevel(this.topLevelIndex)
			},
			getMinResolution : function() {
				return this.getResolutionForLevel(this.bottomLevelIndex)
			},
			addTile : function(bounds, position) {
				var url = this.getURL(bounds);
				return new OpenLayers.Tile.Image(this, position, bounds, url,
						this.tileSize);
			},

			CLASS_NAME : "OpenLayers.Layer.TiandituLayer"
		});

 

  测试页面

   

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <title>OpenLayers Tiled Map Service Example</title>
    <link rel="stylesheet" href="../theme/default/style.css" type="text/css">
    <link rel="stylesheet" href="style.css" type="text/css">
   <script src="../lib/OpenLayers.js"></script>
    <script type="text/javascript">
      
        var map, layer;

        function init(){
		    var extent = new OpenLayers.Bounds(-180.0, -90.0, 180.0, 90.0);
            var tempScales = [295497593.05875003,147748796.52937502,73874398.264687508,36937199.132343754,18468599.566171877];
		    var mapOptions = {
                maxExtent: extent
            };
			var options= {
			    mapType:"EMap",
                topLevel: 3, 
                bottomLevel: 20
				
            };
            map = new OpenLayers.Map("map",mapOptions);
                        
			layer = new OpenLayers.Layer.TiandituLayer("qincy", "http://tile0.tianditu.com/DataServer",options);
            map.addLayer(layer);
            map.addControls([new OpenLayers.Control.MousePosition()]);
			
            map.setCenter(new OpenLayers.LonLat(106,39), 3);
			
        }
      

    </script>
  </head>
  <body onload="init()">


    <div id="map" style="width:1000px;height:500px"></div>


  </body>
</html>

  补充问题,由于天地图12级别以后,标注与地图分离,所以要修改下geturldaim

   加载两个图层一个图层设置成隐藏。

分享到:
评论

相关推荐

    Android高德加载谷歌卫星瓦片,并缓存本地

    - 实现`TileProvider`接口,重写`getTile`方法,动态构造谷歌卫星图瓦片的URL,并使用HTTP请求获取图片数据。 - 将返回的Bitmap对象添加到TileOverlay,显示在地图上。 3. **缓存谷歌卫星瓦片**: - 为了提高...

    ArcGIS API for JavaScript4.10加载天地图

    本文将深入探讨如何利用ArcGIS API for JavaScript 4.10版本加载天地图,包括其矢量底图、影像地图和地形图。我们将讨论如何自定义图层模块,通过扩展BaseTileLayer来实现这一目标。 首先,ArcGIS API for ...

    ArcGIS API 4.10之加载百度地图

    在这个类中,我们将重写必要的方法,如`fetchTile`,以便从百度地图的服务器获取瓦片数据。同时,我们还需要处理百度地图特有的坐标系统转换,因为百度地图使用的是自己的坐标系,而ArcGIS API通常使用Web Mercator...

    JAVA中的方法重写与方法重载区别

    JAVA中的方法重写与方法重载区别 JAVA 中的方法重写和方法重载是两个重要的概念,在面向对象程序设计语言中尤为重要。方法重写和方法重载都是多态性的体现,但它们之间有着本质的区别。 方法重写(Override)是指...

    ArcGIS API for Javascript 4.10加载谷歌地图

    4. **重写fetchTile方法**:BaseTileLayer的fetchTile方法负责获取和加载瓦片。我们需要覆盖这个方法,根据谷歌地图的URL模板请求对应的瓦片,并将它们插入到地图中。 5. **事件处理**:为了确保地图的正常交互,...

    QT-QabstractTableModel模型、重写sort方法排序

    默认情况下,`sort`方法按照数据的自然顺序进行排序,但通过重写这个方法,我们可以根据特定的规则或者字段进行定制排序。 首先,为了实现自定义排序,我们需要在自定义的`QAbstractTableModel`子类中重写`sort`...

    qt快速加载并动态显示大容量数据能够加载千万行量级的数据

    Qt的QTableView支持数据模型的虚拟化,通过设置`setViewportSize()`和`setRootIndex()`等方法,可以控制视图区域大小和数据的显示范围,从而实现按需加载。 3. **异步加载**:为了提供流畅的用户体验,数据加载应该...

    ListView动态加载数据分页

    4. 当需要加载更多数据时,实例化AsyncTask并调用execute()方法。 对比两种方法,Handler+线程更灵活,适用于复杂的异步通信,而AsyncTask则更加简洁,适合简单的后台任务。实际开发中可以根据项目需求和性能要求...

    arcgis for flex 加载高德地图

    ArcGIS for Flex API允许我们创建自定义图层,通过重写`TileInfo`、`getTileUrl`等方法,我们可以将高德地图的瓦片服务集成进来。创建一个新的类,继承自`esri.layers.ArcGISTiledMapServiceLayer`或`esri.layers....

    GridView滚动到底部加载更多数据

    在`onScroll()`方法中,我们可以检查当前是否已经滚动到了最后一行,如果是,则触发加载更多数据的操作。 ```java gridView.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void ...

    java子类重写父类的方法.doc

    Java 子类重写父类的方法详细解析 Java 中子类重写父类的方法是面向对象编程的核心概念之一。子类可以重写父类的方法,以改变或扩展父类的行为。但是,子类重写父类的方法需要遵守一定的规则,以避免编译器错误和...

    静态(static)方法重写(override)

    ### 静态(static)方法与重写(override) #### 一、概念解析 在面向对象编程语言中,如Java,方法重写(override)是一种重要的特性,它允许子类提供一个与父类相同签名的方法实现。这种方法的实现允许在运行时...

    方法重载和方法重写

    在编程语言中,方法重载(Overloading)和方法重写(Overriding)是两个非常重要的概念,它们都是实现多态性(Polymorphism)的关键机制。本文将深入探讨这两个概念,以及它们在实际编程中的应用。 ### 方法重载...

    openlayers3添加各种地图资源

    天地图是中国官方的地理信息服务,加载天地图需要使用其提供的瓦片服务。配置代码如下: ```javascript var tianDiTuLayer = new ol.layer.Tile({ source: new ol.source.XYZ({ url: '...

    java中重写ZipCOM方法

    在Java编程语言中,"重写ZipCom方法"通常指的是我们对Java标准库中的`java.util.zip`包中的某些类或方法进行自定义扩展,以满足特定的压缩和解压缩需求。SOAP(Simple Object Access Protocol)是一种基于XML的协议...

    Viewpager+Fragment实现滑动结束后加载数据

    2. **自定义PagerAdapter**:继承`FragmentPagerAdapter`并重写`instantiateItem()`方法,在这里判断当前创建的`Fragment`是否为最后一个,如果是,则调用`Fragment`的`loadData()`方法加载数据。 3. **设置...

    Android服务器解析json数据实现下拉刷新上拉加载ListView显示

    自定义Adapter需要继承自BaseAdapter或ArrayAdapter,并重写其中的方法,如`getView()`,将解析后的数据转化为ListView可显示的View。通常会涉及到视图复用(convertView)以提高性能。 7. 数据缓存: 为了提高...

    重写window.alert方法

    这就是“重写window.alert方法”的目的。 重写`window.alert()`主要是通过覆盖原有的方法来实现。在JavaScript中,对象的方法是可以被替换的,因此我们可以在全局作用域内定义一个新的`alert`函数,让它执行我们...

Global site tag (gtag.js) - Google Analytics