1、比例尺本身虽然没有单位:1:15000,但它的两个数字是有单位的。表示1厘米代表15000厘米,即150米。而不是1厘米代表15000米。
1:5000000的地图,表示1厘米代表50000米,即5公里。
转载:问题描述:
在openscales2.2版本中,如果有地物标注的文字时,文字会随着地图的缩放而变换字体的大小。比如文字标注设定的字体为12号字,那么在地图的缩放过程中,显示的字体会时而小与12号字体时而为12号字体。
问题的原因:
出现这种现象的原因是在openscales以前版本中(1.2版本),是有一个zoom(默认为1-18)属性,地图根据鼠标滚轮的滚动,对zoom属性进行+1或-1操作,然后在map中的resolutions数组中查找zoom对应的resolution值,这样能够保证地图的总体缩放级别,也能够保证地图的动态请求切片每次都是以256*256像素添加到地图上的。而在openscales2.2版本中,地图的鼠标缩放是由一组放大缩小因数控制的,放大因数为0.9,缩小因数为1.11,这样设置使得每次鼠标滚轮的转动,使得地图缩放的等级不是严格按照map中的resolution数组进行缩放,所以使得当请求到大小为256*256的图片加载到地图上时,会因为resolution值得原因,不是严格以256*256的像素大小展示,也就是说256*256大小的图片被压缩了。所有在map中的resolutions数组中的每个相邻resolution值之间,图片是由上一级别的图片缩小或拉伸填充,直到达到该分辨率时,才会重新请求。
2、linestring.as
计算距离的方法
public function get geodesicLength():Number
{
var geom:LineString = this; // so we can work with a clone if needed
var lonlatProj:ProjProjection = ProjProjection.getProjProjection("EPSG:4326");
if(lonlatProj != this.projection) {
geom = this.clone() as LineString;
geom.transform(lonlatProj);
}
var length:Number = 0;
if(geom.components && (geom.components.length >= 4)) {
var p1:flash.geom.Point;
var p2:flash.geom.Point;
for(var i:int=3, len:int=geom.components.length; i<len; i=i+2) {
p1 = new flash.geom.Point(geom.components[i-3], geom.components[i-2]);
p2 = new flash.geom.Point(geom.components[i-1], geom.components[i]);
// this returns km and requires lon/lat properties
length += ProjCalculus.distVincenty(p1,p2);
}
}
// convert to m
return length * 1000;
}
调用(Distance.as)...
tmpDist *= Unit.getInchesPerUnit(ProjProjection.getProjProjection(measure_drawLayer.projection).projParams.units);
var distance_displaySystem:String = Unit.KILOMETER;
var tmpDist:Number=0;
//trace("jasdfasdf:" + _displaySystem);
switch (distance_displaySystem.toLowerCase())
{
case Unit.METER:
tmpDist = (distance_LineFeature.geometry as LineString).geodesicLength;
//tmpDist/=Unit.getInchesPerUnit(Unit.METER);
trace(tmpDist + "," + "asdad");
distance_result= trunc(tmpDist,distance_accuracies.getValue(Unit.METER));
distance_unit = Unit.METER;
break;
3、linearRing.as
计算面积的方法
public function get geodesicArea():Number
{
var ring:LinearRing = this; // so we can work with a clone if needed
var lonlatProj:ProjProjection = ProjProjection.getProjProjection("EPSG:4326");
if(lonlatProj != this.projection) {
ring = this.clone() as LinearRing;
ring.transform(lonlatProj);
}
var area:Number = 0;
var len:Number = ring.components.length;
if(len > 4) {
var p1:Point;
var p2:Point;
for(var i:int=0; i<len-2; i=i+2) {
p1 = new Point(ring.components[i], ring.components[i+1]);
p2 = new Point(ring.components[i+2], ring.components[i+3]);
area += ProjCalculus.degtoRad(p2.x - p1.x) * (2 + Math.sin(ProjCalculus.degtoRad(p1.y)) + Math.sin(ProjCalculus.degtoRad(p2.y)));
}
p1 = new Point(ring.components[len-2], ring.components[len-1]);
p2 = new Point(ring.components[0], ring.components[1]);
area += ProjCalculus.degtoRad(p2.x - p1.x) * (2 + Math.sin(ProjCalculus.degtoRad(p1.y)) + Math.sin(ProjCalculus.degtoRad(p2.y)));
area = area * 6378137.0 * 6378137.0 / 2.0;
}
return area;
}
调用..
if(opemode==5)
{
var area:Number = 0;
if(surface_PolygnFeature && (surface_PolygnFeature.geometry as Polygon).componentsLength == 1
&& ((surface_PolygnFeature.geometry as Polygon).componentByIndex(0) as LinearRing).componentsLength>2)
{
var surface_units:String=ProjProjection.getProjProjection(measure_drawLayer.projection).projParams.units;
((surface_PolygnFeature.geometry as Polygon).componentByIndex(0) as LinearRing).units = surface_units
area = ((surface_PolygnFeature.geometry as Polygon).componentByIndex(0) as LinearRing).geodesicArea;
area = Math.abs(area);
//