2011-12-19 2 views
0

Я создал несколько приложений Javascript для карт с использованием карт google, и я надеялся воссоздать их в OpenLayers. Я нахожу документацию на их сайте довольно запутанной и трудной для навигации. До сих пор, я могу загрузить в моем KML, используя следующий код:Ориентация и/или изменение области KML в OpenLayers

var map = new OpenLayers.Map({ 
      div: divName, 
      layers: [ 
       new OpenLayers.Layer.OSM(), 
       new OpenLayers.Layer.Vector("KML", { 
        strategies: [new OpenLayers.Strategy.Fixed()], 
        protocol: new OpenLayers.Protocol.HTTP({ 
         url: "data.kml", 
         format: new OpenLayers.Format.KML({ 
          extractStyles: true, 
          extractAttributes: true, 
          maxDepth: 4 
         }) 
        }) 
       }) 
      ], 
      zoom: 4 
     }); 
     map.setCenter(
      new OpenLayers.LonLat(-97, 38).transform(
       new OpenLayers.Projection("EPSG:4326"), 
       map.getProjectionObject() 
      ), 4 
     ); 

Что я хотел бы сделать, это быть в состоянии изменить или настроить таргетинг на отдельные регионы KML. Например, просто привязка события клика или изменение цвета фона в регионе.
Я огляделся и не могу найти хороший пример. У меня загружен jQuery, если это помогает. Любая помощь будет принята с благодарностью.

+1

Если вы новичок в OpenLayers, я бы посоветовал приобретать эту книгу - https://www.packtpub.com/openlayers-2 -1-javascript-web-mapping-library-beginners-guide/book –

ответ

1

Вы можете добавлять события в OpenLayers карты с помощью объекта OpenLayers.Control.SelectFeature

Чтобы изменить цвет фона объектов что-то, как это должно работать

var myVectorLayer = map.getLayersByName("KML")[0]; 

var highlightCtrl = new OpenLayers.Control.SelectFeature(myVectorLayer , { 
       hover: true, 
       highlightOnly: true, 
       renderIntent: "temporary"     
      }); 

    var selectCtrl = new OpenLayers.Control.SelectFeature(myVectorLayer , 
     {clickout: true} 
    ); 

    map.addControl(highlightCtrl); 
    map.addControl(selectCtrl); 

Уволить дальнейшие события/получить более подробную информацию от выбранных функций, которые можно использовать

myVectorLayer.events.on({ 
      "featureselected": function (e) { 
       alert(e.type + " - " + e.feature.id); 
    } 
}); 
+0

Я вижу, что вы определяете этот var здесь: var myVectorLayer = map.getLayersByName ("KML") [0]; , но я не вижу ссылки на них позже. Какова цель этого? – Munzilla

+0

Я изменил код, чтобы отразить это. – AlexC

+0

Хотя кажется, что myVectorLayer заполняется, предупреждение не происходит. Кроме того, я не совсем уверен, как бы я хотел изменить стиль в регионе KML. Будет ли этот код работать для отдельных регионов в KML или KML в целом? Спасибо. – Munzilla

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