J'ai eu récemment à créer une carte qui affiche dynamiquement les résultats d'une recherche sur une carte. L'idée générale était d'avoir une liste de features, et d'afficher celles qui correspondaient à une recherche.

Ma première solution a été de créer la couche avec toutes les features à partir d'un fichier JSON ou KML, puis de masquer celles qui ne correspondent pas. Mais avec 1500 éléments, c'est très long sous IE.

Deuxième solution : supprimer l'attribut "source" de la couche (toujours de type kml ou json) à sa création, on arrive à créer une couche vide dans laquelle on peut rajouter des features.... Sauf si IE, encore une fois !

La solution qui fonctionne sous IE est de créer une couche de type vector, vide, puis d'y ajouter la feature :

var json;
$.getJSON( "fichier.json", function( data ) {
json=data;
}
);

feature=parser.parseFeature(json[0]);
feature.geometry=feature.geometry.transform("EPSG:4326",map.projection);
resultats=new OpenLayers.Layer.Vector("resultats",{
                displayInLayerSwitcher:false, style:result_style
        });
resultats.addFeatures([feature]);
map.addLayer(resultats);

Attention, il faut reprojeter la feature dans le système de coordonnées de la carte, qui OpenLayers.Layer.Vector ne supporte pas l'attribut projection !