适用于 Windows Vista 的虚拟地球幻灯片小工具






4.20/5 (13投票s)
Mobilis Immobile 是一个适用于 Windows Vista 的虚拟地球幻灯片小工具。
引言
"Mobilis Immobile" 是一个用于 Windows Vista 的虚拟地球幻灯片小工具。有了 "Mobilis Immobile"(简称 "Mobim"),您无需离开屏幕,就可以游览世界各地您最喜欢的地方!顺便说一句,"Mobilis Immobile" 这个句子在拉丁语中的意思正是 "旅行而不移动"。
安装和使用小工具
要安装 Mobim 小工具,只需将其从侧边栏或桌面的小工具库中拖出即可。
停靠或浮动
Mobim 可以显示三种不同的视图
- 停靠:停靠视图是指小工具在侧边栏中显示。
- 浮动:浮动视图是指小工具在桌面上显示。此视图比停靠视图更大,可让您查看当前幻灯片的完整描述。
- 弹出:弹出视图结合了停靠和浮动视图。在此视图中,停靠视图和浮动视图并排显示。当您单击停靠视图时,会显示弹出视图。
以下是每种视图的屏幕截图
|  |  | 
| 停靠视图 | 浮动视图 | 
|  | |
| 弹出视图 | |
设置
Mobim 小工具拥有增强的设置窗口。见下文

每个选项的含义如下
- URL:URL 是当前显示的提要或集合的网址。
- 粘贴:粘贴按钮会将 Windows 剪贴板的内容粘贴到 URL 字段中。
- 显示间隔:选择每张幻灯片之间的经过时间。
- 默认视图:默认地图样式(航空、街道、混合或鸟瞰),当幻灯片描述中未设置值时使用。
- 默认缩放:当幻灯片描述中未设置值时使用的默认缩放级别。
- 随机播放:选中时随机播放幻灯片,未选中时按提要或集合的顺序显示。
- 显示标记:选中时为每个项目显示一个图钉。
- 显示描述:选中时显示每张幻灯片的标题(或较大视图中的标题和描述)。
选择您的提要
Mobim 小工具可以显示两种类型的幻灯片
- 实时集合:可以使用 Microsoft 的 Live 网站创建实时集合,或者在 Collections.live.com 上选择。要显示个人集合或共享集合,只需将集合的完整地址粘贴到设置窗口的 URL 字段中。URL 地址应类似于 "http://maps.live.com/...&cid=..." 或 "http://local.live.com/...&cid=..."。

- GeoRSS 提要:GeoRSS 是标准 XML RSS 格式的扩展。实际上,GeoRSS 只是在标准 RSS 项目中添加了两个 XML 元素:<geo:lat> 和 <geo:long>。当然,<geo:lat> 用于纬度坐标,<geo:long> 用于经度坐标。下面是一个 GeoRSS 提要的示例。要在 Mobim 中使用 GeoRSS,只需粘贴托管 GeoRSS 提要的地址或网站。它可以是本地或远程网站,也可以是静态 XML 或动态生成的 XML 的链接。
 <?xml version="1.0" encoding="utf-8" ?> 
 <rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
 xmlns:georss="http://www.georss.org/georss" xmlns:gml=
   "http://www.opengis.net/gml">
 <channel>
 <title>Perpignan</title> 
 <link /> 
 <description>Famous place in Perpignan, France</description> 
  <item>
  <title>Castillet</title> 
  <description>[mode@o][zoom@1][sceneid@10995771]Castillet Castle built 
    in 1368.</description> 
  <geo:lat>42.70069438573455</geo:lat> 
  <geo:long>2.893863466593684</geo:long> 
  </item>
  <item>
  <title>Dames de France</title> 
  <description>[mode@o][zoom@1][sceneid@10995756]</description> 
  <geo:lat>42.6985786771285</geo:lat> 
  <geo:long>2.888311216990704</geo:long> 
  </item>
 </channel>
 </rss>
播放幻灯片
当您将 Mobim 拖到侧边栏/桌面上时,或者退出设置窗口并确认您的选择时,幻灯片就会开始播放。
一个控制条可以帮助您更精确地控制幻灯片。当您将鼠标光标移到小工具上时,控制条会自动出现。使用暂停按钮,您可以暂停/恢复幻灯片;使用下一张或上一张按钮,您可以移动到下一张或上一张幻灯片。

请注意,控制条在弹出视图中也可以使用。在这种情况下,较小视图的控制条可以同时控制较大和较小的视图。
自定义视图
Mobim 允许您使用通用设置或为每张幻灯片使用设置来定制幻灯片。要做到这一点,您需要使用特殊模式将设置编码在您的集合或提要的描述字段中。
可以使用三个参数
- [mode@X] :设置此幻灯片的视图。X 的允许值为:a 表示航空,r 表示街道,h 表示混合,o 表示鸟瞰。
- [zoom@N] :设置此幻灯片的缩放级别。允许值为 1 到 19。
- [sceneid@X] :设置此幻灯片的 sceneID。此值由虚拟地球内部用于标识场景的摄影。此值仅在鸟瞰视图中有意义。

