Flex加载google地图、百度地图以及天地图作底图
一 Flex加载Google地图作底图
(1)帮助类GoogleLayer.as
/*
* 根据输入的地图类型加载Google地图(by chenyuming)
*/ package Layers
{ import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.TiledMapServiceLayer;
import com.esri.ags.layers.supportClasses.LOD;
import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; public class GoogleLayer extends TiledMapServiceLayer
{
private var _tileInfo:TileInfo=new TileInfo();
private var _baseURL:String="";
private var MapStyle:String=""; public function GoogleLayer(mapStyle:String)
{
this.MapStyle=mapStyle;
super();
buildTileInfo();
setLoaded(true); } override public function get fullExtent():Extent
{
return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference());
} override public function get initialExtent():Extent
{
return new Extent(-20037508.342787, -20037508.342787, 20037508.342787, 20037508.342787, new SpatialReference());
} override public function get spatialReference():SpatialReference
{
return new SpatialReference();
} override public function get tileInfo():com.esri.ags.layers.supportClasses.TileInfo
{
return _tileInfo;
} override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest
{
var s:String = "Galileo".substring(, (( * col + row) % )); var url:String ="";
if (this.MapStyle == "Vector")//获取矢量地图
{
url = "http://mt" + (col % ) + ".google.com/vt/lyrs=m@158000000&hl=zh-CN&gl=cn&" +
"x=" + col + "&" +
"y=" + row + "&" +
"z=" + level + "&" +
"s=" + s;
}
else if (this.MapStyle == "Terrain")//获取地形图
{
url = "http://mt" + (col % ) + ".google.cn/vt/lyrs=t@131,r@227000000&hl=zh-CN&gl=cn&" +
"x=" + col + "&" +
"y=" + row + "&" +
"z=" + level + "&" +
"s=" + s;
}
else if (this.MapStyle == "Image")//获取影像地图
{
url = "http://mt" + (col % ) + ".google.com/vt/lyrs=s&hl=en&gl=en&" +
"x=" + col + "&" +
"y=" + row + "&" +
"z=" + level + "&" +
"s=" + s;
}
else if (this.MapStyle == "POI")//获取道路等POI,和影像地图配合使用
{
url = "http://mt" + (col % ) + ".google.com/vt/imgtp=png32&lyrs=h@169000000&hl=zh-CN&gl=cn&" +
"x=" + col + "&" +
"y=" + row + "&" +
"z=" + level + "&" +
"s=" + s;
}
return new URLRequest(url);
}
public function set url(vals:String):void
{
this._baseURL = vals;
}
private function buildTileInfo():void
{
_tileInfo.height=;
_tileInfo.width=;
_tileInfo.origin=new MapPoint(-20037508.342787, 20037508.342787);
_tileInfo.spatialReference=new SpatialReference();
_tileInfo.lods = [
new LOD(, 156543.033928, 591657527.591555),
new LOD(, 78271.5169639999, 295828763.795777),
new LOD(, 39135.7584820001, 147914381.897889),
new LOD(, 19567.8792409999, 73957190.948944),
new LOD(, 9783.93962049996, 36978595.474472),
new LOD(, 4891.96981024998, 18489297.737236),
new LOD(, 2445.98490512499, 9244648.868618),
new LOD(, 1222.99245256249, 4622324.434309),
new LOD(, 611.49622628138, 2311162.217155),
new LOD(, 305.748113140558, 1155581.108577),
new LOD(, 152.874056570411, 577790.554289),
new LOD(, 76.4370282850732, 288895.277144),
new LOD(, 38.2185141425366, 144447.638572),
new LOD(, 19.1092570712683, 72223.819286),
new LOD(, 9.55462853563415, 36111.909643),
new LOD(, 4.77731426794937, 18055.954822),
new LOD(, 2.38865713397468, 9027.977411),
new LOD(, 1.19432856685505, 4513.988705),
new LOD(, 0.597164283559817, 2256.994353),
new LOD(, 0.298582141647617, 1128.497176)
];
} public function lon2Mercator(px:int):int
{
var x:int = px * 20037508.34 / ;
return x;
} public function lat2Mercator(py:int):int
{
var y:int;
y = Math.log(Math.tan(( + py) * Math.PI / )) / (Math.PI / );
y = y * 20037508.34 / ;
return y;
}
}
}
(2)引用方法
//加载google地图
var baseLayer:GoogleLayer = new GoogleLayer("Image")
baseMap.addLayer(baseLayer);
二 Flex加载百度地图作底图
(1)帮助类BaiduLayer.as
/*
* 根据输入的地图类型加载百度地图(by chenyuming)
*/ package Layers
{
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.TiledMapServiceLayer;
import com.esri.ags.layers.supportClasses.LOD;
import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest; import flashx.textLayout.formats.Float; public class BaiduLayer extends TiledMapServiceLayer
{
//成员变量
private var _tileInfo:TileInfo = new TileInfo();
private var _wkid:int = ;
private var cornerCoordinate:Number = 20037508.3427892;
private var _mapStyle:String = "Image";
private var _initialExtent:Extent; public function BaiduLayer(mapStyle:String)
{
this._mapStyle = mapStyle; super();
buildTileInfo(); // to create our hardcoded tileInfo
setLoaded(true); // Map will only use loaded layers
} // 全屏范围
override public function get fullExtent():Extent
{
return new Extent(-cornerCoordinate, -cornerCoordinate, cornerCoordinate, cornerCoordinate, new SpatialReference(_wkid));
} // 初始化范围 (左下角坐标,右上角坐标)
override public function get initialExtent():Extent
{
return new Extent(5916776.8, 1877209.3, 19242502.6, 7620381.8, new SpatialReference());
} // 空间参考系
override public function get spatialReference():SpatialReference
{
return new SpatialReference(_wkid);
} override public function get tileInfo():TileInfo
{
return _tileInfo;
} override protected function getTileURL(level:Number, row:Number, col:Number):URLRequest
{
var zoom:int = level - ;
var offsetX:int = Math.pow(, zoom) as int;
var offsetY:int = offsetX - ;
var numX:int = col - offsetX;
var numY:int = (-row) + offsetY; zoom = level + ;
var num:int = (col + row) % + ; var url:String = null;
if (_mapStyle == "Vector") //获取矢量地图
{
url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+ numY + ";z=" + zoom + ";v=013;type=web&fm=44";
}
else if (_mapStyle == "Image") //影像地图
{
url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+numY+";z="+zoom+";v=009;type=sate&fm=46";
}
else if (_mapStyle == "POI") //获取道路等POI,和影像地图配合使用
{
url = "http://q"+num+".baidu.com/it/u=x="+numX+";y="+numY+";z="+zoom+";v=013;type=trans&fm=47";
}
return new URLRequest(url);
} // 自定义方法,定义地图缩放等级
private function buildTileInfo():void
{
_tileInfo.height=;
_tileInfo.width=;
_tileInfo.origin=new MapPoint(-cornerCoordinate, cornerCoordinate);
_tileInfo.spatialReference=new SpatialReference(_wkid);
_tileInfo.lods = [
new LOD(, 156543.033928, 591657527.591555),
new LOD(, 78271.5169639999, 295828763.795777),
new LOD(, 39135.7584820001, 147914381.897889),
new LOD(, 19567.8792409999, 73957190.948944),
new LOD(, 9783.93962049996, 36978595.474472),
new LOD(, 4891.96981024998, 18489297.737236),
new LOD(, 2445.98490512499, 9244648.868618),
new LOD(, 1222.99245256249, 4622324.434309),
new LOD(, 611.49622628138, 2311162.217155),
new LOD(, 305.748113140558, 1155581.108577),
new LOD(, 152.874056570411, 577790.554289),
new LOD(, 76.4370282850732, 288895.277144),
new LOD(, 38.2185141425366, 144447.638572),
new LOD(, 19.1092570712683, 72223.819286),
new LOD(, 9.55462853563415, 36111.909643),
new LOD(, 4.77731426794937, 18055.954822),
new LOD(, 2.38865713397468, 9027.977411),
new LOD(, 1.19432856685505, 4513.988705),
new LOD(, 0.597164283559817, 2256.994353),
new LOD(, 0.298582141647617, 1128.497176)
];
}
}
}
(2)引用方法
//加载百度地图
var baseLayer:BaiduLayer = new BaiduLayer("Image");
var POILayer:BaiduLayer = new BaiduLayer("POI");
baseMap.addLayer(baseLayer);
baseMap.addLayer(POILayer);
三 Flex加载天地图作底图(经纬度投影)
(1)帮助类TianDiTuLayer.as
/*
* 根据输入的地图类型加载天地图(by chenyuming)
* 注意:投影类型为经纬度
*/ package Layers
{
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.ArcGISDynamicMapServiceLayer;
import com.esri.ags.layers.TiledMapServiceLayer;
import com.esri.ags.layers.supportClasses.LOD;
import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest;
import flash.sampler.Sample; public class TianDiTuLayer extends TiledMapServiceLayer
{
private var _tileInfo:TileInfo;
private var _baseURL:String;
private var _baseURLs:Array;
private var _initExtent:String;
private var _serviceMode:String;
private var _imageFormat:String;
private var _layerId:String;
private var _tileMatrixSetId:String;
private var _mapStyle:String=""; public function TianDiTuLayer(mapStyle:String,serviceMode:String = "KVP",imageFormat:String = "tiles")
{
this._mapStyle=mapStyle;//设置地图类型
this._serviceMode = serviceMode;
this._imageFormat = imageFormat; super();
this._tileInfo = new TileInfo();
this._initExtent = null;
this.buildTileInfo();
setLoaded(true);
} override public function get fullExtent() : Extent
{
return new Extent(-, -, , , new SpatialReference());
} public function set initExtent(initextent:String):void
{
this._initExtent = initextent;
} override public function get initialExtent() :Extent
{
if (this._initExtent == null)
return new Extent(70.0, 15.0, 135.0, 55.0, new SpatialReference());
var coors:Array = this._initExtent.split(",");
return new Extent(Number(coors[]), Number(coors[]), Number(coors[]) ,Number(coors[]), new SpatialReference());
} override public function get spatialReference() : SpatialReference
{
return new SpatialReference();
} override public function get tileInfo() : TileInfo
{
return this._tileInfo;
} //根据不同地图类型加载不同WMTS服务
override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest
{
if(this._mapStyle == "ImageBaseMap")//获取影像地图(底图)
{
_baseURL = "http://t0.tianditu.com/img_c/wmts";
_layerId = "img";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "ImageCNNote")//获取影像地图(中文注记)
{
_baseURL = "http://t0.tianditu.com/cia_c/wmts";
_layerId = "cia";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "ImageENNote")//获取影像地图(英文注记)
{
_baseURL = "http://t0.tianditu.com/eia_c/wmts";
_layerId = "eia";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "TerrainBaseMap")//获取地形图(底图)
{
_baseURL = "http://t0.tianditu.com/ter_c/wmts";
_layerId = "ter";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "TerrainCNNote")//获取地形图(中文注记)
{
_baseURL = "http://t0.tianditu.com/cta_c/wmts";
_layerId = "cta";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "TerrainENNote")//获取地形图(英文注记)
{
//暂无
}
else if(this._mapStyle == "VectorBaseMap")//获取矢量图(底图)
{
_baseURL = "http://t0.tianditu.com/vec_c/wmts";
_layerId = "vec";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "VectorCNNote")//获取矢量图(中文注记)
{
_baseURL = "http://t0.tianditu.com/cva_c/wmts";
_layerId = "cva";
_tileMatrixSetId = "c";
}
else if(this._mapStyle == "VectorENNote")//获取矢量图(英文注记)
{
_baseURL = "http://t0.tianditu.com/eva_c/wmts";
_layerId = "eva";
_tileMatrixSetId = "c";
} var urlRequest:String=_baseURL+ "/wmts?Service=WMTS&Request=GetTile&Version=1.0.0" +
"&Style=Default&Format="+_imageFormat+"&serviceMode="+_serviceMode+"&layer="+_layerId +
"&TileMatrixSet="+_tileMatrixSetId+"&TileMatrix=" + level + "&TileRow=" + row + "&TileCol=" + col; return new URLRequest(urlRequest);
} //切片信息
private function buildTileInfo() : void
{
this._tileInfo.height = ;
this._tileInfo.width = ;
this._tileInfo.origin = new MapPoint(-, );
this._tileInfo.spatialReference = new SpatialReference();
this._tileInfo.lods = new Array();
this._tileInfo.lods = [
new LOD( , 0.703125, 2.958293554545656E8),
new LOD( , 0.351563, 1.479146777272828E8),
new LOD( , 0.175781, 7.39573388636414E7),
new LOD( , 0.0878906, 3.69786694318207E7),
new LOD( , 0.0439453, 1.848933471591035E7),
new LOD( , 0.0219727, 9244667.357955175),
new LOD( , 0.0109863, 4622333.678977588),
new LOD( , 0.00549316, 2311166.839488794),
new LOD( , 0.00274658, 1155583.419744397),
new LOD(, 0.00137329, 577791.7098721985),
new LOD(, 0.000686646, 288895.85493609926),
new LOD(, 0.000343323, 144447.92746804963),
new LOD(, 0.000171661, 72223.96373402482),
new LOD(, 8.58307e-005, 36111.98186701241),
new LOD(, 4.29153e-005, 18055.990933506204),
new LOD(, 2.14577e-005, 9027.995466753102),
new LOD(, 1.07289e-005, 4513.997733376551),
new LOD(, 5.36445e-006, 2256.998866688275)
];
}
}
}
(2)引用方法
//加载天地图(经纬度投影)
var baseLayer:TianDiTuLayer = new TianDiTuLayer("VectorBaseMap")//天地图底图
var CNNoteLayer:TianDiTuLayer = new TianDiTuLayer("VectorCNNote");//中文注记
baseMap.addLayer(baseLayer);
baseMap.addLayer(CNNoteLayer);
四 Flex加载天地图作底图(球面墨卡托投影)
(1)帮助类TianDiTuLayerMercator.as
/*
* 根据输入的地图类型加载天地图(by chenyuming)
* 注意:投影类型为球形墨卡托
*/ package Layers
{
import com.esri.ags.SpatialReference;
import com.esri.ags.geometry.Extent;
import com.esri.ags.geometry.MapPoint;
import com.esri.ags.layers.ArcGISDynamicMapServiceLayer;
import com.esri.ags.layers.TiledMapServiceLayer;
import com.esri.ags.layers.supportClasses.LOD;
import com.esri.ags.layers.supportClasses.TileInfo; import flash.net.URLRequest;
import flash.sampler.Sample; public class TianDiTuLayerMercator extends TiledMapServiceLayer
{
private var _tileInfo:TileInfo;
private var _baseURL:String;
private var _baseURLs:Array;
private var _initExtent:String;
private var _layerId:String;
private var _mapStyle:String=""; public function TianDiTuLayerMercator(mapStyle:String)
{
this._mapStyle=mapStyle;//设置地图类型 super();
this._tileInfo = new TileInfo();
this._initExtent = null;
this.buildTileInfo();
setLoaded(true);
} override public function get fullExtent() : Extent
{
return new Extent(-20037508.3427892,-20037508.3427892, 20037508.3427892,20037508.3427892, new SpatialReference());
} public function set initExtent(initextent:String):void
{
this._initExtent = initextent;
} override public function get initialExtent() :Extent
{
if (this._initExtent == null)
return new Extent(8397502.3, 2660018.1, 15003861.0, 5509344.0, new SpatialReference());
var coors:Array = this._initExtent.split(",");
return new Extent(Number(coors[]), Number(coors[]), Number(coors[]) ,Number(coors[]), new SpatialReference());
} override public function get spatialReference() : SpatialReference
{
return new SpatialReference();
} override public function get tileInfo() : TileInfo
{
return this._tileInfo;
} //根据不同地图类型加载不同WMTS服务
override protected function getTileURL(level:Number, row:Number, col:Number) : URLRequest
{
_baseURL = "http://t0.tianditu.com"; if(this._mapStyle == "ImageBaseMap")//获取影像地图(底图)
{
_layerId = "img_w";
}
else if(this._mapStyle == "ImageCNNote")//获取影像地图(中文注记)
{
_layerId = "cia_w";
}
else if(this._mapStyle == "ImageENNote")//获取影像地图(英文注记)
{
_layerId = "eia_w";
}
else if(this._mapStyle == "TerrainBaseMap")//获取地形图(底图)
{
_layerId = "ter_w";
}
else if(this._mapStyle == "TerrainCNNote")//获取地形图(中文注记)
{
_layerId = "cta_w";
}
else if(this._mapStyle == "TerrainENNote")//获取地形图(英文注记)
{
//暂无
}
else if(this._mapStyle == "VectorBaseMap")//获取矢量图(底图)
{
_layerId = "vec_w";
}
else if(this._mapStyle == "VectorCNNote")//获取矢量图(中文注记)
{
_layerId = "cva_w";
}
else if(this._mapStyle == "VectorENNote")//获取矢量图(英文注记)
{
_layerId = "eva_w";
} var urlRequest:String =_baseURL+"/DataServer?T="+_layerId+"&x="+col+"&y="+row+"&l="+level; return new URLRequest(urlRequest);
} //切片信息
private function buildTileInfo() : void
{
this._tileInfo.height = ;
this._tileInfo.width = ;
this._tileInfo.origin = new MapPoint(-20037508.3427892,20037508.3427892,new SpatialReference());
this._tileInfo.spatialReference = new SpatialReference();
this._tileInfo.lods = new Array();
this._tileInfo.lods = [
new LOD( ,77664.761018562790697674418604651, 2.958293554545656E8),
new LOD( ,38832.380509281395348837209302326, 1.479146777272828E8),
new LOD( ,19416.190254640697674418604651163, 7.39573388636414E7),
new LOD( ,9708.0951273203488372093023255814, 3.69786694318207E7),
new LOD( ,4854.0475636601744186046511627907, 1.848933471591035E7),
new LOD( ,2427.0237818300872093023255813953, 9244667.357955175),
new LOD( ,1213.5118909150436046511627906977, 4622333.678977588),
new LOD( ,606.75594545752180232558139534884, 2311166.839488794),
new LOD( ,303.37797272876090116279069767442, 1155583.419744397),
new LOD(,151.68898636438045058139534883721, 577791.7098721985),
new LOD(, 75.844493182190225290697674418605, 288895.85493609926),
new LOD(, 37.922246591095112645348837209302, 144447.92746804963),
new LOD(, 18.961123295547556322674418604651, 72223.96373402482),
new LOD(, 9.4805616477737781613372093023256, 36111.98186701241),
new LOD(, 4.7402808238868890806686046511628, 18055.990933506204),
new LOD(, 2.3701404119434445403343023255814, 9027.995466753102),
new LOD(, 1.1850702059717222701671511627907, 4513.997733376551),
new LOD(, 0.59253510298586113508357558139535, 2256.998866688275)
];
}
}
}
(2)引用方法
//加载天地图(球面墨卡托投影)
var baseLayer:TianDiTuLayerMercator = new TianDiTuLayerMercator("ImageBaseMap")//天地图底图
var CNNoteLayer:TianDiTuLayerMercator = new TianDiTuLayerMercator("ImageCNNote");//中文注记
baseMap.addLayer(baseLayer);
baseMap.addLayer(CNNoteLayer);
五 天地图WMTS服务
Flex加载google地图、百度地图以及天地图作底图的更多相关文章
- ARCGIS FLEX API加载google地图、百度地图、天地图(转)
http://www.cnblogs.com/chenyuming507950417/ Flex加载google地图.百度地图以及天地图作底图 一 Flex加载Google地图作底图 (1)帮助类G ...
- ArcGIS API for Silverlight 加载google地图
原文:ArcGIS API for Silverlight 加载google地图 using System; using System.Net; using System.Windows; using ...
- ArcGIS API for Silverlight加载google地图(后续篇)
原文:ArcGIS API for Silverlight加载google地图(后续篇) 之前在博客中(http://blog.csdn.net/taomanman/article/details/8 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(13)、图层扩展方式加载Google地图
1.前言 http://mt2.google.cn/vt/lyrs=m@225000000&hl=zh-CN&gl=cn&x=420&y=193&z=9& ...
- ArcGIS API for Silverlight中加载Google地形图(瓦片图)
原文:ArcGIS API for Silverlight中加载Google地形图(瓦片图) 在做水利.气象.土地等行业中,若能使用到Google的地形图那是再合适不过了,下面就介绍如何在ArcGIS ...
- Flex 加载pdf
如果想要在flex加载pdf,虽然pdf格式是开源的,但是自己去解析太麻烦了,pdf还要分页之类的,现在网上各种文档上传可以在线看很多都是pdf,当然也有word,excel之类,其实很多都是转了sw ...
- Flex 加载 wmf,svg
最近做gis系统发现要在flex加载wmf图片.我记得flash的loader只能是png,gis,jpg.wmf格式居然是window出的,flash居然不支持我也是醉了,没办法,只能后台转格式,首 ...
- 使用WebGL加载Google街景图
我们要实现的功能比较简单:首先通过坐标定位.我的位置.地址搜索等方式,调用google map api获取地址信息.然后根据地址信息中的全景信息获取当前缩放级别的全景信息.最终把这些全景信息通过Web ...
- Flex 加载dwg
之前写的几种格式不是专门gis格式,这次来说说加载dwg.首先dwg格式不同于dxf格式,虽然autocad都能加载进去,真正用的比较多的是dwg格式,反正测绘,国土规划部门都是,吐槽下,然而auto ...
随机推荐
- uboot make xxx_config与make的过程分析
一直很想捋清楚make xxx_config,make 的执行过程. 在uboot的makefile中有这样的话: %_config::unconfig @$(MKCONFIG) -A $(@:_co ...
- android 定时器AlarmManager
1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...
- SQLite简单使用说明
System.Data.SQLite.dll下载地址 http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki 选择. ...
- git 添加ssh的方法 push免登陆
在github.com上 建立了一个小项目,可是在每次push 的时候,都要输入用户名和密码,很是麻烦 原因是使用了https方式 push 在termail里边 输入 git remote -v ...
- Smart210学习记录-----SD/MMC/SDIO驱动
转自:http://jingpin.jikexueyuan.com/article/23369.html http://blog.csdn.net/evilcode/article/details/7 ...
- C# 多线程同步和线程通信
多线程通信 1. 当线程之间有先后的依赖关系时,属于线程之间的通信问题.也就是后一个线程要等待别的一个或多个线程全部完成,才能开始下一步的工作.可以使用: WaitHandle Class WaitH ...
- Socket编程基础——面向连接TCP
WinSock是Windows环境下的网络编程接口,它最初是基于Unix环境下的BSD Socket,是一个与网络协议无关的编程接口.WinSock包含两个主要版本,即WinSock1和WinSock ...
- [原创] 用两个stack实现queue的功能
#include <iostream> #include <stack> using namespace std; class doubleStackToQueue { pri ...
- python 简介
python简史 python的创始人:Guido van Rossum Guido 在1989年12月时,寻找一门“课余”编程项目来打发圣诞节前后的时间.Guido决定为当时正构思的一个新的脚本语言 ...
- zend guard6的使用
1.生成key edit->preferences->license Keys->generate 2.新建product license文件 3.新建Zend Guard项目文件 ...