WebGis应用开发框架
转自:http://www.cnblogs.com/zitsing/archive/2012/03/02/2377083.html
前言
Web Gis顾名思义就是通过浏览器方式操作的地理系统。通过浏览器方式可以采用很多技术,主流的有 Html+Javascript、Flex、Silverlight。像大的公司谷歌百度既有技术又有人的,都是采用Html+Javascript.这样可以节约流量,提高载入速度,增加用户体验。而一般的企业级应用则采用Flex或Silverlight的居多。而我也属于小企业级的应用,没有很多用户访问,大多在局域网,面对的客户也都是傻瓜级的,使用的浏览球也都是IE6,所以我这个应用开发框架就是采用Flex,采用这个好处就是不用处理多浏览器兼容问题了。
开发框架
- 开发工具:Adobe® Flash® Builder™ 4
- 开发包:ArcGIS API for Flex 2.5
- 地图服务: arcgis、谷歌地图、geoserver
这个框架是经过实践得出的,特别是ArcGIS API for Flex这个包,以前也使用过其他的开源的包,谷歌地图也有 for flex 的包。但相比这个,这个功能齐全,文档丰富。开发一个GIS方面的应用是绝对没问题的。
搭建Demo
- 打开Flash® Builder™ 4 新建一个名为FlexWebGis Web工成,把agslib-2.5-2011-11-30.swc包复制到lib下。
- 增加一个flex.web.gis.layer包,下面建一个GoogleMapLayer.as类,代码如下:
![](https://common.cnblogs.com/images/copycode.gif)
package flex.web.gis.layer
{
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; //扩展TiledMapServiceLayer图层实现加载google地图 public class GoogleMapLayer extends TiledMapServiceLayer
{
private var _tileInfo:TileInfo=new TileInfo();
public var _baseURL:String="t@128"; public function GoogleMapLayer()
{
super();
buildTileInfo();
setLoaded(true);
} override public function get fullExtent():Extent
{
return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113));
} override public function get initialExtent():Extent
{
return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference(102113));
} override public function get spatialReference():SpatialReference
{
return new SpatialReference(102113);
} override public function get tileInfo():TileInfo
{
return _tileInfo;
} //获取矢量地图 override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest
{
var url:String="http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=Galil";
if (_baseURL == "s@92")
{
url="http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=Galil";
}
if (_baseURL == "t@128")
{
url="http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + ",r@169000000&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=Galil";
}
if (_baseURL == "m@161000000")
{
url="http://mt" + (col % 4) + ".google.cn/vt/lyrs=" + _baseURL + "&v=w2.114&hl=zh-CN&gl=cn&" + "x=" + col + "&" + "y=" + row + "&" + "z=" + level + "&s=Galil";
}
return new URLRequest(url);
} private function buildTileInfo():void
{
_tileInfo.height=256;
_tileInfo.width=256;
_tileInfo.origin=new MapPoint(-20037508.342787, 20037508.342787);
_tileInfo.spatialReference=new SpatialReference(102113);
//_tileInfo.lods=[new LOD(5, 4891.96981024998, 18489297.737236), new LOD(6, 2445.98490512499, 9244648.868618), new LOD(7, 1222.99245256249, 4622324.434309), new LOD(8, 611.49622628138, 2311162.217155), new LOD(9, 305.748113140558, 1155581.108577), new LOD(10, 152.874056570411, 577790.554289), new LOD(11, 76.4370282850732, 288895.277144), new LOD(12, 38.2185141425366, 144447.638572), new LOD(13, 19.1092570712683, 72223.819286), new LOD(14, 9.55462853563415, 36111.909643), new LOD(15, 4.77731426794937, 18055.954822)]; _tileInfo.lods=[new LOD(9, 305.748113140558, 1155581.108577),new LOD(10, 152.874056570411, 577790.554289), new LOD(11, 76.4370282850732, 288895.277144), new LOD(12, 38.2185141425366, 144447.638572), new LOD(13, 19.1092570712683, 72223.819286), new LOD(14, 9.55462853563415, 36111.909643), new LOD(15, 4.77731426794937, 18055.954822),new LOD(16, 2.38865713397468, 9027.977411),new LOD(17, 1.19432856685505, 4513.988705),new LOD(18, 0.597164283559817, 2256.994353),new LOD(19, 0.298582141647617, 1128.497176)];
}
}
}
![](https://common.cnblogs.com/images/copycode.gif)
3.编辑FlexWebGis.mxml文件,代码如下:
![](https://common.cnblogs.com/images/copycode.gif)
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" xmlns:esri="http://www.esri.com/2008/ags" xmlns:layer="flex.web.gis.layer.*" creationComplete="application1_creationCompleteHandler(event)"> <fx:Script> <![CDATA[ import com.esri.ags.events.MapEvent; import com.esri.ags.utils.WebMercatorUtil; import com.esri.ags.geometry.MapPoint; import mx.events.FlexEvent; protected function application1_creationCompleteHandler(event:FlexEvent):void { esriMap.addLayer(googleMapLayer); } protected function esriMap_loadHandler(event:MapEvent):void { //设置地图中心点 esriMap.centerAt(WebMercatorUtil.geographicToWebMercator(new MapPoint(118.610037,31.138343)) as MapPoint); } ]]> </fx:Script> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> <layer:GoogleMapLayer id="googleMapLayer"/> </fx:Declarations> <esri:Map id="esriMap" logoVisible="false" openHandCursorVisible="false" scaleBarVisible="false" zoomSliderVisible="false" load="esriMap_loadHandler(event)"> </esri:Map> </s:Application>
![](https://common.cnblogs.com/images/copycode.gif)
4.编译,把生成的文件部署到Web 服务器下运行,如下:
5.源代码下载
总结
这样就把Gis应用最重要的部分“地图”加载进来了,剩下就就是对地图的操作,放大、缩小,增加点,线,面或其他图片图层等。以后还会对地图操作做进一步详细讲解。
WebGis应用开发框架的更多相关文章
- Cesium 绘制点、线、面和测距
本文基于ES6,采用React+Cesium的Webgis前端开发框架,目前threejs和cesium的结合正在研究中.此段代码采用原生javascript,可能过程中用到了es6的扁平化语法,如( ...
- WebGIS开源解决方案之开发环境搭建(四)
续前几篇文章,前面陆续介绍了开源GIS服务器Geoserver,开源数据库Postpresql以及开源前端udig的安装和基本使用. WebGIS前端开发,可以选择arcgis for javascr ...
- C#开发框架学习
C# 开源框架(整理) Json.NET http://json.codeplex.com/ Json.Net 是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用J ...
- 基于arcgis api for js高速公路智能化智慧公路养护WebGIS开源系统
伴随着高速公路建设进程加快,其涉及信息量增大.类型多样.地点分布广,传统的信息管理方式已不适应公路建设迅速发展的需要,而目前能对高速公路在设计.施工.养护等阶段的各类信息综合进行管理的信息系统尚较少见 ...
- Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms
行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...
- 从零开始编写自己的C#框架(27)——什么是开发框架
前言 做为一个程序员,在开发的过程中会发现,有框架同无框架,做起事来是完全不同的概念,关系到开发的效率.程序的健壮.性能.团队协作.后续功能维护.扩展......等方方面面的事情.很多朋友在学习搭建自 ...
- CRL快速开发框架系列教程十三(嵌套查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- CRL快速开发框架系列教程十一(大数据分库分表解决方案)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
随机推荐
- 用NAN简化Google V8 JS引擎的扩展
通过C++扩展Google V8 JS引擎的文章很多,Google V8 JS带的例子也容易明白.但是大部分文章都是Hello World型的,真正使用时发现处处是坑.扩展V8最经典的例子就是node ...
- 资源 之 4.4 Resource通配符路径(拾贰)
4.4.1 使用路径通配符加载Resource 前面介绍的资源路径都是非常简单的一个路径匹配一个资源,Spring还提供了一种更强大的Ant模式通配符匹配,从能一个路径匹配一批资源. Ant路径通配 ...
- ubuntu12.04 安装配置jdk1.7
第一步:下载jdk-7-linux-i586.tar.gz wget -c http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-linux-i586 ...
- 《javascript高级程序设计》 第20章 JSON
20.1 语法 20.1.1 简单值 20.1.2 对象 20.1.3 数组 20.2 解析与序列化 20.2.1 JSON 对象 20.2.2 序列化选项 20.2.3 解析选项 JSON 对象有两 ...
- 实验二Step1-有序顺序表
#include<stdio.h> struct job { ];//作业名称 char status;//当前状态 int arrtime;//到达时间 int reqtime;//要求 ...
- ASP.NET中EVAL用法大全
<%# Bind("Subject") %> //绑定字段<%# Container.DataItemIndex + 1%> //实现自动编号<%# ...
- hdu----(4301)Divide Chocolate(状态打表)
多校综合排名前25名的学校请发送邮件到HDUACM@QQ.COM,告知转账信息(支付宝或者卡号) Divide Chocolate Time Limit: 2000/1000 MS (Java/Oth ...
- Struts2配置拦截器,struts2加载常量时的搜索顺序
1:struts2加载常量时的搜索顺序 1.Struts-default.xml 2.Struts-plugin.xml 3.Struts.xml 4.Struts-properties(自己创建的) ...
- Java网络通信
一.基本概念 1.网络程序: 能够接受另一台计算机发送过来的数据或者能够向另一台计算机发送数据的程序叫做网络程序. 2.IP 能够在网络中唯一标示一台主机的编号就是IP 3.端口号 16位数字表示 4 ...
- Hadoop 添加删除数据节点(datanode)
前提条件: 添加机器安装jdk等,最好把环境都搞成一样,示例可做相应改动 实现目的: 在hadoop集群中添加一个新增数据节点. 1. 创建目录和用户 mkdir -p /app/hadoop gr ...