正则表达式30分钟入门教程

十二月 3rd, 2009 8 条评论
本文目标 30分钟内让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。 (..More)
分类: 默认分类

ActionScript四舍五入

十二月 2nd, 2009 1 条评论

用 Math.round( ) 进行四舍 五入 , Math.floor( ) 和 Math.ceil( ) 进行上下 近似 值。
NumberUtilities.round( ) 方法可自定义取值。

很多情况我们需要得到整数部分而不是带有小数的浮点数。比如计算出结果为 3.9999999 , 期
望的结果应该是 4.0 。
Math.round( ) 方法进行四舍五入计算:
trace(Math.round(204.499)); // 显示 : 204
trace(Math.round(401.5)); // 显示 : 402
Math.floor( ) 方法去掉小数部分, Math.ceil( ) 方法去掉小数部分后自动加 1 :
trace(Math.floor(204.99)); // 显示 : 204
trace(Math.ceil(401.01)); // 显示 : 402
如果我想要把 90.337 四舍五入到 90.34, 可以这么写:
trace (Math.round(90.337 / .01) * .01); // 显示 : 9.34
trace (Math.round(92.5 / 5) * 5); // 显示 : 95
trace (Math.round(92.5 / 10) * 10); // 显示 : 90

更好的办法是用自定义函数 NumberUtilities.round( ) ,它需要两个参数:
number :要舍入的数字
roundToInterval :间隔值
NumberUtilities 类在 ascb.util 包中。
imported ascb.util.NumberUtilities 导入
trace(NumberUtilities.round(Math.PI)); // 显示 : 3
trace(NumberUtilities.round(Math.PI, .01)); // 显示 : 3.14
trace(NumberUtilities.round(Math.PI, .0001)); // 显示 : 3.1416
trace(NumberUtilities.round(123.456, 1)); // 显示 : 123
trace(NumberUtilities.round(123.456, 6)); // 显示 : 126
trace(NumberUtilities.round(123.456, .01)); // 显示 : 123.46

分类: Flex

不同数字类型之间的转换

十二月 2nd, 2009 0 条评论

在 ActionScript 中不管你怎么设置数字,它的内部结果总是以十进制存贮:
// 创建颜色对象
var pink:ColorTransform = new ColorTransform( );
// 用十六进制设置 RGB
pink.rgb = 0xF612AB;
// 显示这个值时: 16126635
trace(pink.rgb);
如果你要输出为其他表示法,用 toString( radix ) 方法
下面的例子用构造 uint 对象,输出不同的格式:
// radix 为 2, 输出二进制
trace(new uint(51).toString(2)); // 显示: 110011
// radix 为 16, 输出十六进制
trace(new uint(25).toString(16)); // 显示: 19
var quantity:Number = 164;
trace(quantity.toString(16)); // 显示: a4

用 parseInt( ) 函数把字符串转换为十进制数,用 Number , uint , 或 int 对象 的 toString( ) 方法转换为字符串。

下面的例子设置 ColorTransform 对象的 RGB 值,调用 toString( ) 以十六进制显示
var pink:Color = new ColorTransform( );
pink.rgb = 0xF612AB;
trace(pink.rgb.toString(16)); // 显示: f612ab
toString( ) 方法的参数值的合法范围在 2 到 36 ,如果没有指定参数值,默认为 10 。和 toString( ) 相反的是parseInt( ) 函数。它把指定的字符串转换为数字。
下面的代码把各种字符串,输出十进制数。
trace(parseInt("110011", 2)); // 显示 : 51

trace(parseInt("19", 16)); // 显示 : 25
trace(parseInt("17", 10)); // 显示 : 17
如果不指定字符串进制,默认为十进制,除非在字符串前加上 0x, 0X, 或 0 :
trace(parseInt("0x12")); // 显示 : 18
trace(parseInt("017")); // 显示 : 15
下面的例子给出的字符串格式和指定进制冲突,这时会默认为十进制
// 但是下面的字符串是不合法的数字,因此返回 0
trace(parseInt("0x12", 10)); // 显示 : 0
下面的字符串为八进制,但指定为十进制,因此系统默认字符串为十进制,而不是八进制。
trace(parseInt("017", 10)); // 显示 17
trace(parseInt("A9FC9C")); // NaN

分类: Flex

缩放影片

