分享
 
 
 

xml辅助flash电子地图标注地名

王朝other·作者佚名  2008-05-30
窄屏简体版  字體: |||超大  

对于制作数据量较大的大型城市地图,直接在flash环境中手动创建地名标注内容不仅工作量巨大,而且维护更新非常不便,这样就必须借助外部数据文件来辅助完成其中的地名标注工作。当然,调用数据文件的方法很多,我们这里介绍一种较为简单的,即在flash中调用外部xml数据文件。

既然涉及xml文件,就有必要对xml有一个初步的了解。

一、初识xml

1、什么是xml?

xml 是英文extensible markup language的缩写,中文意为可扩展的标记语言。xml是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。

2、xml文件式样

以下为一个xml文件结构,有些类似html语言:

<?xml version="1.0" encoding="utf-8" ?>

<countrydata>

<state id="range">

<data>0 - 33</data>

<color>fed976</color>

</state>

<state id="range">

<data>34 - 66</data>

<color>feb24c</color>

</state>

<state id="range">

<data>67 - 99</data>

<color>fd8d3c</color>

</state>

</countrydata>

二、flash调用xml文件的方法

flash中的actionscript2.0关于调用xml的全局函数与方法属性较多,以下只介绍本例中涉及的内容:

1、建立xml对象:

var myxml = new xml();

2、引用xml文件:

myxml.load("data.xml");

3、忽略空格:

myxml.ignorewhite = true;/默认的为false

4、处理xml对象的load(xml.load 方法)

public load(url:string) : boolean

从指定的 url 中加载 xml 文档,并使用下载的 xml 数据替换指定 xml 对象的内容。该 url 是相对 url,并使用 http 进行调用。加载过程是异步的;它不会在执行 load() 方法后立即结束。

执行 load() 方法时,xml 对象的 loaded 属性被设置为 false。在 xml 数据下载完毕后,loaded 属性被设置为 true,并调用 onload 事件处理函数。直到 xml 数据完全下载后,才开始分析。如果该 xml 对象以前包含任何 xml 树,它们将被放弃。

您可以定义一个在调用 xml 对象的 onload 事件处理函数时执行的自定义函数。

5、处理xml对象的onload(xml.onload 处理函数)

onload = function(success:boolean) {}

收到来自服务器的 xml 文档时由 flash player 调用。如果成功接收了 xml 文档,则 success 参数为 true。如果未收到该文档,或从服务器接收响应时出现错误,则 success 参数为 false。默认情况下,此方法的实现不处于活动状态。若要覆盖默认实现,必须指定一个包含自定义动作的函数。

三、实例制作

在初步了解了以上xml的基础后,我们就可以紧接上一例的步骤完成地名标注工作:

1、创建用于地名标注的xml文件:

首先我们要创建一个包含关于需要标注的地名信息文件,即包含地名称、地名坐标等基本信息。本例中我们只创建一个示范性的地名信息数据文件,其格式为xml文件格式,内容如下:

<?xml version="1.0" encoding="iso-8859-1" ?>

<map>

<r><n>大清湖</n><x>37</x><y>264</y></r>

<r><n>环</n><x>154</x><y>67</y></r>

<r><n>城</n><x>164</x><y>67</y></r>

<r><n>西</n><x>175</x><y>69</y></r>

<r><n>路</n><x>184</x><y>72</y></r>

<r><n>环</n><x>289</x><y>101</y></r>

<r><n>城</n><x>297</x><y>107</y></r>

<r><n>东</n><x>309</x><y>114</y></r>

<r><n>路</n><x>321</x><y>117</y></r>

<r><n>中</n><x>231</x><y>95</y></r>

<r><n>心</n><x>232</x><y>114</y></r>

<r><n>南</n><x>233</x><y>135</y></r>

<r><n>路</n><x>234</x><y>158</y></r>

<r><n>中</n><x>229</x><y>18</y></r>

<r><n>心</n><x>233</x><y>34</y></r>

