XML辅助Flash互动电子地图标注地名

xml

  在上一讲中我们介绍了制作一个最为简单的Flash电子地图的基本步骤(《Flash互动电子地图制作手册——入门实例》)。但对于制作数据量较大的大型城市地图,直接在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>

   注:其中<n>与</n>项为地名名称;<x>122</x>与<y>63</y>项为地名标注的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 <childItems.length; 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文件。

  发布后,效果如下:

调用外部XML文件加注地名

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

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

  下一讲中我们将学习如何在调试环境下辅助编辑标注XML文件的方法。

时间: 2024-11-03 00:59:57

XML辅助Flash互动电子地图标注地名的相关文章

Flash互动电子地图制作手册——入门实例

目前网上涌现出众多电子地图,这些电子地图操作方便,具备数据查询.距离测量甚至精确定位等传统地图所不具备的强大功能. 现有的电子地图多数用Java开发的,功能强大,操作便捷.比较典型就是Mapbar(mapbar.com)与Mapabc(mapabc.com).灵图(lingtu.com). 此外,还有一部分是用Flash制作的电子地图,比如网格深圳(wanggesz.com).九江电子地图(jjmap.cn).江门(五邑)地图(5emap.com).衡阳电子地图(hyemap.com)等. Ja

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

xml 对于制作数据量较大的大型城市地图,直接在flash环境中手动创建地名标注内容不仅工作量巨大,而且维护更新非常不便,这样就必须借助外部数据文件来辅助完成其中的地名标注工作.当然,调用数据文件的方法很多,我们这里介绍一种较为简单的,即在flash中调用外部xml数据文件. 既然涉及xml文件,就有必要对xml有一个初步的了解. 一.初识xml 1.什么是xml? xml 是英文extensible markup language的缩写,中文意为可扩展的标记语言.xml是一套定义语义标记的规则

用trace函数实现互动地图后台快速标注地名

函数|后台 在上一讲中我们介绍了通过调用外部XML文件实现了地名的显示.在这一讲中,我们讲解如何通过Flash ActionScript代码的trace函数实现互动地图后台快速标注地名的工作. 了解trace函数 首先我们了解一下trace函数: 我们可以使用 Flash 调试播放器捕获来自 trace() 函数的输出并显示结果.在测试 SWF 文件时,使用此语句可在"输出"面板中记录编程注释或显示消息.使用 expression 参数可以检查是否存在某种条件,或在"输出&q

用Flash做电子地图实例讲解

关于flash,大家或多或少都有所了解.比如上网,到处都能看到flash的存在.flash的应用也是五花八门.今天我们讲的是用flash做电子地图. 现在在网上随处都能找到电子地图,其中大部分都是java来开发的,其实用flash也可以做电子地图.且界面还比较漂亮.现在网上已经有用flash做的电子地图了.且呈发展趋势.象"中国电子地图网"里面的地图就是用flash做的.还有九江,五邑等地图也都是用flash来完成的. 现在我们就来学习用flash做电子地图,首先要了解电子地图的功能,

PHP 生成的XML以FLASH获取为乱码终极解决

最不怕跟匪夷所思的问题作斗争了,看谁牛鼻.都好久没在编码上遇到过障碍了,今天居然又遇到个小茶包--PHP生成的XML,以FLASH获取却为乱码.   经过探索最终解决.记录之,顺便也记录了通用解决方案.如果你也遇到XML<->FLASH乱码情况,可以速查: 1.确信XML绝对没有问题的情况: 首先,flash读取xml出现乱码涉及到System.useCodepage这个静态属性属性 官方描述:"A Boolean value that tells Flash Player whic

调用xml进行flash动态饼状图的制作

本文详细的介绍了FLASH饼状图的制作方法,手把手教会您. 效果有参考一下国外的饼图,不过他的代码,注释等我也看不懂,英文不懂,所以我就写个中文的好了.大家完全可以根据我的代码改出更多的效果来.编程水平有限,大家谅解一下,不过能正常运行. http://www.yes028.com/amu/ok.swf 增加了xml配置文件,可以直接修改xml文件以达到直接使用的目的. 默认数据来源为piedata.xml但是可以在页面中修改这个数据来源.如下:<object classid="clsid

PHP 生成的XML以FLASH获取为乱码终极解决_php技巧

经过探索最终解决.记录之,顺便也记录了通用解决方案.如果你也遇到XML<->FLASH乱码情况,可以速查: 1.确信XML绝对没有问题的情况: 首先,flash读取xml出现乱码涉及到System.useCodepage这个静态属性属性 官方描述:"A Boolean value that tells Flash Player which code page to use to interpret external text files."默认为false. 倘若我们使用U

Flash+XML实现电子地图查询及定位功能

xml 上一讲,我们实现了电子地图中如何在线标注地名功能(参阅<Flash+ASP实现电子互动地图在线标注功能>),本例我们一讲中我们学习实现按地名名称查询及定位功能. 本例要实现的功能分成"查询"和"定位"两部分,查询功能通过调用XML文件的数据一一比对实现.定位功能通过将地图进行适当的缩放和移动,将被查询到的地名显示在窗口的中央位置来实现. 制作步骤: 制作如图所示的界面: 图1 查询功能的界面 用input_txt动态文本框接收输入的地名名称.用载

Flash处理外部XML文档数据

xml|数据 准备: 首先你得有台电脑.其次是要装上Windows系统和Flash8. XML基础: 既然是处理XML文档.就要先来了解下XML文档.下面是我所了解的,有些是在Flash中用不到的.XML扩展标记语言(Extensible Markup Language)是SGML(Structured Generalized Markup Language)的子集.XML是由World Wide Web Consortium(W3C)的XML工作组定义的. 下面开始了解XML的结构: XML是