十二月 2nd, 2009 3 条评论

      我想让影片适应屏幕大小,使用 stage.scaleMode 属性,这里有几种缩放模式: exactFit , noBorder , noScale , 和 showAll 。

      为了避免编写上错误,这些字符串都成为了flash.display.StageScaleMode 类的静态属性:

       EXACT_FIT, NO_BORDER,NO_SCALE, 和 SHOW_ALL.Flash 播放器默认的缩放模式是 showAll 。 这种模式会按照影片原始比例进行缩放以适应播放器大小。这样如果播放器的比例和影片的比例不一致就会导致电影边框的出现。

       设置应用程序的缩放模式:stage.scaleMode = StageScaleMode.SHOW_ALL;注意到 stage 并不是个全局对象,但是它是任何可视化对象的一个属性,因此这个语句在 sprite类或继承自 DisplayObject 类里都可以。

        noBorder 模式在保持原始比例下进行缩放以适应播放器,但是,如果播放器和影片比例不匹 配 ,影片显示不下的会被剪切掉,使用下面的语句设置:stage.scaleMode = StageScaleMode.NO_BORDER;

        exactFit 模式缩放影片适应播放器,它改变了电影原始比例,如果必要,它会匹配播放器,这样电影总是填充整个播放器,但是这样电影中的元素可能会扭曲,代码如下:stage.scaleMode = StageScaleMode.EXACT_FIT;
        noScale 模式即不进行缩放,保持原始比例 。使用该模式不要忘了设置对齐方式(看 3.7 节 ):stage.scaleMode = StageScaleMode.NO_SCALE;
scaleMode 属性值并不影响右键菜单里功能,不过你可以禁用菜单里的缩放功能。

分类: ArcGIS

今天终于想学习一些Flex的东西,先看一下AS的类吧

十二月 2nd, 2009 0 条评论

     在ActionScript 3 中,类是最基本的编程结构,所以必须先掌握编写类的基础知识。对于初学者,所以得类都必须放在 .as 文件中,每个 as 文件里只能定义一个 public 类,而且类名字要与文件名相同。比如:你的类名为 Example , 那么文件名必须为 Example.as.在 ActionScript 3.0 中所有的类都必须放在包中。包是对类进行分类的单位,其意义相当于文件系统的目录。包路径相对于 classpath (类路径) , 默认的类路径就是项目的根目录(就是包含 mxml文件的所在目录),因此顶级的包目录就是项目根目录。包申明如下:

package name {
}

如果类定义在顶级包中,那么包名可以不指定,如:
package {
}
当类文件保存在子目录,那么包名就是它的保存目录,例如,文件保存在 example 目录 , 那么包这样申明:
package example {
}
如果类文件保存在 example 目录的子目录 subpackage , 应这样申明 :
package example.subpackage {
}
包是很重要的,它可以避免类名称空间冲突。例如,有两个开发者写了两个类文件都叫MessageManager . 这两个类虽有相同名字,但是完成不同的任务,因此你不能把这两个类放在一起,如果这样做,编译器将不知道调用哪个,一个办法是取个唯一的类名字。你可以取名字叫 EmailManager 和 BinarySocket- MessageManager , 这是可以的,但是如果你 管理成千上万的类这时就很困难了。因此用包可以很好的解决这个问题,即使你有很多相同的类名,只要它们不在同一个包就不会冲突,如把 MessageManager 放在 net.messaging.email 包另一个放在 net.messaging.binarysocket 包中。
一般取包名都以自己的网站域名,这样可以最大限度避免和别人的包名相冲突。

分类: Flex

三种地理参考信息模型:WMS,WFS,WCS

十一月 1st, 2009 0 条评论
OGC1999年开始WMT1(Web Map Tested)和WMT2互操作项目。其中著名的GML来自WMT1的成果。 在WMT2中OGC定义了三种地理参考信息模型:Web Map Server(WMS) , Web Feature Server(WFS) ,Web Coverage Server(WCS) . (..More)
分类: WebGIS

GML简介

十一月 1st, 2009 0 条评论
GML GML是XML在地理空间信息领域的应用。利用GML可以存储和发布各种特征的地理信息,并控制地理信息在Web浏览器中的显示。 地理空间互联网络作为全球信息基础架构的一部分,已成为Internet上技术追踪的热点。许多公司和相关研究机构通过Web将众多的地理信息源集成在一起,向用户提供各种层次的应用服务,同时支持本地数据的开发和管理。GML可以在地理空间Web领域完成了同样的任务。GML技术的出现是地理空间数据管理方法的一次飞跃。 (..More)
分类: WebGIS

