- 浏览: 494134 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Tang叁藏:
没图啊!!楼主
天地图-地图投影技术剖析与思考 -
liuxing8807:
不知道怎么用
google地图经纬度偏移修正算法完美解决方案 -
copyday:
step6是Foo, step7是Bar。(foo和bar 中 ...
osworkflow学习笔记-这一步步是咋连起来的呢 -
haowanlisx:
谢谢!太感谢,我还以为flex3不能实现用组件导出excel呢 ...
FileReference.save()方法找不到? -
shootboss:
问下,用infoWindowRenderer怎样才能监听到in ...
ags infoWindow 应用
ArcGIS API for Flex 调用天地图、e都会瓦片地图
- 博客分类:
- Gis
- ActionScript&Flex
ArcGIS API for Flex 调用天地图、e都会瓦片地图
Admin
2011年9月8日
名人名言:人生是个艰辛的历程,让我自己的一生过得完美一点儿已经很不容易了,怎么能指望去教导别人如何过好他的一生呢?——毛姆
众所周知,像天地图和e都会的地图都是以切片的情势存放在办事端的,体系按照用户选择的局限加载该局限的瓦片地图,这比传统的及时衬着地图的响应速度更快。google地图和baidu地图的道理也不过乎如此。
所以说,若是本地硬盘上有瓦片地图,或者我们知道瓦片地图在长途办事器端的组织情势,哄骗简单的javascript脚本说话和浏览器就可以实现对地图的浏览,通俗地说,这其实就是一个图片浏览器。推敲到长途办事器须要收集连接,比来哄骗闲暇时候将长沙市局限的e都会上的瓦片下载到本地,如许在没有收集的景象下也能浏览地图了。
采取网上广泛撒播的完全哄骗js脚本写的开源“webgis完全功能例子”,换上本地硬盘高低载好的长沙局限内e都会地图,结果图如下。
当然,以上是收集上js高手写的API,功能不是很强大,然则至少为我等开辟者供给了值得鉴戒的思路。
esri也供给了可以浏览瓦片地图的API,包含javascript API,silverlight API和flex API,作为客户端说话,这三者供给的功能大致类似,甚至在类的定名上都对峙了高度的一致性。哄骗arcgis api for javascript同样可以将下载到本地的瓦片和长途办事器端的瓦片进行地图浏览,本人连络比来做的哄骗ArcGIS API for Flex(以下简称ags4fx)加载天地图的瓦片地图来申明该过程,javascript api和silverlight api可以参考该办法加载瓦片地图。
按照最新的ags4fx 2.4可知,esri为我们供给了TiledMapServiceLayer类,这个类恰是所有瓦片地图办事都必须持续的类,像ArcGISTiledMapServiceLayer, OpenStreetMapLayer, VETiledLayer等esri供给的瓦片类都是持续了该类的,所以我们要扩大该TiledMapServiceLayer类,名字暂且叫TianDiTuTiledMapServiceLayer。
从TiledMapServiceLayer类的API可知,fullExtent属性、tileInfo属性、units属性和getTileURL()办法是子类必必要重写的,于是最简单的TianDiTuTiledMapServiceLayer类定义如下:
{
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.TiledMapServiceLayer;
import com.esri.ags.layers.supportClasses.LOD;
import com.esri.ags.layers.supportClasses.TileInfo;
import flash.net.URLRequest;
public class TianDiTuTiledMapServiceLayer extends TiledMapServiceLayer
{
private var _tileInfo:TileInfo;
/*
一幅完全的图片url有如下格局:http://tile0.tianditu.com/DataServer?T=sbsm0210&X=1&Y=1&L=1
*/
private var _baseURL:String;/* http://tile */
private var _baseURLs:Array;/* 由诸如.tianditu.com/DataServer?T=sbsm0210构成的数组 */
private var _initExtent:String;
private var _id:String;
private var _name:String;
private var _alpha:Number;
private var _visible:Boolean;
public function TiandituTiledMapServiceLayer()
{
this._tileInfo = new TileInfo();
this._baseURLs = [];
this._initExtent = null;
this.buildTileInfo();//设置tileinfo信息
setLoaded(true);
}
public function set baseURL(baseurl:String):void
{
_baseURL = baseurl;
}
public function set baseURLs(baseurls:Array):void
{
_baseURLs = baseurls;
}
override public function get fullExtent() : Extent
{
return new Extent(-180, -90, 180, 90, new SpatialReference(4326));
}
public function set initExtent(initextent:String):void
{
this._initExtent = initextent;
}
override public function get initialExtent() :Extent
{
if (this._initExtent == null)//若是没有设备initExtent节点,则默认初始局限为长沙市区
return new Extent(111.9, 27.85, 114.25, 28.67, new SpatialReference(4326));
var coors:Array = this._initExtent.split(",");
return new Extent(Number(coors[0]), Number(coors[1]), Number(coors[2]) ,Number(coors[3]), new SpatialReference(4326));
}
override public function get spatialReference() : SpatialReference
{
return new SpatialReference(4326);
}
override public function get tileInfo() : TileInfo
{
return this._tileInfo;
}
override public function get units() : String
{
return "esriDecimalDegrees";
}
override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest
{
var url:String = null;
var rank:Number = this._baseURLs.length / 2;
var tempLevel:Number = 0;
for (var i:Number = 0; i < rank; i++)
{
if (tempLevel <= level && level < Number(this._baseURLs[i * 2]))
{
url = this._baseURLs[i * 2 + 1];
break;
}
if (i != rank - 1)
tempLevel = Number(this._baseURLs[i * 2]);
}
return new URLRequest(urlRequest);
}
private function buildTileInfo() : void
{
this._tileInfo.height = 256;
this._tileInfo.width = 256;
this._tileInfo.origin = new MapPoint(-180, 90);
this._tileInfo.spatialReference = new SpatialReference(4326);
this._tileInfo.lods = new Array();
this._tileInfo.lods = [
new LOD(0, 0.703125, 2.95498e+008),
new LOD(1, 0.351563, 1.47749e+008),
new LOD(2, 0.175781, 7.38744e+007),
new LOD(3, 0.0878906, 3.69372e+007),
new LOD(4, 0.0439453, 1.84686e+007),
new LOD(5, 0.0219727, 9.2343e+006),
new LOD(6, 0.0109863, 4.61715e+006),
new LOD(7, 0.00549316, 2.30857e+006),
new LOD(8, 0.00274658, 1.15429e+006),
new LOD(9, 0.00137329, 577144),
new LOD(10, 0.000686646, 288572),
new LOD(11, 0.000343323, 144286),
new LOD(12, 0.000171661, 72143),
new LOD(13, 8.58307e-005, 36071.5),
new LOD(14, 4.29153e-005, 18035.7),
new LOD(15, 2.14577e-005, 9017.87),
new LOD(16, 1.07289e-005, 4508.9),
new LOD(17, 5.36445e-006, 2254.47)
];
}
}
}
在mxml页面,设备地图参数如下:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:viewer="com.esri.viewer.*"
xmlns:tdt="tdt.*">
<esri:Map>
<tdt:TianDiTuTiledMapServiceLayer>
<tdt:baseURL>http://tile</tdt:baseURL>
<tdt:baseURLs>
<mx:String>10</mx:String>
<mx:String>.tianditu.com/DataServer?T=A0512_EMap</mx:String>
<mx:String>12</mx:String>
<mx:String>.tianditu.com/DataServer?T=B0627_EMap1112</mx:String>
<mx:String>18</mx:String>
<mx:String>.tianditu.com/DataServer?T=siwei0608</mx:String>
</tdt:baseURLs>
</tdt:TianDiTuTiledMapServiceLayer>
<tdt:TianDiTuTiledMapServiceLayer>
<tdt:baseURL>http://tile</tdt:baseURL>
<tdt:baseURLs>
<mx:String>10</mx:String>
<mx:String>.tianditu.com/DataServer?T=sbsm0210</mx:String>
<mx:String>11</mx:String>
<mx:String>.tianditu.com/DataServer?T=e11</mx:String>
<mx:String>12</mx:String>
<mx:String>.tianditu.com/DataServer?T=e12</mx:String>
<mx:String>13</mx:String>
<mx:String>.tianditu.com/DataServer?T=e13</mx:String>
<mx:String>14</mx:String>
<mx:String>.tianditu.com/DataServer?T=eastdawnall</mx:String>
<mx:String>18</mx:String>
<mx:String>.tianditu.com/DataServer?T=sbsm1518</mx:String>
</tdt:baseURLs>
<tdt:initExtent>111.9, 27.85, 114.25, 28.67</tdt:initExtent>
</tdt:TianDiTuTiledMapServiceLayer>
<tdt:TianDiTuTiledMapServiceLayer>
<tdt:baseURL>http://tile</tdt:baseURL>
<tdt:baseURLs>
<mx:String>10</mx:String>
<mx:String>.tianditu.com/DataServer?T=A0610_ImgAnno</mx:String>
<mx:String>14</mx:String>
<mx:String>.tianditu.com/DataServer?T=B0530_eImgAnno</mx:String>
<mx:String>18</mx:String>
<mx:String>.tianditu.com/DataServer?T=siweiAnno68</mx:String>
</tdt:baseURLs>
</tdt:TianDiTuTiledMapServiceLayer>
</esri:Map>
</s:Application>
加载地图后的 flex页面如下:
按照这个思路,同样可以哄骗ags4fx API加载e都会的瓦片地图。。
反复上方的话,哄骗esri供给的javascript api和silverlight api实现这个结果过程是类似的,在此不赘述。
人生是个艰辛的历程,让我自己的一生过得完美一点儿已经很不容易了,怎么能指望去教导别人如何过好他的一生呢?——毛姆
- TianDiTuTiledMapServiceLayer.zip (1.8 KB)
- 下载次数: 76
发表评论
-
http://www.gissky.net/Article/1698.htm
2012-06-11 15:12 1391ArcGIS Server的切图原理深 ... -
天地图-地图投影技术剖析与思考
2012-03-22 13:16 4553首先天地图采用国标2000 ... -
actionscript 绘制环形(中空)图形
2012-03-20 11:28 1864<?xml version="1.0&q ... -
绘制环形/中空图形
2012-03-20 11:21 0<?xml version="1.0" ... -
flex4 表格加载 xml文件数据
2012-02-19 17:27 0<fx:Declarations> < ... -
ags infoWindow 应用
2012-02-13 16:32 82731 首先如何设置 infowindow或infoWindowR ... -
flex builder 配置 文件 中文 乱码
2012-02-11 22:31 1328记事本打开另存,下面的有格式选项,选UTF-8,然后放到项目目 ... -
在Flex4中嵌入字体
2012-02-05 22:10 3158<fx:Style> @namespa ... -
flex4 绕中心 旋转和翻转
2012-01-27 14:30 9171特别参考文章:http://uh.9ria.com/space ... -
在Flash和Flex中用matrix.rotate方法实现显示对象绕点旋转
2012-01-26 21:57 2自转与公转 http://uh.9ria. ... -
Flex 3D旋转的各种实现
2012-01-22 23:55 2685大年夜,在整flex 3d旋转呵呵。 传说大年夜写程序,来年发 ... -
Flex皮肤制作笔记
2012-01-16 10:38 1542Titlewindow的创建流程 1、先创建皮肤 命名为:t ... -
Flex 4 设置背景图片
2012-01-16 10:31 3288Flex 3中Canvas是可以设置backgroundIma ... -
谈谈ActionScript垃圾回收
2011-12-09 14:57 1507转自:http://kevincao.com/2011/08/ ... -
actionscript flex 中三维坐标和屏幕(二维)坐标的转换
2011-12-03 17:44 4759flash.display.DisplayObject ... -
arcgis flex api2.4 学习笔记
2011-11-24 19:43 6604本文仅记录通过浏览官 ... -
快速创建精彩的Flash游戏 (二) Flash3D引擎简介
2011-11-19 10:34 1563原帖: http://www.fans8.com/?p=663 ... -
flex 滤镜样式在线预览
2011-11-10 11:26 2137好多效果没用过 -
Flex StringUtil 工具类 字符串函数
2011-10-29 18:35 4598转自:http://www.cnblogs.com/god_b ... -
Flex 4 中Spark组件利用SkinClass外观设计
2011-10-19 23:05 1127原文:http://ctwen.iteye.com/blog/ ...
相关推荐
ArcGIS API for Flex 调用天地图源码
arcgis api for flex 开发入门(三)地图浏览控件的使用
ArcGIS API for Flex实现在Flex程序中浏览自己的ArcGIS.Server.9.3中发布的地图,一个最基本的入门例子。 目錄 一、ArcGIS.Server.9.3和ArcGIS API for Flex实现基本的地图浏览(一).................................
arcgis api for flex的环境搭建
arcgis api for flex 开发入门(一)环境搭建(二)map 的创建。。。。
arcgis api for javascript 调用天地图 2015年6月 测试可用
ArcGIS API for Flex 2.5 build date 2011-11-30 ======================= This file contains the ArcGIS Flex API Library (the swc file), skins and sample code. =============== Getting Started ==========...
调用天地图新发布的地图资源接口和api for flex,利用flash builder 开发环境
ArcGIS API for Flex 3.0离线文档
ArcGIS API for Flex 3.7离线文档 来源:官方3.7 Reference 文档整理
arcgis api for flex v3.4 离线版 大神制作拿来分享
ArcGIS API for Flex实现在Flex程序中浏览自己的ArcGIS.Server.9.3中发布的地图,一个最基本的入门例子。 目錄 一、ArcGIS.Server.9.3和ArcGIS API for Flex实现基本的地图浏览(一).................................
非常方便入门或进阶学习,免去复制粘贴的麻烦和出错。 基于目前最新版本arcgis api for flex 3.3(可从http://download.csdn.net/detail/haoamz14/5327205下载),包含官网 ...
ArcGIS API for Flex用于富互联网应用程序RIA(Rich Internet Applications)的开发,通过ArcGIS API for Flex可以将ArcGIS Server提供的地图资源和其它资源(ArcGIS Online)嵌入到Web应用中。 使用它可以做什么: ...
ARCGIS API FOR FLEX,彩页,中文
ArcGIS API for Flex 2.5官方离线文档 本文档来源:http://help.arcgis.com/en/webapi/flex/apiref/index.html 个人整理的离线版本,再也不用在像老牛车样的网上看了,分享给大家O(∩_∩)O哈哈~
利用ArcGIS API for Javascript3最新版本【3.23】加载天地图,包括矢量图、影像图、地形图,并包含标注图层。
arcgis flex 地图开发参考最新(3.6)API文档,
ArcGIS API for Flex 2.0.chm ArcGIS API for Flex 2.0.chm