2

该变量正在获取正确的数据,但在 href 参数中不起作用。我添加了一个带有变量的按钮,以便在浏览器中查看它。如果我输入已注释的硬代码值,它就可以工作。

<?php
@session_start();
$idcoord = $_GET['search_fd0'];
$kmlpath = "http://nonprasa.t15.org/kml/PR" . $idcoord . "/doc.kml";
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>Google Earth API Sample</title>
<script src="http://www.google.com/jsapi?key=ABQIAAAAuPsJpk3MBtDpJ4G8cqBnjRRaGTYH6UMl8mADNa0YKuWNNa8VNxQCzVBXTx2DYyXGsTOxpWhvIG7Djw" type="text/javascript"></script>
<script type="text/javascript">
      function addSampleButton(caption, clickHandler) {
    var btn = document.createElement('input');
    btn.type = 'button';
    btn.value = caption;

    if (btn.attachEvent)
      btn.attachEvent('onclick', clickHandler);
    else
      btn.addEventListener('click', clickHandler, false);

    // add the button to the Sample UI
    document.getElementById('sample-ui').appendChild(btn);

  }

  function addSampleUIHtml(html) {
    document.getElementById('sample-ui').innerHTML += html;
  }
</script>
<script type="text/javascript">
var ge;

google.load("earth", "1");

function init() {
//  var kmlfile = '\"<?php echo $kmlpath; ?>\"';
 var kmlfile = '<?php echo $kmlpath;?>'; 
  google.earth.createInstance('map3d', initCallback, failureCallback);


  addSampleButton(kmlfile, buttonClick);
}

function initCallback(instance) {
  ge = instance;
  ge.getWindow().setVisibility(true);

  // add a navigation control
  ge.getNavigationControl().setVisibility(ge.VISIBILITY_AUTO);

  // add some layers
  ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true);
  ge.getLayerRoot().enableLayerById(ge.LAYER_ROADS, true);


  createNetworkLink();

  document.getElementById('installed-plugin-version').innerHTML =
    ge.getPluginVersion().toString();

}

function failureCallback(errorCode) {
}

function createNetworkLink() {
  var networkLink = ge.createNetworkLink("");
  networkLink.setDescription("NetworkLink open to fetched content");
  networkLink.setName("Open NetworkLink");
  networkLink.setFlyToView(true);

  // create a Link object
  var link = ge.createLink("");
 //link.setHref("http://nonprasa.t15.org/kml/PR0302013/doc.kml);

  link.setHref (kmlfile);


  // attach the Link to the NetworkLink
  networkLink.setLink(link);

  // add the NetworkLink feature to Earth
  ge.getFeatures().appendChild(networkLink);

    // look at the placemark we created
  var la = ge.createLookAt('');
  la.set(18, -67,
    0, // altitude
ge.ALTITUDE_RELATIVE_TO_GROUND,
0, // heading
0, // straight-down tilt
1500 // range (inverse of zoom)
);
  ge.getView().setAbstractView(la);

}

function buttonClick() {
// Get the current view.
var lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND);

// Zoom out to x times the current range.
lookAt.setRange(lookAt.getRange() * 5.0);

// Update the view in Google Earth.
ge.getView().setAbstractView(lookAt);
}

</script>
  </head>
  <body onload="init()" style="font-family: arial, sans-serif; font-size: 8px; border: 0;">
    <div id="sample-ui"></div> 
    <div id="map3d" style="width: 1200px; height: 800px;"></div>
    <br>
    <div>Installed Plugin Version: <span id="installed-plugin-version" style="font-weight: bold;">Loading...</span></div>
  </body>

4

1 回答 1

0

javascript 变量kmlfile是函数的本地变量,因此当您尝试在函数init中使用它时,它始终是未定义的。createNetworkLink

为了突出我的意思,请看以下内容,为了清楚起见,我删除了其他代码......

function init() {
  var kmlfile = '<?php echo $kmlpath;?>'; // kmlfile defined here
}

function createNetworkLink() {
  link.setHref(kmlfile); // kmlfile is undefined here
  alert(kmlfile); // this would have told you as much...
}

要修复它,您可以创建kmlfile一个全局变量,以便它在createNetworkLink函数范围内可用。为此,只需在init方法外部创建变量,就像使用ge变量一样。

同样,为了清楚起见,请查看以下删除了其他代码的代码。

<script type="text/javascript">
var ge;
var kmlfile; // kmlfile defined here

function init() {
  kmlfile = '<?php echo $kmlpath;?>'; // set the variable 
}

function createNetworkLink() {
  link.setHref(kmlfile); // kmlfile is now available here
}
</script>
于 2013-02-21T01:17:56.887 回答