2015-07-10 1 views
0

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

<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> 
+0

После того, как вы ответили, что ответы на них пока что не работают. То, что, как представляется, это воссоздание зрителя при каждом нажатии кнопки. Таким образом, хотя он может загружать файл kml, новый экземпляр средства просмотра уничтожает его. Как мне получить его только для создания зрителя один раз, а затем загрузить файл только при нажатии кнопки? – jdixon

ответ

0

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

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

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

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

Смежные вопросы