Javascript 访问点';s用于修改高度的地标信息

Javascript 访问点';s用于修改高度的地标信息,javascript,kml,google-earth,accessor,google-earth-plugin,Javascript,Kml,Google Earth,Accessor,Google Earth Plugin,我有一个使用GoogleEarthAPI的网站,我使用多个KML层来显示数据 随着用户的交互,有必要修改类似于地名的样式和名称的某些属性,以便更改地名显示信息 在某些情况下,我希望在地点标记的高度处修改点中包含的信息,即在KML处指定的几何体的信息。实际上,它是clampedToGround,我想将它修改为任何数字,以便位于其他元素的顶部 这是如何修改placemarks信息的示例: var pm = ge.getElementByUrl(UrlOfLayer#IdOfPlacemark); p

我有一个使用GoogleEarthAPI的网站,我使用多个KML层来显示数据

随着用户的交互,有必要修改类似于地名的样式和名称的某些属性,以便更改地名显示信息

在某些情况下,我希望在地点标记的
高度处修改
点中包含的信息,即在KML处指定的几何体的
信息。实际上,它是
clampedToGround
,我想将它修改为任何数字,以便位于其他元素的顶部

这是如何修改placemarks信息的示例:

var pm = ge.getElementByUrl(UrlOfLayer#IdOfPlacemark);
pm.setStyleUrl(UrlOfLayer#IdOfStyleMap);
pm.setName(NewName);
这是完美的工作和所有的变化都适用于没有任何问题。KML地标的结构如下所示:

<Placemark id="1">
   <name>Name</name>
   <visibility>1</visibility>
   <open>0</open>
   <Point>
      <extrude>1</extrude>
      <tessellate>1</tessellate>
      <altitude>clampedToGround</altitude>
      <coordinates>1,1,1</coordinates>
   </Point>
   <styleUrl>#style</styleUrl>
</Placemark>

名称
1.
0
1.
1.
攀爬
1,1,1
#风格
有了这个结构和通过
getElementByUrl
获得的Javascript中的Placemark,我可以通过
getName()
getVisibility()
等访问字段名称、可见性等。 但是,这不适用于点信息,因为点信息包含在placemark的
几何体
对象中

我可以使用
pm.getGeometry()
访问几何体信息,但在此之后,无法访问“点”,因为正如Google earth文档所说:

KmlGeometry对象是抽象对象,无法使用 直接的。它为所有衍生几何图形提供占位符对象 对象

查看一些使用点信息的示例,它仅用于创建点,然后将其包含在几何体中,但在我的示例中,我无法使用Javascript创建点,因为我无法获取坐标信息,新点将覆盖它


那么,有没有我找不到的访问者来实现这个目的呢?

文档在这一点上有点不清楚;也许应该说,
KmlGeometry
对象不能直接实例化。事实上,如果单击“所有成员列表”链接(最相关的方法继承自
KmlObject
),则
KmlGeometry
对象上有几种方法

所有不同的几何体类型都继承自
KmlGeometry
,但由于您知道此几何体是
KmlPoint
,因此可以将其视为
KmlPoint
(在其他语言中,您可能必须显式强制转换变量,但无论好坏,Javascript都更为宽容)。就你而言,你可以这样做

var point = pm.getGeometry();
point.setAltitude(newAltitudeValue);
point.setLatLng(...);
等等。你可以使用所有的

顺便说一句,如果您不知道几何体的特定类型(例如,如果几何体在单击事件中作为目标返回,并且可以是任何东西),则始终可以使用继承自
KmlObject
(在这种情况下,
pm.getGeometry().getType()
将返回
'KmlPoint'
)的
getType
来询问它,然后你可以采取行动。这不是一个完美的反射系统,但它可以工作

附录:您的示例KML包含该行

<altitude>clampedToGround</altitude>

然后,您通过
pm.getGeometry().setAltitude(…)
设置的任何高度都应该有效。

我会尝试并告诉您一些事情,如果有效,那将是完美的。这是一个很好的尝试。。。类似于我一开始尝试的东西,但不起作用。确实,它返回的是KmlPoint,但是当您尝试设置新高度时,它会给您一个错误,就像您无法访问属性一样。谢谢你的尝试,如果你发现一些新的东西,请告诉我。我更新了我的答案,以便在你的原始代码中捕捉altitudeMode问题。我应该更仔细地测试我的答案!现在可以了!谢谢你的解决方案,很难找到。
<altitudeMode>clampToGround</altitudeMode>
pm.getGeometry().setAltitudeMode(ge.ALTITUDE_RELATIVE_TO_GROUND);