KML简介

十一月 1st, 2009 0 条评论

关于 KML

KML,是 Keyhole 标记语言(Keyhole Markup Language)的缩写,是一种采用 XML 语法与格式的语言,用于描述和保存地理信息(如点、线、图像、多边形和模型等),可以被 Google Earth 和 Google Maps 识别并显示。您可以使用 KML 来与其他 Google Earth 或 Google Maps 用户分享地标与信息。当然,您也可以从 Google Earth 社区 等相关网站获得有趣的 KML 文件。Google Earth 和 Google Maps 处理 KML 文件的方式与网页浏览器处理 HTML 和 XML 文件的方式类似。像 HTML 一样,KML 使用包含名称、属性的标签(tag)来确定显示方式。因此,您可将 Google Earth 和 Google Maps 视为 KML 文件浏览器。单击此处可获得更多信息。

Google Maps 只能显示部分 KML 属性。详见 Google Maps 帮助。

关于 KMZ

注意:KMZ 文件是压缩过的 KML 文件。【译注:由于 KMZ 是压缩包,因此,它不仅能包含 KML文本,也能包含其他类型的文件。如果您的地标描述中链接了本地图片等其他文件,建议您在保存地标时,保存类型选 KMZ 而不选 KML,Google Earth 会把您链接的图片等文件复制一份夹 KMZ 压缩包中。这样,您就可以将包含丰富信息的地标文件发给朋友,一起分亨了。】

KML 说明书与教程

详细的 KML 说明请访问下面这个网址(目前只提供英文版):

http://earth.google.com/kml/

您也可以访问下面这个网址来获得循序渐进的教程(目前只提供英文版):

http://earth.google.com/kml/kml_tut.html

注意:您可以让 KML 数据按时间顺序先后显示。详见 查看时间刻度(Viewing a Timeline)。

在GE中如何选择 KML 错误的处理方式

您可以设置 Google Earth(简称GE) 打开 KML 时遇到错误的处理方式。

单击“工具”(Tools)→“设置”(Options)→“基本设置”(General)

在“KML 错误处理”(KML Error Handling)下,选择其中一项:

默认接受所有不认识的数据(Silently accept all unrecognized data)这将忽略 KML 中的任何错误。

*提醒所有错误(Show prompts for all errors)这将在遇到 KML 中的任何错误时,均会显示一个提示。

*任何错误时停止加载(Abort file load on any error)这将在遇到任何 KML 错误时,取消加载该文件。

*单击“确定”(OK)

一些关于KML/KMZ的周边消息

2007年10月15日新版的微软Virtual Earth支持基本的KML和KML搜索

Google Maps目前可以支持搜索互联网上KML/KMZ格式的地标

无疑!接下来会有更多的在线地图会重视KML/KMZ!我们拭目以待吧

分类: WebGIS

OGC规范的理解和记录

十一月 1st, 2009 0 条评论

[OGC] 开放地理信息系统协会

开放地理信息系统协会(OpenGISConsortium,OGC),OpenGIS规范致力于为地理信息系统间的数据和服务互操作提供统一.

OGC——Open Geospatial Consortium——开放地理信息联盟,是一个非盈利的志愿的国际标准化组织,引领着空间地理信息标准及定位基本服务的发展目前在空间数据互操作领域,基于公共接口访问模式的互操作方法是一种基本的操作方法。通过国际标准化组织(ISO/TC211)或技术联盟(如OGC)制定空间数据互操作的接口规范,GIS软件商开发遵循这一接口规范的空间数据的读写函数,可以实现异构空间数据库的互操作。基于http(Web)XML的空间数据互操作是一个很热门的研究方向,主要涉及Web Service的相关技术。OGC和ISO/TC211共同推出了基于Web服务(XML)的空间数据互操作实现规范Web Map Service,Web Feature Service,Web Coverage Service以及用于空间数据传输与转换的地理信息标记语言GML。

Web地图服务

Web地图服务(WMS)利用具有地理空间位置信息的数据制作地图。其中将地图定义为地理数据可视的表现。这个规范定义了三个操作:GetCapabitities返回服务级元数据,它是对服务信息内容和要求参数的一种描述; GetMap返回一个地图影像,其地理空间参考和大小参数是明确定义了的;GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息

