在Google Earth API KML文件中搜索String Value placemarker?

时间:2013-04-11 04:43:20

标签: c# javascript kml google-earth google-earth-plugin

尝试为javascript创建Google Earth API插件的搜索框 我能够解析KMLFile并加载GE API,现在我必须通过KML加载的Placemarker名称嵌入搜索。

使用Lat& amp;长

var lookAt = ge.createLookAt('');
lookAt.set(point.y, point.x, 600, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 00, 0);
ge.getView().setAbstractView(lookAt);

LookAt是否有可能使用地标名称(字符串值)而不是使用LAT搜索,LONG?

1 个答案:

答案 0 :(得分:0)

是的,有几种方法可以执行此操作,具体取决于您的设置。

一种通用的方法是为每个地标提供一个唯一的ID,然后使用该ID来查看它。

例如,假设您有以下kml地标,并且您已从网址http://localhost/foo.kml

加载到api中
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Placemark id="myPlacemark">
    <name>Myplacemark</name>
    <Point>
      <coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
    </Point>
  </Placemark>
</kml>

然后您可以“查看”地标myPlacemark,就像这样。

var placemark = ge.getElementByUrl('http://localhost/foo.kml#myPlacemark');
var point = placemark.getGeometry();
var lookAt = ge.createLookAt('');
lookAt.set(point.getLatitude(), point.getLongitude(), 600, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 00, 0);
ge.getView().setAbstractView(lookAt);

可以创建一个简单的函数,这样您就可以简单地传入正确的ID来查看从具有ID的KML加载的任何点标记。

var myLookAt = function(id) {
  var placemark = ge.getElementByUrl(id);
  if('getGeometry' in placemark && 
    placemark.getGeometry().getType() == 'KmlPoint') {
    var point = placemark.getGeometry();
    var lookAt = ge.createLookAt('');
    lookAt.set(point.getLatitude(), point.getLongitude(), 600, ge.ALTITUDE_RELATIVE_TO_GROUND, 0, 00, 0);
    ge.getView().setAbstractView(lookAt);
  }
};

// useage
myLookAt('http://localhost/foo.kml#myPlacemark');

您显然可以更改myLookAt函数以查找lookAtcamera元素,或者处理其他类型的对象 - 例如多个几何图形等。