1

在我的 KML 中,我有一个表格格式的地标集合。单击地标时,您可以看到当前正在加载的所有地标。每个地标都有一个如下所示的 id

<Placemark id="Location1">

当我在下面添加以下内容时,我可以飞到那个气球上,它会打开。但是在 API 中,此功能不起作用。它尝试执行以下操作http://www.something.com#ballooonFlyTo有没有办法让气球飞到 API 中的方法?

<a href="#Location1;balloonFlyto>Location 1</a>
4

1 回答 1

1

不是直接不,但是修改链接以调用支持您所需行为的自定义函数很容易。

此外,如果您通过 kml 加载功能而不是以编程方式创建它们,那么您需要提供 kmlFeature 的完整路径- 而不仅仅是它的 ID。IE

http://somesite.com/my.kml#Location1而不仅仅是#Location1-http://somesite.com/my.kml定义具有 id 的功能的文件在哪里Location1

如果您有类似以下 javascript 方法的内容,它应该可以按预期工作。也就是说,它将飞到视图并打开一个功能气球。(这是假设ge您的应用程序中的谷歌地球插件,并且地标已定义抽象视图)。

// Attempts to find and element by ID,
// fly to its abstract view and open a feature balloon for it.
var flyto = function(id) {
  var placemark = ge.getElementByUrl(id);
  if(!placemark) {
    return false;
  }

  if (placemark.getAbstractView()) {
   ge.getView().setAbstractView(placemark.getAbstractView());
  }

  var content = placemark.getBalloonHtmlUnsafe(); // or getDescription()
  var balloon = ge.createHtmlStringBalloon('');
  balloon.setFeature(placemark);
  balloon.setContentString(content);
  ge.setBalloon(balloon);

  return false;
};

然后,您可以简单地修改链接以调用flyto传递所需 id 的函数。例如

<a href="javascript:flyto('http://somesite.com/my.kml#Location1');">Location 1</a>

如果您的地标没有抽象视图,那么您必须执行一些操作,例如提取点几何图形,然后创建一个lookatcamera使用纬度和经度数据来设置视图。

编辑

我认为这个功能真的很酷,所以我整理了一个根本不需要对链接进行任何特殊标记的示例。单击包含命令的 kml 链接时,插件的行为就像完整的 Google 地球客户端一样。

这是一个 完整的工作示例

于 2013-12-15T01:45:22.490 回答