Web要素服务

Web地图服务返回的是图层级的地图影像,Web要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删除等事务操作,是对Web地图服务的进一步深入。OGC Web要素服务允许客户端从多个Web要素服务中取得使用地理标记语言(GML)编码的地理空间数据,这个远东定义了五个操作:GetCapabilites返回Web要素服务性能描述文档(用XML描述);DescribeFeatureType返回描述可以提供服务的任何要素结构的XML文档;GetFeature为一个获取要素实例的请求提供服务;Transaction为事务请求提供服务;LockFeature处理在一个事务期间对一个或多个要素类型实例上锁的请求。

Web覆盖服务

Web覆盖服务(WCS)面向空间影像数据,它将包含地理位置值的地理空间数据作为“覆盖(COverage)”在网上相互交换。网络覆盖服务由三种操作组成:GetCapabilities,GetCoverage和DescribeCoverageType。GetCapabilities操作返回描述服务和数据集的XML文档。网络覆盖服务中的GetCoverage操作是在GetCapabilities确定什么样的查询可以执行、什么样的数据能够获取之后执行的,它使用通用的覆盖格式返回地理位置的值或属性。DescribeCoverageType操作允许客户端请求由具体的WCS服务器提供的任一覆盖层的完全描述。

以上三个规范既可以做为Web服务的空间数据服务规范,又可以做为空间数据的互操作实现远东。只要某一个GIS软件支持这个接口,部署在本地服务器上,其他GIS软件就可以通过这个接口得到所需要的数据。从技术实现的角度,可以将Web服务理解为一个应用程序,它向外界暴露出一个能通过Web进行调用的接口,允许被任何平台、任何系统,用任何语言编写的程序调用。这个应用程序可以用现有的各种编程语言实现。Web服务最大的特点是可以实现跨平台、跨语言、跨硬件的互操作,正是Web服务中的SOAP、WSDL和UDDI保证了Web服务的跨平台互操作的特性,所以,如何使用SOAP、WSDL和UDDI来部署、描述、传输和注册一个Web服务是实现Web服务的关键。由于SOAP、WSDL和UDDI是一套标准,不同的厂商可以有实现这些标准的不同产品,例如SUN、APACHE、IBM、Borland等公司推出的基于JAVA平台的Web服务工具包,以及微软提出的.NET平台等,这些工具为实现Web服务的开发、部署、描述提供了方便的工具,极大的降低了开发Web服务的复杂度。

分类: WebGIS

计算折线长度的函数,从GMap中提取来的

十一月 1st, 2009 0 条评论

1. 如何编码经纬度

对于静态、不需要修改的数据,可利用Google提供的在线编码工具进行获取。详情参见相关文档。

对于需动态生成的数据,可根据Google提供的编码算法说明,对进行编码实现使用。有关编码说明参加Google的相关文档。

2. 有关计算折线长度

基本思路:将地球作为一个完美球体。计算折线相邻两点的距离(弧长,半径*弧度)进行累加即可获取。

因为以上方法采取了近似处理,因此获取的值仅供参考。

几个关于GlatLng的方法:

GlatLng.lat();//返回角度值纬度

GlatLng.lng();//返回角度值经度

GlatLng.latRadians();//返回弧度值纬度

GlatLng.lngRadians();//返回弧度值经度。

计算弧长示例:

function getDistance2(from, to, unit) {

//地球半径

var R = 6378.137;

//千米英里转化进制

var M = 1.609344;

with (Math)

{

var lat1 = from.latRadians();

var lng1 = from.lngRadians();

var lat2 = to.latRadians();

var lng2 = to.lngRadians();

var dist = 2 * asin(sqrt( pow( (sin( (lat1 - lat2) /2 ) ), 2) + cos(lat1) * cos(lat2) * pow( (sin( (lng1 - lng2) / 2) ) ,2) ) ) * R;

}

if (unit=="M")

{

dist = dist / M;

}

return dist;

}

计算折线总长示例:

function getDistance() {

var dist = 0;

//折线上总的顶点数

var count = polyline.getVertexCount();

//历遍所有顶点,计算距离

for(var i=0; i<count-1; i++){

dist += getDistance2(polyline.getVertex(i), polyline.getVertex(i+1));

}

return dist;

}

分类: WebGIS