2013-05-09 2 views
0

Привет, Stack Overflow people !!Изменение метки метки метки KML с помощью JavaScript

Я честно не знаю, есть ли способ сделать это, но я надеюсь, что есть, так как альтернатива еще сложнее, и я не уверен, как это сделать. На данный момент у меня есть плагин Google Планета Земля, работающий на странице с некоторыми другими элементами управления. На странице предполагается показать график с задержкой и данными для шума для модема, а также сетью с тоннами дополнительной информации, чтобы помочь моему интернет-провайдеру немного улучшить ситуацию, когда дело доходит до проблем с модемом.

Вопрос, который у меня есть: есть ли способ в JavaScript изменить цвет значка Google Earth без использования KML?

Я знаю, что вы можете сделать что-то подобное в KML

<Style id="normalPlacemark"> 
    <IconStyle> 
    <color>ffffff00</color> 
    <scale>5</scale> 
    <Icon> 
     <href>http://maps.google.com/mapfiles/kml/pushpin/wht-pushpin.png</href> 
    </Icon> 
    </IconStyle> 
</Style> 

Но у меня были проблемы добавляя его в нужное место в общем XML с помощью C# или AddKMLFromString() в JavaScript (с которым я действительно незнакома), чтобы получить страницу, чтобы узнать ее.

Вот измененный код плагин я использую в данный момент:

<script type="text/javascript" src="https://www.google.com/jsapi"></script> 
<script type="text/javascript"> 
    var ge; 
    google.load("earth", "1"); 

    //Create an instance of the Earth 
    function init() { 
     google.earth.createInstance('gmap', initCallback, failureCallback); 
    } 

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

     //URL for KML file which is taken directly from Google 
     //The KML in question is Google's giant file for weather data 
     var href = 'aurlwherewetherdatalives.kml'; 

     //Use Google's fetch KML method to get the weather KML file and add it to our plugin's instance 
     google.earth.fetchKml(ge, href, function (kmlObject) { 
      if (kmlObject) { 
       ge.getFeatures().appendChild(kmlObject); 
      } 
      if (kmlObject.getAbstractView() !== null) 
       ge.getView().setAbstractView(kmlObject.getAbstractView()); 
     }); 

     //Turn on Country Borders, States, and Cities 
     ge.getLayerRoot().enableLayerById(ge.LAYER_BORDERS, true); 

     //By default, remoteExists uses True where JavaScript wants true 
     var jsRemoteExists = <%= remoteExists.ToString().ToLower() %>; 

     //If the remote exists, create a placemark and camera at its location using the 
     //the latitude and longitude variables retreived in the c# 
     if (jsRemoteExists) 
      { 
       //Variables have been created 
       var lat = <%= CSHARPLat %>; 
       var lon = <%= CSHARPLong %>; 



       ge.getWindow().setVisibility(true); 

       // Create the placemark and add it to Earth. 
       var placemark = ge.createPlacemark(''); 

       // Set the placemark's location. 
       var point = ge.createPoint(''); 
       point.setLatitude(lat); 
       point.setLongitude(lon); 
       placemark.setGeometry(point); 

       // Add the placemark to Earth. 
       ge.getFeatures().appendChild(placemark); 

       var la = ge.createLookAt(''); 
       la.setLatitude(lat); 
       la.setLongitude(lon); 
       la.setRange(150000); 
       ge.getView().setAbstractView(la); 
     } 

    } 
    function failureCallback(errorCode) { 
    } 

    function addKmlFromString(kmlString) { 
     var kmlObject = ge.parseKml(kmlString); 

     ge.getFeatures().appendChild(kmlObject); 
    } 


    window.onload = init(); 
</script> 

было бы лучше, чтобы найти добавить выше KML в строку в C# код позади, и найти подходящее место, чтобы просто добавить стиль? Я изливал API Google и пытаюсь добавить его в разных местах, и большую часть времени он просто ломается и не показывает данные о погоде или метку. Конечной целью является изменение цвета метки в зависимости от того, является ли пульт номинальным, тревожным или предупреждающим. Я посмотрел здесь и на Google ответы, но ничего не похоже на JS, и я не могу добавить KML правильно, чтобы изменить цвет меток. У кого-нибудь есть идеи?

ответ

0

Я в конце концов понял это самостоятельно. Надеюсь, любой, кто ищет ответ, найдет его здесь.

Я видел много вещей, предлагающих замену изображений для разных цветов на основе стилей, но не смог найти нигде, где описано, как это сделать. Причина в том, что JavaScript скрыт в середине нигде. API Google может быть ... не очень удобным для пользователей. Таким образом, поиск возможен лучше, не так ли? Надеюсь, это поможет кому-то.

В C# У меня есть переключатель заявление со ссылками (абсолютные пути, так как местные жители не хотят работать) к месту, где я получил изображения, сохраненные и передать его в JavaScript:

var statusURL = '<%= CSHARPstatusURL %>'; 

чуть позже, возможно, придется настроить расположение, чтобы не скрыть любые другие слои, как у меня, так как я генерации KML динамически, вы хотите, эти удобные маленькие строки:

 // Define a custom icon. 
     var icon = ge.createIcon(''); 
     icon.setHref(statusURL); 

     var style = ge.createStyle(''); //create a new style 
     style.getIconStyle().setIcon(icon); //apply the icon to the style 
     style.getIconStyle().setScale(1.5); //set the icon's size 
     placemark.setStyleSelector(style); //apply the style to the placemark 

Вот, что будет позволяют создавать стиль значков, оригинальный способ, которым я надеялся сделать это. Создайте себе некоторые изображения и измените насыщенность цвета в GIMP или что-то еще, и вам хорошо идти. Ура!

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