2012-06-15 5 views
0

Я работаю с OpenLayers и загружаю пару файлов GEOJson, которые отлично работают. Теперь я хочу иметь возможность выбирать отдельные компоненты файла GEOJson. Например, если у меня есть несколько объектов (несколько полигонов), когда я активирую выбор наведения, ничего не происходит.Независимый выбор функций в Openlayers с использованием формата GEOJson

Я добавил селектор парения в этом примере http://openlayers.org/dev/examples/geojson.html

я могу фактически перетащить элементы независимо друг от друга, но не могу выбрать их. Я предполагаю, что это из-за проекции, которую я использую. Любые идеи, как это исправить?

Cheers!

function init(){ 

var options = { 
    projection: new OpenLayers.Projection("EPSG:900913"), 
    displayProjection: new OpenLayers.Projection("EPSG:4326"), 
    units: "m", 
    numZoomLevels: 18, 
}; 

map = new OpenLayers.Map('map', options); 
var mapnik = new OpenLayers.Layer.OSM({layers: 'basic'});   
map.addLayer(mapnik); 

map.addControl(new OpenLayers.Control.MousePosition()); 

var lon = 12.18; 
var lat = 53.81; 
var lonLat = new OpenLayers.LonLat(lon,lat).transform(map.displayProjection, map.projection); 

var mapcent = new OpenLayers.LonLat(lon, lat).transform(map.displayProjection, map.projection); 
zoom = 5.5; 
map.setCenter(mapcent, zoom); 
document.getElementById('noneToggle').checked = true; 

var proj = new OpenLayers.Projection("EPSG:4326"); 

var file = []; 
file[0] = "geojson/nuts3.geojson"; 

var style = []; 

i=0; 
while(i<file.length){ 
    style[i] = new OpenLayers.StyleMap({ 
     pointRadius: 2, 
     strokeColor: 'red', 
     strokeWidth: 1, 
     strokeOpacity: 1, 
     fillColor: 'red', 
     fillOpacity: 0.2 
    }); 

    var layer_name = "layer_" + i; 
    vectorLayer[i] = new OpenLayers.Layer.Vector(layer_name, { 
     styleMap: style[i], 
     projection: map.displayProjection, 
     preFeatureInsert: function(feature){ 
     feature.geometry.transform(proj, map.getProjectionObject()); 
     }, 
    }); 
    map.addLayer(vectorLayer[i]); 

    var gjson = new OpenLayers.Format.GeoJSON(); 
    var featurecollection = ReadFile(file[i]); 
    //Readfile is just a normal Request.POST function 
    vectorLayer[i].addFeatures(gjson.read(featurecollection)); 
    i=i+1; 
} 

controls = { 
    selecthover: new OpenLayers.Control.SelectFeature(vectorLayer[0],{ 
     hover: true, 
     highlightOnly: true 
    }) 
}; 

for(var key in controls) { 
    map.addControl(controls[key]); 
    controls[key].activate(); 

} 

      var report = function(e) { 
      OpenLayers.Console.log(e.type, e.feature.id); 
     }; 

     var highlightCtrl = new OpenLayers.Control.SelectFeature(vectors, { 
      hover: true, 
      highlightOnly: true, 
      renderIntent: "temporary", 
      eventListeners: { 
       beforefeaturehighlighted: report, 
       featurehighlighted: report, 
       featureunhighlighted: report 
      } 
     }); 


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

Файл GeoJSON выглядит что-то вроде

{ "типа"

: "FeatureCollection", "особенности": [ { "типа": "особенность", "ID": 0, " свойства ": {}," geometry ": {" type ":" Polygon "," maps ": [[[9.244170, 48.847009], [9.246171, 48.822260], [9.248220, 48.796910], [9.248433, 48.794277], [ 9.290007, 48.791633], [9.298732, 48.785304], [9.153553, 48.859655], [9.203549, 48.861241], [9.235667, 48.852769], [9.235667, 48.848344], [9.244170, 48.847009]]]}} , {"type ":" Feature "," id ": 1," proper связей ": {}," geometry ": {" type ":" Polygon "," codes ": [[[9.064848, 48.755577], [9.038994, 48.741317], [9.104720, 48.709080], [9.104721, 48.709079], [ 9.146561, 48.663574], [9.156822, 48.652414], [9.162166, 48.646602], [9.174173, 48.633544], [9.064848, 48.755577]]]}} , ... и т.д.

+0

исходный код пожалуйста – capdragon

ответ