// 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);
分享到:
相关推荐
网上搜索了很多全国不同比例尺接图表,发现大多是mapgis版或者部分比例尺下的arcgis版的,使用起来有些不太方便。本人去漂泊利用零碎时间制作了一个ArcGIS版的不同比例尺下的全国接图表,供大家使用。数据以mdb...
QT实现的可拖动比例尺,滑动窗口可根据实际情况调整一下宽度和高度即可
此文件为cesium实现指南针、比例尺插件 ,参考博客地址为:https://blog.csdn.net/qq_26579715/article/details/103889908
范例使用SuperMap iClient 7C for JavaScript开发模式,通过SuperMap.Layer.TiledDynamicRESTLayer的scales 属性设置地图缩放比例尺。
比例尺是表示图上距离比实 地距离缩小的程度,也叫缩尺。公式为:比例尺=图上距离/实 地距离。用数字的比例式或分数式表示比例尺的大小。例如地图上1厘米代表实地距离500千米,可写成:1∶50,000,000或写成:1/50,...
煤矿常用1∶2 000和1∶5 000比例尺的井上下对照图,这2套比例尺的图形要素基本一致,只是表达方式与内容取舍有所不同。为了改变传统的需要人工判断、分别填绘2套图形等繁琐的工作方法,利用Longruan GIS 3.2平台的功能...
通过javascript、jquery和原形链的方法开发比例尺控件,通过传入地图比例尺层级(数值型)显示比例尺,包括地图层级变化,比例尺数字变化。
1.可完成新旧图幅编号的相互转换,从1:100万到1:5千系列比例尺共7个基本比例尺图号的转换, 2.可以输入一点坐标找出该点所在图幅, 3.可以把度,分,秒转换成度的小数点形式,或反向转换 4.可以找出给定图幅所包含的上级...
对分辨率与比例尺想换关系不清楚的,可参考此文档,奉献给giser和coder
Android 百度地图开发(三)--- 实现比例尺功能和替换自带的缩放组件,项目详情:http://blog.csdn.net/xiaanming/article/details/11821523
获取一个比例尺,当前地图的比例尺大于这个比例尺时,只显示七个大洲名称的标签;小于这个比例尺时,只显示世界各国名称的标签
Arcgis中1:10万大比例尺地图制作与打印.docx
绝版的一本书,杨德麟编著,大比例尺数字测图的原理 方法与应用
DZT 0171-2017 大比例尺重力勘查规范
谷歌卫星地图不同级别对应的比例尺、分辨率、视点高度之间的关系
比例尺、等高距和DEM分辨率关系 地表面的形态是很复杂的,不同地貌类型的形态是由它的相对高度、地面坡度以及所处的地势所决定的,它们是影响等高距的主要因素。从等高距计算公式可以看出,当地图比例尺和图上等高线...
1.可完成新旧图幅编号的相互转换,从1:100万到1:5千系列比例尺共7个基本比例尺图号的转换, 2.可以输入一点坐标找出该点所在图幅, 3.可以把度,分,秒转换成度的小数点形式,或反向转换 4.可以找出给定图幅所包含的上级...
缺点是图廓线没有明确的地理坐标,整个制图区域只能一次投影,常用于局部地区的大比例尺平面图和中小比例尺挂图和地图集;②经纬分幅。地图的内图廓近似梯形,常用于基本比例尺地形图。地图分幅时要顾及用图要求、...
JavaScript比例尺控制条添加省市路图片,以方便用户直接定位到市级比例尺