// ActionScript file
package {
import flash.display.Graphics;
import mx.controls.Label;
import mx.core.UIComponent;
import mx.core.UITextField;
[Style(name="shadowColor", type="uint", format="Color", inherit="yes")]
[Style(name="strokeColor", type="uint", format="Color", inherit="yes")]
[Style(name="strokeWidth", type="Number", format="Number", inherit="yes")]
[Style(name="strokeHeight", type="Number", format="Number", inherit="yes")]
[Style(name="sectNum", type="Number", format="Number", inherit="yes")]
/**
* @author pWX151802
*/
public class ScaleRule extends UIComponent
{
/**
* @private
*/
private static const DEFAULT_PREFERRED_WIDTH:Number = 100;
private static const OFFSET:Number = 20;
public function ScaleRule()
{
super();
}
override protected function createChildren():void{
super.createChildren();
labelObjects = new UIComponent();
addChild(labelObjects);
}
override protected function commitProperties():void{
super.commitProperties();
if (labelsChanged)
{
labelsChanged = false;
createLabels();
}
}
/**
* @private
*/
override protected function measure():void
{
super.measure();
measuredWidth = DEFAULT_PREFERRED_WIDTH;
measuredHeight = getStyle("strokeHeight");
}
override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
super.updateDisplayList(unscaledWidth, unscaledHeight);
var g:Graphics = graphics;
g.clear();
var strokeColor:Number = getStyle("strokeColor");
var shadowColor:Number = getStyle("shadowColor");
var strokeWidth:Number = getStyle("strokeWidth");
var strokeHight:Number = getStyle("strokeHeight");
var sectNum:Number = getStyle("sectNum");
if (strokeHight > unscaledHeight)
strokeHight = unscaledHeight;
var left:Number = 0;
var top:Number = _labels?unscaledHeight / 2:(unscaledHeight - strokeHight)/ 2;
var right:Number = _labels?unscaledWidth - OFFSET:unscaledWidth;
var pieceWidth:Number = Math.min(right/sectNum,strokeWidth<5?right:strokeWidth);
var bottom:Number = top + strokeHight;
if (sectNum == 1)
{
g.beginFill(strokeColor);
g.drawRect(left, top, pieceWidth, strokeHight);
g.endFill();
}
else if (sectNum > 1)
{
var leftPoint:Number = left;
for(var i:int=0;i<sectNum;i++){
if(i%2 == 0){
g.beginFill(strokeColor);
g.drawRect(leftPoint, top, pieceWidth, strokeHight);
}else{
g.beginFill(shadowColor);
g.drawRect(leftPoint, top, pieceWidth, strokeHight);
}
leftPoint = leftPoint + pieceWidth;
}
g.endFill();
}
layoutLabels(pieceWidth,unscaledHeight / 2);
}
private var labelObjects:UIComponent;
/**
* @private
*/
private function createLabels():void
{
if (labelObjects)
{
for (var i:int = labelObjects.numChildren - 1; i >= 0; i--)
{
labelObjects.removeChildAt(i);
}
}
if (_labels)
{
var numLabels:int = _labels.length;
for (var j:int = 0; j < numLabels; j++)
{
var labelObj:Label = new Label();
labelObj.setStyle("fontSize",10);
labelObj.text = _labels[j] is String ?
_labels[j]+_unitage :
_labels[j].toString()+_unitage;
labelObj.y = 0;
labelObjects.addChild(labelObj);
}
}
}
/**
* @private
*/
private function layoutLabels(pieceWidth:Number, labelHeight:Number):void
{
var numLabels:Number = labelObjects ? labelObjects.numChildren : 0;
if (numLabels > 0)
{
var labelInterval:Number = pieceWidth;
var labelPos:Number;
var left:Number = labelInterval;
var curLabel:Object;
for (var i:int = 0; i < numLabels; i++)
{
curLabel = labelObjects.getChildAt(i);
curLabel.setActualSize(curLabel.getExplicitOrMeasuredWidth(), curLabel.getExplicitOrMeasuredHeight());
labelPos = curLabel.getExplicitOrMeasuredWidth() / 2;
curLabel.move(left-5,0);
left += labelInterval;
}
}
}
private var _unitage:String = "";
private var labelsChanged:Boolean =false;
public function set unitage(value:String):void{
_unitage = value;
}
private var _labels:Array;
public function set labels(value:Array):void{
labelsChanged = true;
_labels = value;
}
}
}
引用:
var scaleRule:ScaleRule = new ScaleRule;
scaleRule.percentWidth = 100;
scaleRule.height = 30;
scaleRule.setStyle("strokeColor",0x000000);
scaleRule.setStyle("shadowColor",0xaaaaaa);
scaleRule.setStyle("strokeHeight",5);
scaleRule.setStyle("strokeWidth",50);
scaleRule.setStyle("sectNum",4);
scaleRule.labels=['1','2','3','4'];
scaleRule.unitage = "m";
this.addChild(scaleRule);
分享到:
相关推荐
在小学六年级下册的数学学习中,比例尺是一个至关重要的概念,它涉及到几何图形、实际问题的解决以及图表的理解。比例尺是用来表示图形或地图上距离与实际大小之间关系的一种工具,通常以数字比例或者线段比例的形式...
本教程将详细介绍如何在Mapbox地图中实现自定义比例尺的功能。 首先,我们需要理解地图比例尺的概念。比例尺是地图上距离与实际地理距离的比值,它帮助用户理解地图上的距离在现实世界中的对应长度。在Mapbox中,...
《国家基本比例尺地图图式》是一份重要的地理信息资源,它包含了绘制国家各级比例尺地图的规范和标准。这份资料通常由国家测绘部门制定,用于确保地图制作的一致性和准确性,是地理信息专业人士和地图制图者必备的...
3. **添加比例尺**:在布局视图中,通过“插入”菜单选择“比例尺”,然后选择适合地图设计和需求的样式,如线性比例尺、圆形比例尺或比例尺栏。 4. **调整比例尺属性**:可以自定义比例尺的颜色、字体、大小、单位...
为了实现拖动比例尺的功能,开发者可能需要覆盖QSlider类的某些默认行为,例如mousePressEvent()和mouseMoveEvent(),以便在鼠标按下和移动时更新比例尺的值。同时,可能还需要实现信号和槽机制,当比例尺的值改变时...
"谷歌卫星地图不同级别对应的比例尺、分辨率、视点高度之间的关系" 谷歌卫星地图不同级别对应的比例尺、分辨率、视点高度之间的关系是指谷歌卫星地图根据不同的分辨率分成不同的级别,每个级别的比例尺、分辨率和...
在本教程中,我们将聚焦于如何在百度地图API中实现比例尺功能以及如何替换默认的缩放组件,以提供更加自定义化的用户体验。比例尺是地图应用中的重要元素,它可以帮助用户直观地理解地图上的距离与实际距离之间的...
遥感影像空间分辨率和成图比例尺是遥感与测绘领域中的两个关键概念,它们之间的关系对于理解遥感数据在地图制作和地理信息系统中的应用至关重要。这篇文章将详细探讨这两个概念及其相互作用。 首先,遥感影像的空间...
【谷歌地图的级别与对应比例尺】是关于利用谷歌地图时如何理解并计算地图各层级的比例尺和分辨率的重要概念。谷歌地图提供了22个层级,其中国内通常使用到20级,国外则可能更高。每个层级对应的比例尺不相同,这对于...
这个压缩包文件“cesium之地图显示坐标、比例尺、海拔高度效果篇.zip”显然包含了关于如何利用Cesium展示地图上的坐标、比例尺以及海拔高度效果的教程或示例代码。下面我们将深入探讨这些关键概念。 首先,地图显示...
ArcGIS 中 1:10 万大比例尺地图制作与打印 在 ArcGIS 中,制作和打印大比例尺地图是一项复杂的任务,需要掌握特定的技能和技术。本篇文章旨在指导用户如何在 ArcGIS 中制作和打印 1:10 万的大比例尺地图,并详细...
网上搜索了很多全国不同比例尺接图表,发现大多是mapgis版或者部分比例尺下的arcgis版的,使用起来有些不太方便。本人去漂泊利用零碎时间制作了一个ArcGIS版的不同比例尺下的全国接图表,供大家使用。数据以mdb...
本文将深入探讨如何利用SuperMap .NET框架,实现一个图层在不同比例尺下显示不同级别的对象标签,如七大洲和世界各国的名称。这个功能对于地图的可读性和用户交互性有着显著的提升,特别是在大范围和小范围查看地图...
本文将详细讨论如何在ArcGIS Engine中添加比例尺,并结合提供的资源进行实践。 1. **ArcGIS Engine简介** ArcGIS Engine是Esri公司的开发工具集,它允许程序员利用GIS功能创建自定义的应用程序。它提供了丰富的...
《国家基本比例尺地图图式与地形图分幅和编号详解》 在地理信息系统和测绘领域,国家基本比例尺地图图式与地形图分幅和编号是至关重要的基础概念。这些标准规范了地图的制作、出版和使用,确保了地图信息的一致性和...
本篇文章将深入探讨如何利用SuperMap Objects Java实现按指定比例尺输出地图的功能。 首先,我们需要了解比例尺在地图中的意义。比例尺是地图与实际地理空间之间尺寸关系的表示,通常以数字、文字或图形的形式出现...
在GIS(地理信息系统)和地图制作中,比例尺和分辨率是两个非常重要的概念。比例尺是衡量地图上距离与实地距离之间关系的标准,而分辨率则是描述地图细节清晰度的指标。两者之间存在一定的转换关系,尤其在Web API的...
【比例尺的认识】 比例尺是地图、图纸等图形表示中重要的概念,用于描述图上距离与实际距离之间的关系。在本节课中,教师通过一系列活动和实例帮助学生深入理解比例尺的概念。 首先,通过脑筋急转弯的方式引入比例...
在JavaScript编程中,比例尺控制条(通常称为缩放控件)是地图应用中的关键元素,它允许用户直观地调整地图的放大级别,以便更好地查看地理区域的细节。本话题将深入探讨如何在JavaScript中实现比例尺控制条,并且...