OpenLayersのデフォルトマーカーアイコンの変更

私はOpenLayersで国の位置をプロットしようとしていますが、デフォルトのアイコンを変更するのに問題があります。

私の基本的なコードは次のとおりです:

    function addCountryMarker(ll, popupClass, popupContentHTML, closeBox, overflow) {
        var feature = new OpenLayers.Feature(alumniCountries, ll); 
        feature.closeBox = closeBox;
        feature.popupClass = popupClass;
        feature.data.popupContentHTML = popupContentHTML;
        feature.data.overflow = (overflow) ? "auto" : "hidden";

        var marker = feature.createMarker();

        var markerClick = function (evt) {
            if (this.popup == null) {
                this.popup = this.createPopup(this.closeBox);
                map.addPopup(this.popup);
                this.popup.show();
            } else {
                this.popup.toggle();
            }
            currentPopup = this.popup;
            OpenLayers.Event.stop(evt);
        };
        marker.events.register("mousedown", feature, markerClick);
        alumniCountries.addMarker(marker);
    }

そして、これはうまくいきますが、デフォルトのopenLayersアイコンを表示します。次の行はアイコンを変更しますが、markerClick関数のポップアップを解除します:

feature.icon = new OpenLayers.Icon("marker-blue.png");

marker.iconを使用している同じ行でもアイコンが変更されますが、ポップアップも解除されます。どのようにポップアップを壊すことなくアイコンを変更する上の任意のポインターは非常に感謝されるだろう。

2

2 答え

それはしばらくかかりましたが、結局はかなりシンプルでした。

feature.data.icon = new OpenLayers.Icon("marker-blue.png");
5
追加された
function addMarker(ll, iconURL, popupClass, popupContentHTML, closeBox, overflow) {
    try 
    {
    var size = new OpenLayers.Size(32, 32);
    var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
    var newIcon = new OpenLayers.Icon( iconURL, size, offset );
    var feature = new OpenLayers.Feature(markers, ll);
    feature.closeBox = closeBox;
    feature.popupClass = popupClass;
    feature.data.popupContentHTML = popupContentHTML;
    feature.data.overflow = (overflow) ? "auto" : "hidden";
    feature.data.icon = newIcon;

    var marker = feature.createMarker();
    //marker.setUrl('http://maps.google.com/intl/en_us/mapfiles/ms/micons/orange-dot.png');

    var markerClick = function (evt) {
        if (this.popup == null) {
            this.popup = this.createPopup(this.closeBox);
            map.addPopup(this.popup);
            this.popup.show();
        } else {
            this.popup.toggle();
        }
        currentPopup = this.popup;
        OpenLayers.Event.stop(evt);
    };
    marker.events.register("mousedown", feature, markerClick);
    //marker.setUrl('');


    markers.addMarker(marker);
}
catch (err) {
    txt = "There was an error in initOsmMap\n\n";
    txt += "Error description: " + err.message + "\n------------------------------------------------------------------------------------------------------------------------------------------------------------\n";
    console.log(txt);
}

}

0
追加された