联盟:48%
33917
部落: 52%
38049
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVP 卡德加 2005-4-26 2010-12-24 1955 2812 1 : 144
PVP 风行者 2005-4-26 2010-12-24 1020 3498 1 : 343
PVP 地狱咆哮 2005-4-26 2010-12-24 31 2768 1 : 8929
PVP 火焰之树 2005-4-26 2010-12-24 375 3358 1 : 895
PVE 艾森娜 2005-4-26 2010-12-24 1443 51 1 : 004
PVP 埃苏雷格 2005-4-26 2010-12-24 2626 416 1 : 016
PVP 暗影之月 2005-4-26 2010-12-24 2712 2269 1 : 084
PVP 地狱之石 2005-4-26 2010-12-24 1304 1974 1 : 151
PVP 阿克蒙德 2005-4-26 2010-12-24 1211 3534 1 : 292
PVP 埃加洛尔 2005-4-26 2010-12-24 1251 1780 1 : 142
PVP 弗塞雷迦 2005-4-26 2010-12-24 1273 2175 1 : 171
PVP 阿迦玛甘 2005-4-26 2010-12-24 3421 200 1 : 006
PVP 毁灭之锤 2005-4-26 2010-12-24 397 2105 1 : 53
PVP 风暴之怒 2005-4-26 2010-12-24 2138 2675 1 : 125
PVP 奥拉基尔 2005-4-26 2010-12-24 2550 1760 1 : 069
PVP 达斯雷玛 2005-4-26 2010-12-24 1371 1817 1 : 133
PVP 艾萨拉 2005-4-26 2010-12-24 2356 786 1 : 033
PVP 戈古纳斯 2005-4-26 2010-12-24 2566 27 1 : 001
PVP 爱斯特纳 2005-4-26 2010-12-24 1767 1183 1 : 067
PVP 冰霜之刃 2005-4-26 2010-12-24 2150 2861 1 : 133
国服 二区4组 服务器列表
联盟:50%
33581
部落: 50%
34682
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVE 轻风之语 2005-4-26 2010-12-24 2070 43 1 : 002
PVE 月光林地 2005-4-26 2010-12-24 3689 228 1 : 006
PVP 闪电之刃 2005-4-26 2010-12-24 1433 3243 1 : 226
PVP 梅尔加尼 2005-4-26 2010-12-24 1788 2484 1 : 139
PVP 玛法里奥 2005-4-26 2010-12-24 2892 772 1 : 027
PVP 夏维安 2005-4-26 2010-12-24 1852 2373 1 : 128
PVP 石爪峰 2005-4-26 2010-12-24 2267 3214 1 : 142
PVP 屠魔山谷 2005-4-26 2010-12-24 1416 2391 1 : 169
PVP 海加尔 2005-4-26 2010-12-24 127 3750 1 : 2953
PVP 耐普图隆 2005-4-26 2010-12-24 705 2545 1 : 361
PVP 伊利丹 2005-4-26 2010-12-24 1481 3255 1 : 22
PVE 塞纳里奥 2005-4-26 2010-12-24 1532 213 1 : 014
PVP 战歌 2005-4-26 2010-12-24 73 4964 1 : 68
PVP 拉文凯斯 2005-4-26 2010-12-24 1792 1251 1 : 07
PVP 麦维影歌 2005-4-26 2010-12-24 2644 484 1 : 018
PVE 月神殿 2005-4-26 2010-12-24 2237 471 1 : 021
PVP 主宰之剑 2005-4-26 2010-12-24 2432 2657 1 : 109
PVE 梦境之树 2005-4-26 2010-12-24 1731 101 1 : 006
PVE 泰兰德 2005-4-26 2010-12-24 1420 243 1 : 017
国服 六区11组 服务器列表 进入该战场组讨论区
联盟:41%
30158
部落: 59%
43681
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVP 血羽 2010-12-24 59 3470 1 : 5881
PVP 安纳塞隆 2010-12-24 1412 2017 1 : 143
PVP 巴纳扎尔 2010-12-24 1165 1400 1 : 12
PVP 阿努巴拉克 2010-12-24 1238 439 1 : 035
PVP 龙骨平原 2006-3-16 2010-12-24 2176 2445 1 : 112
PVP 德拉诺 2006-3-16 2010-12-24 2396 2029 1 : 085
PVP 燃烧军团 2010-12-24 27 2533 1 : 9381
PVP 克洛玛古斯 2010-12-24 3202 1743 1 : 054
PVP 阿纳克洛斯 2006-4-8 2010-12-24 2302 2672 1 : 116
PVP 安其拉 2010-12-24 1006 3043 1 : 302
PVP 破碎岭 2010-12-24 1772 1775 1 : 1
PVP 卡拉赞 2006-6-13 2010-12-24 1486 3149 1 : 212
PVP 黑手军团 2010-12-24 33 1910 1 : 5788
PVP 黑翼之巢 2006-4-26 2010-12-24 501 3749 1 : 748
PVP 桑德兰 2006-4-26 2010-12-24 2815 1962 1 : 07
PVP 熔火之心 2006-6-13 2010-12-24 2230 2729 1 : 122
PVP 阿拉希 2010-12-24 2002 2866 1 : 143
PVP 克苏恩 2010-12-24 1112 1669 1 : 15
PVE 瓦里玛萨斯 2010-12-24 1895 100 1 : 005
PVP 雷霆之怒 2006-4-8 2010-12-24 1329 1981 1 : 149
国服 六区12组 服务器列表 进入该战场组讨论区
联盟:45%
31936
部落: 55%
39933
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVP 无尽之海 2006-6-20 2010-12-24 2547 2872 1 : 113
PVP 海克泰尔 2010-12-24 1586 1439 1 : 091
PVP 古拉巴什 2010-12-24 304 1331 1 : 438
PVE 海达希亚 2006-4-29 2010-12-24 2484 264 1 : 011
PVP 库尔提拉斯 2010-12-24 2225 1045 1 : 047
PVP 瓦拉斯塔兹 2006-4-8 2010-12-24 1123 2090 1 : 186
PVP 莱索恩 2006-6-20 2010-12-24 1706 2869 1 : 168
PVP 奈法利安 2010-12-24 49 3500 1 : 7143
PVP 拉文霍德 2010-12-24 2359 795 1 : 034
PVP 永恒之井 2006-4-29 2010-12-24 3092 2204 1 : 071
PVP 洛丹伦 2010-12-24 1596 3682 1 : 231
PVP 纳克萨玛斯 2006-5-30 2010-12-24 1244 3388 1 : 272
PVP 格瑞姆巴托 2010-12-24 1758 1871 1 : 106
PVP 森金 2010-12-24 305 3170 1 : 1039
PVP 范达尔鹿盔 2010-12-24 2693 46 1 : 002
PVP 泰拉尔 2010-12-24 2839 29 1 : 001
PVP 哈卡 2010-12-24 83 3379 1 : 4071
PVP 萨菲隆 2006-5-30 2010-12-24 2064 2857 1 : 138
PVP 奎尔萨拉斯 2010-12-24 40 3051 1 : 7628
PVP 拉贾克斯 2010-12-24 1839 51 1 : 003
国服 九区17组 服务器列表 进入该战场组讨论区
联盟:37%
16277
部落: 63%
27727
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVP 麦姆 2010-8-31 2010-12-24 820 2566 1 : 313
PVP 黑暗之门 2008-5-9 2010-12-24 52 2983 1 : 5737
PVP 格鲁尔 2008-9-5 2010-12-24 985 2233 1 : 227
PVP 戴索姆 2008-12-12 2010-12-24 131 87 1 : 066
PVP 死亡熔炉 2008-4-8 2010-12-24 1493 3384 1 : 227
PVP 军团要塞 2008-8-5 2010-12-24 3681 137 1 : 004
PVP 血槌 2008-4-15 2010-12-24 18 1066 1 : 5922
PVP 刀塔 2009-4-21 2010-12-24 213 541 1 : 254
PVP 鲜血熔炉 2008-4-4 2010-12-24 300 3759 1 : 1253
PVP 迪门修斯 2008-10-28 2010-12-24 260 930 1 : 358
PVP 火焰之地 2008-5-27 2010-12-24 50 839 1 : 1678
PVE 艾露恩 2010-8-31 2010-12-24 1431 2078 1 : 145
PVP 盘牙 2009-3-3 2010-12-24 69 151 1 : 219
PVP 凤凰之神 2008-4-4 2010-12-24 1554 3628 1 : 233
PVP 深渊之喉 2008-4-4 2010-12-24 31 3308 1 : 10671
PVP 阿古斯 2008-4-4 2010-12-24 5189 37 1 : 001
国服 九区18组 服务器列表 进入该战场组讨论区
联盟:41%
19538
部落: 59%
28244
类型 服务器名 开服日期 更新时间 联盟 部落 A:H (比例)
PVP 破碎大厅 2008-6-3 2010-12-24 60 1648 1 : 2747
PVP 祖阿曼 2008-8-26 2010-12-24 3134 1705 1 : 054
PVE 翡翠梦境 2008-4-4 2010-12-24 3057 1377 1 : 045
PVP 范克里夫 2008-4-29 2010-12-24 492 2470 1 : 502
PVP 雷德 2008-4-4 2010-12-24 22 1988 1 : 9036
PVP 风暴要塞 2008-12-2 2010-12-24 100 296 1 : 296
PVP 摩摩尔 2008-4-4 2010-12-24 1741 2905 1 : 167
PVP 试炼之环 2008-4-4 2010-12-24 1687 2840 1 : 168
PVP 希雷诺斯 2008-4-8 2010-12-24 1787 3064 1 : 171
PVP 玛克扎尔 2010-6-15 2010-12-24 164 609 1 : 371
PVP 瓦丝琪 2010-11-23 2010-12-24 1223 3039 1 : 248
PVP 太阳之井 2008-6-20 2010-12-24 1974 2900 1 : 147
PVP 蒸汽地窟 2010-4-20 2010-12-24 86 547 1 : 636
PVP 提克迪奥斯 2009-1-16 2010-12-24 110 450 1 : 409
PVP 穆戈尔 2010-8-31 2010-12-24 784 1935 1 : 247
PVP 希奈丝特拉 2009-3-17 2010-12-24 163 444 1 : 272
PVP 塞泰克 2008-4-21 2010-12-24 2954 27 1 : 001Mapinfo是美国Mapinfo公司1986年推出的桌面地图信息系统,至今已从最初的Mapinfo for Dos 10 发展到了Mapinfo Professional 60。 Mapinfo产品定位在桌面地图信息系统上,与Arc/Info等大型GIS系统相比,因Mapinfo图元数据不含拓扑结构,它的制图及空间分析能力相对较弱,但对大众化的PC桌面数据可视及信息地图化应用来说,Mapinfo小巧玲珑,易学易用,价位较低,是一个优选GIS产品。Mapinfo提供了自己的二次开发平台,用户可以在平台上开发各自的GIS应用。二次开发方法归结起来有三种,它们是基于MapBasic的开发、基于OLE自动化的开发及利用MapX控件的开发。从早期的MapBasic到目前的MapX45,Mapinfo上的GIS系统开发变得越来越高效、简捷,下面介绍如何利用MapBasic、OLE自动化和MapX开发GIS应用系统。
一、利用MapBasic开发
MapBasic是Mapinfo自带的二次开发语言,它是一种类似Basic的解释性语言,利用MapBasic编程生成的mbx文件能在Mapinfo软件平台上运行,早期的Mapinfo二次开发都是基于MapBasic进行的。MapBasic学起来容易,用起来却束缚多多,无法实现较复杂的自定义功能,用它来建立用户界面也很麻烦,从现在角度看,MapBasic比较适合用于扩展Mapinfo功能。
二、利用OLE自动化开发
1 建立Mapinfo自动化对象
基于OLE自动化的开发就是编程人员通过标准化编程工具如VC、VB、Delphi、PB等建立自动化控制器,然后通过传送类似MapBasic语言的宏命令对Mapinfo进行 *** 作。实际上是将Mapinfo用作进程外服务器,它在后台输出OLE自动化对象,供控制器调用它的属性和方法。
OLE自动化开发的首要一步就是建立Mapinfo自动化对象,以Delphi为例(后面都是如此),你可设定一个Variant类型的全程变量代表OLE自动化对象,假设该变量名为olemapinfo,那么有:
oleMapinfo := CreateOleObject('MapinfoApplication')
一旦OLE自动化对象建立,也就是后台Mapinfo成功启动,你就可以使用该对象的Do方法向Mapinfo发送命令,如:
oleMapinfoDo('Set Next Document Parent' + WinHand + 'Style 1')
这一命令使Mapinfo窗口成为应用程序的子窗口,WinHand是地图窗口句柄,style 1 是没有边框的窗口类型。你还可以使用自动化对象的Eval方法返回MapBasic表达式的值,如下面语句返回当前所打开的表数:
TablesNum:=olemapinfoeval('NumTables()')
你也可以直接调用Mapinfo菜单或按钮命令对地图窗口进行 *** 作,如地图放大显示:
oleMapinfoRunMenuCommand(1705)
2 建立客户自动化对象触发CallBack
基于OLE自动化开发的难点在于所谓的CallBack,Mapinfo服务器对客户程序地图窗口的反应叫CallBack,假如你在地图窗口中移动地图目标,Mapinfo能返回信息告诉你地图目标当前的坐标位置,这就是CallBack功能。如果你想定制自己的地图 *** 作工具或菜单命令,你必须依靠CallBack。但是想捕获CallBack信息,你的客户程序必须具备接收CallBack信息的能力,为此需要在客户程序中定义自己的OLE自动化对象,如:
//定义界面
IMyCallback = interface(IDispatch)
['{2F4E1FA1-6BC7-11D4-9632-913682D1E638}']
function WindowContentsChanged(var WindowID: Integer):SCODE;safecall;
function SetStatusText(var StatusText: WideString): SCODE; safecall;
//定义界面实现
TMyCallback = class(TAutoObject, IMyCallback)
function SetStatusText(var StatusText: WideString): SCODE; safecall;
function WindowContentsChanged(var WindowID: Integer): SCODE;safecall;
其中WindowContentsChanged函数用于返回变化窗口的ID号,即当地图窗口变化时(如放大、缩小),让Mapinfo将地图窗口的ID号返回给客户程序; 另一个SetStatusText函数返回Mapinfo状态条变化信息。编程人员不能随意定义这些函数,因为只有在三种情况下Mapinfo服务器的CallBack才会被触发:(1)地图窗口发生变化,触发函数为WindowContentsChanged;(2)Mapinfo状态条信息改变,触发函数为SetStatusText;(3)用户选择自定义工具或菜单命令在地图窗口上 *** 作,如用户定制的画线工具,当用户在地图窗口画线时触发Mapinfo的CallBack返回线的坐标位置。
建立客户自动化对象后,调用MapInfo自动化对象的SetCallback方法将客户自己定义的自动化对象告诉Mapinfo,只要程序一运行,客户自动化对象就会自动在注册表中注册,然后就能收到CallBack信息了,如:
My:=MyCallBackCreate
oleMapInfoSetCallBack(My)
这里打一个比方我想会有助于理解上述机制,客户程序与Mapinfo之间的交互就像舞台指挥与木偶演员的交流,客户程序中的地图窗口或说Mapinfo子窗口只不过是一个牵线木偶,后台的Mapinfo才是真正 *** 纵木偶的演员,所以客户程序必须与后台Mapinfo建立正向、反向的联系机制,才能 *** 纵地图窗口中的图形目标。
三、利用MapX开发
1 掌握使用MapX
MapX是Mapinfo公司最新推出的ActiveX控件产品,目前已经发展到MapX45。由于MapX是基于Windows *** 作系统的标准控件,因而能支持VC、VB、Delphi、PB等标准化编程工具,使用时只需将控件装入开发环境,装入控件后,开发环境ActiveX工具条上会增加一个控件按钮Map,把它拖放到窗体上就可建立一个TMap类型的ActiveX地图对象Map,通过设置或访问该Map对象的属性、调用该Map对象的方法及事件,便能快捷地将地图 *** 作功能溶入到你的应用程序中。
MapX由一系列Object(对象)和Collection(对象集合)组成,Map是最基本的对象,每个Map由Layer(层)、Dataset(数据集)和Annotation(标注)这三个对象及对象集合(Layers、Datasets、Annotations)来定义, 其中Layer用于 *** 作地图图层,Dataset用于访问空间对象的属性数据,Annotation用于在地图上添加文本、符号等标注,掌握上述三个主要对象的特征后,再顺藤摸瓜掌握下一级对象的特征,如每个Layer又由Feature(点、线、面、文本图形目标)对象及对象集合(Features)定义,每个Dataset由Field(属性数据域)对象及对象集合(Fields)定义,这样很快就能把MapX学到手。
2 定义地图坐标系
在MapX开发中需要特别注意地图坐标系问题,MapX地图坐标系分为地图显示坐标系和内部计算坐标系,两者互为独立,在GIS应用开发中根据应用需要设置好这两种坐标系非常重要,因为坐标系一方面影响软件系统的内部坐标处理,另一方面影响地图的外观显示。Map对象的坐标系及投影通过CoordSys对象的Set方法定义:
Set(Type, [Datum], [Units], [OriginLongitude], [OriginLatitude],
[StandardParallelOne], [StandardParallelTwo], [Azimuth], [ScaleFactor],
[FalseEasting], [FalseNorthing], [Range], [Bounds], [AffineTransform])
其中主要参数:Type表示投影类型,Type为1时地图坐标以经纬度表示,后面都为可选参数,其中Datum为地球基准面;Units为坐标单位,如Units为7表示以米为单位;OriginLongitude、OriginLatitude分别为起始经度和纬度;StandardParallelOne、StandardParallelTwo为第一、第二标准纬线,该参数与地图投影相关。
通过设置Map对象的DisplayCoordSys和NumericCoordSys属性返回的CoordSys对象,就可设定地图显示坐标系和内部计算坐标系。举例如下:
procedure TMainDefineMapParam();
var
MapDatum: Variant;//地球基准面
begin
try
MapDatum := CreateOleObject('MapXDatum4'); //建立基准面对象
//定义北京54坐标系基准面
// (Ellipsoid, ShiftX, ShiftY, ShiftZ, RotateX, RotateY, RotateZ, ScaleAdjust, PrimeMeridian)
MapDatumset(3, 24, -123, -94, -002, 025, 013, 11, 0);
//定义北京54坐标系经纬度作为内部计算坐标系
Map1NumericCoordSysSet_(1, MapDatum);
//定义北京54坐标系30度标准纬线麦卡托投影作为显示坐标系,单位为米
Map1DisplayCoordSysSet_(26,MapDatum,7,0,0,30);
finally
VarClear(MapDatum);
end;
坐标系是GIS系统的基石,正确设置坐标系是系统成败的关键。
3 *** 纵地图对象
你可以简单地加载一个GeoSet文件,给Layers对象集合赋予具体的内容,随之在Map对象中就能看到地图显示,GeoSet文件类似MapInfo中的工作空间,MapX中带有Geoset文件的编辑器GeosetMangaterexe,用户可在编辑器中组合及设置图层,然后保存生成一个 gst 文件直接调入Map对象,这样可以节省时间。你也可以通过Layers对象的Add 或 Remove 方法添加或移走地图图层,如:
MaplayersAdd(FileName); // 添加图层,FileName为文件全路径名
MapLayersRemove(3); // 移走地图第三层
Layers对象由一组Layer对象组成,通过Layer对象的Features和Selection对象集合你可以 *** 纵和选择图层上的图形目标,如:
MapLayersItem(1)AddFeature(Newobj); //将新建对象Newobj添加到图层一
4 地图数据捆绑
数据捆绑是将不同来源的数据对应到地图层的过程,捆绑结果会产生一个Dataset对象,Dataset对象的集合组成Datasets Collection,它定义了Map对象的数据集属性。 你可以通过Datasets将不同来源的数据捆绑到地图上实现图文互动,或创建专题图,如下例ODBC Access数据的捆绑及专题分析:
procedure TMapFormODBC1Click(Sender: TObject);
var
param: ODBCQueryInfo ;
ds: Dataset; //定义数据集
Datafields: Fields; //定义数据域
begin
paramSqlQuery := 'select from China'; //选择Access数据库中的China表
paramDataSource := 'MapChina'; //ODBC 数据源名
paramConnectString := 'ODBC;'; //或是user = Pwd = , 定义ODBC连接
DatafieldsAdd('GEONAME','GEONAME', miAggregationAuto,miTypeString); //添加数据域GEONAME
DatafieldsAdd('POPU','POPU', miAggregationAuto,miTypeNumeric); //添加数据域POPU
//将Access数据捆绑到Mapinfo China表
ds := MapDatasetsAdd(miDataSetODBC, param, unassigned, unassigned, unassigned, 'CHINA', Datafields, unassigned);
dsThemesAdd(miThemeRanged, 'POPU', 'MyTheme'); //添加一个范围专题图
end;
5 建立客户定制工具
你还可以定制自己的地图 *** 作工具,下面通过定制一个名为Info的信息按钮工具简述方法步骤:
(1)定义客户工具常量
Const CUSTOM_INFO_TOOL = 1
(2)利用Map对象的CreateCustomTool方法定义客户工具,方法为:
CreateCustomTool (ToolNumber, Type, Cursor, [ShiftCursor] , [CtrlCursor], [InfoTips])
其中ToolNumber为工具号,即上面定义的常量;Type为工具类型;Cursor为光标形状,其他参数可选。
//定义Info工具为十字光标点触发工具
MapCreateCustomTool(CUSTOM_INFO_TOOL, miToolTypePoint, miCrossCursor, miArrowCursor, miArrowCursor, unassigned)
(3)在Map对象事件ToolUsed中编写工具的Handler( *** 作内容)
procedure TMainMapToolUsed(Sender: TObject; ToolNum: Smallint; X1, Y1, X2, Y2, Distance: Double;
Shift, Ctrl: WordBool; var EnableDefault: WordBool);
begin
Case ToolNumber of
CUSTOM_INFO_TOOL : //信息工具Info
try
……
end;
(4)定义信息按钮的Click事件
procedure TMainInfoClick(Sender: TObject);
begin
MapCurrentTool:=CUSTOM_INFO_TOOL;
end
四、小结
基于MapBasic的开发简单但受限制较多,比较适合Mapinfo功能扩展编程。而基于OLE自动化的开发比较繁琐,因为需要来回向后台的Mapinfo发送MapBasic字符串命令,所建立的应用程序运行速度也相对较慢,但这种开发方法能随心所欲制作出美观友好的界面,将地理 *** 作与非地理 *** 作溶为一体,并且能实现几乎100%的Mapinfo功能,这是目前的MapX45也不能比拟的。与传统GIS专业性开发环境相比,像MapX这类组件式GIS系统的出现可说是一种质的飞跃,它小巧灵活,开发简捷,价格便宜,以后会越来越大众化。 用MapX开发的GIS系统运行速度快,因为它不需要在Mapinfo软件平台上运行。但从目前MapX45看,MapX并没能实现所有的Mapinfo功能(据称95%以上),使用过程中发现其生成或编辑地图能力及地理分析能力不足,而且里面Bug也不少,当然随着今后新版的推出,MapX会越来越稳定、完美。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)