<r><n>北</n><x>235</x><y>47</y></r>

<r><n>路</n><x>234</x><y>58</y></r>

<r><n>★某某市政府</n><x>239</x><y>88</y></r>

<r><n>●城中影剧院</n><x>271</x><y>84</y></r>

<r><n>●新华书店</n><x>171</x><y>60</y></r>

<r><n>城</n><x>92</x><y>87</y></r>

<r><n>环</n><x>104</x><y>98</y></r>

<r><n>一</n><x>121</x><y>110</y></r>

<r><n>路</n><x>134</x><y>124</y></r>

<r><n>大清湖旅游区</n><x>36</x><y>223</y></r>

<r><n>▲百丈峰</n><x>124</x><y>30</y></r>

<r><n>◎东城新村</n><x>340</x><y>158</y></r>

<r><n>◎南城新村</n><x>287</x><y>189</y></r>

<r><n>※新颀花园</n><x>292</x><y>70</y></r>

<r><n>人民公园</n><x>144</x><y>42</y></r>

<r><n>动物园</n><x>140</x><y>105</y></r>

<r><n>东城广场</n><x>342</x><y>73</y></r>

<r><n>※百天花园</n><x>92</x><y>55</y></r>

<r><n>※花峰小区</n><x>346</x><y>189</y></r>

<r><n>◎高名新村</n><x>375</x><y>146</y></r>

<r><n>※风台花苑</n><x>210</x><y>185</y></r>

<r><n>▌城中大厦</n><x>219</x><y>111</y></r>

<r><n>▌佳好大楼</n><x>185</x><y>109</y></r>

<r><n>▌天启工业大厦</n><x>122</x><y>63</y></r>

<r><n>▌晨光商贸大厦</n><x>265</x><y>62</y></r>

<r><n>▌华侨电子大厦</n><x>209</x><y>84</y></r>

<r><n>▌佳好商城</n><x>196</x><y>49</y></r>

</map>

注:其中与项为地名名称;122与63项为地名标注的x轴与y轴坐标,至于其坐标值的得来将在以后的实例中详细讲解。

2、flash调用的代码

打开flash professional,在上一讲中的地图底图所在层的时间轴上,再补入以下actionscript代码:

var road_xml:xml = new xml(); /建立xml对象

road_xml.ignorewhite = true; /忽略空格:

road_xml.onload = function (success:boolean):void {

if (success) { /如果调用成功

var childitems:array = road_xml.firstchild.childnodes; /定义数据组

var f=0; /定义mc深度的变量

for (var i:number = 0; i var x=childitems[i].childnodes[1].childnodes[0].nodevalue /获取x坐标值

var y=childitems[i].childnodes[2].childnodes[0].nodevalue /获取y坐标值

_root.map_mc.bzmap_mc.createtextfield("road"+i, f, x, y, 1, 1); /创建地名文本

p=eval("road"+i); /将文本框变量的名称赋给p

p.autosize = "left"; /指定文本的对齐方式

p.text = childitems[i].childnodes[0].childnodes[0].nodevalue ; /获取地名名称

f=f+1; /mc深度自动加1

}

}

}

road_xml.load("road.xml"); /调用xml文件:

注:其中xml文件的路径使用了相对路径,此路径是xml文件相对于调用flash文件的网页文件的路径,即在本例中,调用flash地图文件的网页文件必须与road.xml文件置于相同的路径下,否则flash将无法调用xml文件。

这样,flash文件只提供电子地图的基本构架,由外部的road.xml文件提供地名标注信息,如对地名进行删减、增加、纠错等操作时,只需要对xml文件进行相应的更改就可以了,而flash文件不需要做任何的改动。这样就大大减小了维护、更新的工作量。

以上就是flash调用外部xml文件的基本步骤;当然我们在本例中调用是已经编辑好的xml数据文件,而获取海量地名在地图上的坐标值也同样可以在flash环境中获得。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有