之前我们介绍过用FGMap在地图上显示标注,其实都只是用了Marker这个对象,今天让我们来看看线和面的画法,其中包括:圆形、长方形、星形、椭圆形、扇形等等。完成这个些功能后,基本的点、线、面对象我们都可以支持了。
这个是新发布的版本,所以请需要的朋友重新下载接口库文件:http://fgmap-webgis.googlecode.com/svn/trunk/lib/FGMapLib.swc
我们的程序运行后的结果是:
是不是看上去还不错呢?告诉你们一个秘密,当鼠标移动到第一排第二个面上的时候,还会有动画效果。
其中扇形是很多朋友在做基站分析的时候用得最多的,现在FGMap可以直接画了,方便大家使用。
上面只是一张图片,需要源码的看下面:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.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="800" minHeight="600"
xmlns:maps="com.fgmap.maps.*">
<s:layout>
<s:BasicLayout/>
</s:layout>
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<s:Panel width="100%" height="100%" title="FGMap API 各种对象的画法">
<maps:Map id="map" width="100%" height="100%" mapevent_mapready="map_mapevent_mapreadyHandler(event)"/>
</s:Panel>
<fx:Script>
<![CDATA[
import com.fgmap.maps.*;
import com.fgmap.maps.MapMouseEvent;
import com.fgmap.maps.controls.MapTypeControl;
import com.fgmap.maps.controls.NavigationControl;
import com.fgmap.maps.controls.OverviewMapControl;
import com.fgmap.maps.controls.ScaleControl;
import com.fgmap.maps.interfaces.IMapType;
import com.fgmap.maps.overlays.*;
import flash.filters.DropShadowFilter;
import mx.effects.Glow;
private var marker:Marker;
private var centreLatlng:LatLng = new LatLng(39.911842984749946, 116.400146484375);//北京的一个坐标位置。
private var glowEffect:Glow;
protected function map_mapevent_mapreadyHandler(event:MapEvent):void
{
map.enableContinuousZoom(); //启用连续平滑缩放。
map.enableScrollWheelZoom(); //启用使用鼠标滚轮缩放。
map.addControl(new MapTypeControl()); //供用户在地图类型之间进行切换的按钮。
map.addControl(new NavigationControl());//供用户更改地图的各项导航参数,包括缩放级别、中心位置和空间方位角。
map.addControl(new ScaleControl()); //比例控件是用于指示当前地图的分辨率和缩放级别的可视指示器。
map.addControl(new OverviewMapControl());//鹰眼图
map.removeMapType(MapType.PHYSICAL_MAP_TYPE); //删除地形图片
map.removeMapType(MapType.SATELLITE_MAP_TYPE); //删除影像图片
map.setCenter(new LatLng(43,-79.5),7);
var point:LatLng = new LatLng();
//设置折线的样式
var polylineoptions:PolylineOptions = new PolylineOptions({
strokeStyle: {
thickness: 3,
color: 0x0000ff,
alpha: 0.5,
pixelHinting: false
},
tooltip: "我是Polyline"
});
//设置面的样式
var polygonOptions:PolygonOptions = new PolygonOptions({
strokeStyle: {
thickness: 3,
color: 0x0000ff,
alpha: 0.5,
pixelHinting: false
},
fillStyle: {
color: 0x00ff00,
alpha: 0.5
},
tooltip: "我是Polygon"
});
point = new LatLng(45,-81);
var lat:Number = point.lat();
var lon:Number = point.lng();
var latOffset:Number = 0.3;
var lonOffset:Number = 0.3;
var polyline:Polyline = new Polyline([
new LatLng(lat, lon - lonOffset),
new LatLng(lat + latOffset, lon),
new LatLng(lat, lon + lonOffset),
new LatLng(lat - latOffset, lon),
new LatLng(lat, lon - lonOffset)
],
new PolylineOptions({
strokeStyle: {
color: 0x0000ff,
thickness: 3,
alpha: 0.7},
tooltip:"我是Polyline"
}));
map.addOverlay(polyline);
point = new LatLng(45,-80);
lat = point.lat();
lon = point.lng();
var polygon:Polygon = new Polygon([
new LatLng(lat, lon - lonOffset),
new LatLng(lat + latOffset, lon),
new LatLng(lat, lon + lonOffset),
new LatLng(lat - latOffset, lon),
new LatLng(lat, lon - lonOffset)
],
new PolygonOptions({
strokeStyle: {
color: 0x0000ff,
thickness: 3,
alpha: 0.7},
fillStyle: {
color: 0x0000ff,
alpha: 0.7},
tooltip:"我是Polygon"
}));
map.addOverlay(polygon);
var myFilters:Array = new Array();
myFilters.push(new DropShadowFilter());
polygon.foreground.filters = myFilters;
// 在面上增加动画效果
glowEffect = new Glow();
glowEffect.alphaFrom = 1;
glowEffect.alphaTo = 0;
glowEffect.blurXFrom = 0;
glowEffect.blurXTo = 255;
glowEffect.blurYFrom = 0;
glowEffect.blurYTo = 255;
glowEffect.color = 0x0000FF;
glowEffect.duration = 2000;
glowEffect.strength = 2;
glowEffect.target = polygon.foreground;
polygon.addEventListener(MapMouseEvent.ROLL_OVER, function(event:MapMouseEvent): void {
glowEffect.stop();
glowEffect.play();
});
// === 圆 ===
point = new LatLng(44,-81);
polylineoptions.tooltip = "我是PolylineCircle";
map.addOverlay(new PolylineCircle(point,30000,polylineoptions));
// === 正方形 ===
point = new LatLng(44,-80);
polylineoptions.strokeStyle.color = 0xff0000;
polylineoptions.tooltip = "我是PolylineRegularPoly";
map.addOverlay(new PolylineRegularPoly(point,30000,4,0,polylineoptions));
// === 星形 ===
point = new LatLng(44,-79);
polylineoptions.strokeStyle.color = 0x0000ff;
polylineoptions.tooltip = "我是PolylineStar";
map.addOverlay(new PolylineStar(point,30000,10000,5,0,polylineoptions));
// ==- 规则长方形 ===
point = new LatLng(44,-78);
polylineoptions.strokeStyle.color = 0xff0000;
polylineoptions.tooltip = "我是PolylineShape";
map.addOverlay(new PolylineShape(point,50000,10000,50000,10000,30,4,polylineoptions,true));
polygonOptions.fillStyle.color = 0xff0000;
polygonOptions.tooltip = "我是PolygonShape";
map.addOverlay(new PolygonShape(point,50000,10000,50000,10000,-60,4,polygonOptions,true));
// === Filled Circle ===
point = new LatLng(43,-81);
polygonOptions.fillStyle.color = 0x00ff00;
polygonOptions.tooltip = "我是PolygonCircle";
map.addOverlay(new PolygonCircle(point,30000,polygonOptions));
// === Pentagon ===
point = new LatLng(43,-80);
polygonOptions.fillStyle.color = 0xffff00;
polygonOptions.tooltip = "我是PolygonRegularPoly";
map.addOverlay(new PolygonRegularPoly(point,30000,5,0,polygonOptions));
// === 5-pointed Star ===
point = new LatLng(43,-79);
polygonOptions.fillStyle.color = 0xff0000;
polygonOptions.tooltip = "我是PolygonStar";
map.addOverlay(new PolygonStar(point,30000,10000,5,0,polygonOptions));
// === Ellipse ===
point = new LatLng(43,-78);
polygonOptions.fillStyle.color = 0x0000ff;
polygonOptions.tooltip = "我是PolygonEllipse";
map.addOverlay(new PolygonEllipse(point,30000,10000,-45,polygonOptions));
// === Elliptical flash ===
point = new LatLng(42,-81);
polygonOptions.fillStyle.color = 0xffff00;
polygonOptions.tooltip = "我是PolygonShape";
map.addOverlay(new PolygonShape(point,50000,25000,45000,20000,60,100,polygonOptions));
// === 增加画扇形的方法 ===
point = new LatLng(42,-80);
//map.addOverlay(new PolylineShape(point,30000,30000,-30000,-30000,0,10));
polylineoptions.tooltip = "我是PolylineSector";
map.addOverlay(new PolylineSector(point,30000,0,45,polylineoptions));
polygonOptions.tooltip = "我是PolygonShape";
map.addOverlay(new PolygonSector(point,30000,90,135,polygonOptions));
map.addOverlay(new PolylineSector(point,30000,180,225,polylineoptions));
map.addOverlay(new PolygonSector(point,30000,270,315,polygonOptions));
// === Hexagonal grid ===
point = new LatLng(42,-78.8);
polygonOptions.tooltip = "我是PolygonRegularPoly";
polygonOptions.strokeStyle.thickness = 1;
map.addOverlay(new PolygonRegularPoly(point,25000,6,90,polygonOptions));
var d:Number=2*25000*Math.cos(Math.PI/6);
polygonOptions.fillStyle.color = 0x00ffff;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d, 30),25000,6,90,polygonOptions));
polygonOptions.fillStyle.color = 0xff0000;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d, 90),25000,6,90,polygonOptions));
polygonOptions.fillStyle.color = 0x00ffff;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d,150),25000,6,90,polygonOptions));
polygonOptions.fillStyle.color = 0xffff00;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d,210),25000,6,90,polygonOptions));
polygonOptions.fillStyle.color = 0x0000ff;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d,270),25000,6,90,polygonOptions));
polygonOptions.fillStyle.color = 0xffff00;
map.addOverlay(new PolygonRegularPoly(point.eOffsetBearing(d,330),25000,6,90,polygonOptions));
}
]]>
</fx:Script>
</s:Application>
更多漂亮的图形等待你们去实现,记得告诉我一声哦!
作者:LionGIS
邮箱:liongis@163.com
QQ:1366940902
出处:http://liongis.cnblogs.com/
欢迎转载,请在文章页面明显位置给出原文链接。