OpenLayers问题与标记图标 [英] OpenLayers problem with marker icons

查看:535
本文介绍了OpenLayers问题与标记图标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在网站上创建OSM映射,并使用openlayer添加一些标记.我的问题是,我总是得到相同的标记图标.

I'm creating OSM map in my web site and adding some markers with openlayer.. My problem is that I allways get the same icon for marker..

 <script type="text/javascript">

 var map = new OpenLayers.Map("heatMap");
    var mapnik = new OpenLayers.Layer.OSM();
    map.addLayer(mapnik);
    map.setCenter(new OpenLayers.LonLat(-4.0575942987957,54.390175926091) // Center of the map
      .transform(
        new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
        new OpenLayers.Projection("EPSG:900913") // to Spherical Mercator Projection
      ), 6 // Zoom level
    );

    var markers = new OpenLayers.Layer.Markers( "Markers" );
    map.addLayer(markers);

    var icon1 = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset);
    var icon2 = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker-gold.png', size, offset);
    var icon3 = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker-green.png', size, offset);

    var lonLat1 = new OpenLayers.LonLat(-4.0575942987957,54.390175926091).transform(
                            new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                            map.getProjectionObject() // to Spherical Mercator Projection
                            );

    var lonLat2 = new OpenLayers.LonLat(-3.0575942987957,54.390175926091).transform(
                            new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                            map.getProjectionObject() // to Spherical Mercator Projection
                            );

    var lonLat3 = new OpenLayers.LonLat(-5.0575942987957,54.390175926091).transform(
                            new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                            map.getProjectionObject() // to Spherical Mercator Projection
                            );

    var marker1 = new OpenLayers.Marker(lonLat1);
    var feature = new OpenLayers.Feature(markers, lonLat);
    feature.closeBox = true;
    feature.popupClass = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { autoSize: true });
    feature.data.popupContentHTML = '<p>Marker1<p>';
    feature.data.overflow = "hidden";

    marker1.feature = feature;

    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();
        }
        OpenLayers.Event.stop(evt);
    };
    marker1.events.register("mousedown", feature, markerClick);

    var marker2 = new OpenLayers.Marker(lonLat2);
    var feature = new OpenLayers.Feature(markers, lonLat);
    feature.closeBox = true;
    feature.popupClass = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { autoSize: true });
    feature.data.popupContentHTML = '<p>Marker2<p>';
    feature.data.overflow = "hidden";

    marker2.feature = feature;

    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();
        }
        OpenLayers.Event.stop(evt);
    };
    marker2.events.register("mousedown", feature, markerClick);

    var marker3 = new OpenLayers.Marker(lonLat3);
    var feature = new OpenLayers.Feature(markers, lonLat);
    feature.closeBox = true;
    feature.popupClass = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { autoSize: true });
    feature.data.popupContentHTML = '<p>Marker 3<p>';
    feature.data.overflow = "hidden";

    marker3.feature = feature;

    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();
        }
        OpenLayers.Event.stop(evt);
    };
    marker3.events.register("mousedown", feature, markerClick);

    markers.addMarker(marker1, icon1);

    markers.addMarker(marker2, icon2);

    markers.addMarker(marker3, icon3);

现在的问题是所有三个标记都具有相同的图标...有人可以帮我吗..

Now the problem is that all three markers have the same icon... Can somebody help me..

推荐答案

在创建标记实例后更改图标.

Change icon after creating marker instance.

marker = new ....
var size = new OpenLayers.Size(25, 12);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
marker.icon = new OpenLayers.Icon("marker.png", size, offset);
//UPDATE AGAIN
marker.icon.size = size;
marker.icon.offset = offset;
marker.draw();

这篇关于OpenLayers问题与标记图标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