Цезий — добавить источник данных из события нажатия кнопки

Я новичок в Cesium (и JavaScript) и пытаюсь создать веб-страницу, на которой пользователь может выбрать файл KML, нажать кнопку загрузки и загрузить KML в средство просмотра Cesium. На данный момент я настроил тестовую страницу с жестко закодированным файлом, но когда я нажимаю кнопку, KML не загружается. Как мне это сделать? Вот мой код:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <!-- Tell IE to use the latest, best version (or Chrome Frame if pre-IE11). -->
  <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>
  <!-- Make the application on mobile take up the full browser screen and disable user scaling. -->
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
  <title>Map Demo of Cesium</title>
  <script type="text/javascript" src="../Build/Cesium/Cesium.js"></script>
  <style type="text/css">
      @import url(../Build/Cesium/Widgets/widgets.css);
      html, body, #cesiumContainer {
          width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
  </style>
<script type="text/javascript">
function load_file()
    cesiumContainer.viewer.dataSources.removeAll(); 
    cesiumContainer.viewer.dataSources.add(Cesium.KmlDataSource.load(../apps/SampleData/kml/MyData.kml'));          
</script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label">Select a file for viewing:</asp:Label>
        <br />
        <asp:DropDownList ID="DropDownList1" runat="server" Width="208px">
        </asp:DropDownList>
        <br />    
        <asp:Button ID="Button1" runat="server" Text="View" OnClientClick ="load_file()" />
        <br />
        <br />
    </div>
  <div id="cesiumContainer" ></div>
  <script type="text/javascript" >
    var viewer = new Cesium.Viewer('cesiumContainer', 
        {imageryProvider : new Cesium.ArcGisMapServerImageryProvider({
            url : '//server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer'
        }),

        baseLayerPicker : false, timeline : false, animation : false
    });
var layers = viewer.imageryLayers;
var blackMarble = layers.addImageryProvider(new Cesium.ArcGisMapServerImageryProvider({
        url : '//server.arcgisonline.com/ArcGIS/rest/services/reference/World_Boundaries_and_Places/MapServer'
}));    

        viewer.homeButton.viewModel.command();  

    viewer.camera.setView({position  : Cesium.Cartesian3.fromDegrees(10.00, 45.0, 4500000.0)});


  </script>    
    </form>
</body>
</html>

person jdixon    schedule 10.07.2015    source источник
comment
После того, как вы попробовали ответы, предоставленные до сих пор, это все еще не работает. То, что он делает, воссоздает средство просмотра каждый раз, когда нажимается кнопка. Таким образом, хотя он может загружать файл kml, новый экземпляр средства просмотра стирает его. Как заставить его создавать средство просмотра только один раз, а затем загружать файл только при нажатии кнопки?   -  person jdixon    schedule 16.07.2015


Ответы (2)


Посетите веб-сайт Cesium для разработчиков Google Планета Земля. пример загрузки KML звучит так, как будто это именно то, что вам нужно. .

person Mike LP    schedule 10.07.2015

Будьте осторожны, используя старые страницы ASP.NET с клиентским приложением, таким как Cesium. ASP.NET использует множество взаимодействий с сервером, которые потенциально могут перезагрузить страницу, в результате чего пользователь потеряет свое место в Cesium. ASP.NET устарел, его заменили RAZOR и MVC, поэтому, если вы только начинаете изучать различные веб-технологии Microsoft, вам следует начать с них.

Тем не менее, если вы хотите исправить приведенный выше пример, попробуйте следующее:

  • Исправьте отсутствующую кавычку в начале имени файла KML.
  • Переместите функцию load_file в самый низ, прямо перед концом последнего тега скрипта.
  • Удалите префикс cesiumContainer. из обеих ссылок viewer в функции load_file.

Перезагрузите страницу и нажмите F12, чтобы вызвать инструменты разработчика (Chrome, Firefox и IE11), а затем найдите оставшиеся ошибки на вкладке консоли.

person emackey    schedule 10.07.2015