请注意,在详细视图的描述字段中,参数值不会显示出来。
工作原理
当然,Mobim 依赖于虚拟地球的功能。虚拟地球可以加载 GeoRSS 或实时集合并将其用作图钉。不幸的是,虚拟地球将所有项目视为一个图层,您无法控制图层首次显示的方式。此外,您也无法访问项目的全部特性。因此,对于 Mobim,我从头重写了 GeoRSS 提要和实时集合的加载。以下是方法:
加载幻灯片
Mobim 的核心是构建一个集合,其中每个项目都是一张幻灯片及其特征。这个过程在启动时通过一个名为loadItems 的函数中的 AJAX 调用来完成。以下是该函数的一个摘录function loadItems(callback) 
{
    ...
    collection = new Array();
    ...
    
    afterLoad = callback;
    httpreq = new ActiveXObject("Microsoft.XMLHTTP");
    httpreq.open("GET", urltocall, true);
    httpreq.onreadystatechange = processRequest;
    httpreq.send(null);
}
当请求完成时,Mobim 必须处理响应以填充 collection 数组。处理过程取决于集合的类型:GeoRSS 或实时集合。这正是 processRequest 函数所做的。参见此处
function processRequest() 
{
    // only if req shows "loaded"
    if (httpreq.readyState == 4) 
    {
        // only if "OK"
        if (httpreq.status == 200) 
        {
            if (islive)
                processLiveCollection();
            else
                processGeoRSS(); 
            if (collection.length > 0) 
            {
                if (shuffle)
                    shuffleCollection();
                afterLoad();
            } 
            else
                System.Debug.outputString("no feed available\n"); 
        } 
        else 
        {
            System.Debug.outputString("error reading feed\n");
        }
    }
}
今天,要判断一个 URL 是实时集合还是 GeoRSS 提要,我们只需对 URL 的前缀进行测试(实时集合以 "http://maps.live.com/" 或 "http://local.live.com/" 开头)。
处理 GeoRSS 提要
处理 GeoRSS 非常简单,它只是一个 XML 文本,Mobim 会逐个节点进行解析。
function processGeoRSS() 
{
    var items = httpreq.responseXML.getElementsByTagName("item");
    var title_string;
    var description_string;
    var link_string;
    var point;
    for (var i = 0; i < items.length; i++) 
    {
        title_string = getElementText("title", items[i]);
        description_string = getElementText("description", items[i]);
        link_string = getElementText("link", items[i]);
        point = findPoint(items[i]);
        if (point != null)
            collection.push(new MobimRSSItem(title_string, 
                description_string, link_string, point));
    }
}
处理实时集合
坏消息:目前没有 API 可以获取实时集合。所以我需要使用一个技巧来查找如何检索和解析它。使用 IE HTTP Analyzer,我发现虚拟地球在检索实时集合图层时,内部使用此 HTTP 调用http://maps.live.com/UserCollections.aspx?action=RetrieveAllAnnotations&cid=
    XXXX&mkt==en&mapguid=1111111111111&contextid=2222222222222其中 XXXX 是初始 URL 中的集合 ID,而 1111111111111 和 2222222222222 是上下文数字,在这里无关紧要。作为对此调用的响应,Live 服务器返回一个 JSON 响应,如下所示VEMap._GetMapFromGUID('1111111111111')._lm.RetrieveAllAnnotationsCallback(
    [
     new VE_Annotation('D4783333CD255A28!116','Statue of Liberty, New York, 
          USA','http://www.nps.gov/stli/','','01/01/0001 00:00:00',
          'Located on a 12 acre island, the Statue of Liberty ...[zoom@16]',
          '40.6892944466626','-74.0444612503052','0','0','',
          '01/01/0001 00:00:00',[]),
     new VE_Annotation('D4783333CD255A28!117','Key West, Florida, USA',
          'http://en.wikipedia.org/wiki/Key_West,_Florida','',
          '01/01/0001 00:00:00','Key West is a city and an island...',
          '24.5553986767496','-81.7980194091797','0','1','',
          '01/01/0001 00:00:00',[]),
     ...
    ],'2222222222222');
嵌入数组的每个项目都正是我所需要的:实时集合中所有项目的特征。经过一些替换和调用 eval 后,现在可以轻松检索到一个数组
function processLiveCollection() 
{
    var response = httpreq.responseText; 
    // Compute start
    var start = response.indexOf("([new VE_Annotation(");
    if (start == -1) 
        return;
    // Compute end
    var end = response.indexOf(")],'2222222222222');", start);
    if (end == -1)
        return;
    // Extract from start to end
    var strarray = response.substring(start+1, end+2);
    strarray = strarray.replace(/VE_Annotation/g, "MobimLiveMarker");
    
    // Eval collection
    collection = eval(strarray);
}
创建您自己的幻灯片
随时创建您自己的实时集合或 GeoRSS 提要,并使用 Mobim 查看。一个找到世界各地有趣地方的好起点是 Bird's Eye Tourist 网站。另外,关注 Virtual Earth blog Team,那里列出了许多虚拟地球的技巧和窍门。以下是我最喜欢的几个集合(将 URL 拖放到 URL 字段中并使用推荐的设置)
- 世界各地的著名景点(Mobim 中的默认 URL)
- NFL 体育场(使用鸟瞰视图和缩放 1)
- 美国游乐园(使用鸟瞰视图和缩放 1)
- 拉斯维加斯之旅(使用鸟瞰视图和缩放 1)
- 纽约市(使用航空视图和缩放 16)
请随时就错误、问题或意见与我联系。


