1

*.jsに保存されている座標に基づいてマップ上に配置される一連のマーカーがあります

(図に示すように)各マーカーにポップアップを追加することはできましたが、それは私が望んでいたものではありません。

https://dl.dropbox.com/u/108179246/Cattura.JPG

マーカーごとに、それぞれのマーカーをクリックしたときにのみ開くポップアップを挿入しようとしています。これは私がこれまでに使用したコードです。

function showConsideredSamplingPoints() {
        var consideredMarkers = new OpenLayers.Layer.Markers( "Considered  samplings (" + consideredPoints.length + ")");

        var lonLat = null;
        for (var i = 0, len = consideredPoints.length; i < len; i++) {
            lonLat = new OpenLayers.LonLat(consideredPoints[i].lon, consideredPoints[i].lat)
                .transform(
                    new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
                    osmmap.getProjectionObject() // to Spherical Mercator Projection
                  );
            var marker= new OpenLayers.Marker(lonLat);
            consideredMarkers.addMarker(marker, iconRed.clone());   
            popup = new OpenLayers.Popup.FramedCloud(i,
                         lonLat,
                         new OpenLayers.Size(200, 200),
                         "example popup"+osmmap.popups.length,
                         null, true);
            popup.autoSize = true;

            marker.events.register("click", marker, function(e){    
            osmmap.popups[i].show();
            });

            osmmap.addPopup(popup);               
        }

        osmmap.addLayer(consideredMarkers);}

ご覧のとおり、マーカーごとにイベントを挿入しようとしましたが、機能しませんでした。なんで?エラーは何ですか?

解決策:私の友人のおかげで、私は解決策を見つけました。イベントの宣言に誤りがありました。コードを正しく完全に実行します。

var consideredMarkers = new OpenLayers.Layer.Markers("Considered samplings (" +  consideredPoints.length + ")")
    , marker = []
    , lonLat = null
    , len
    , i
    , num
    , osmid
    , popup;

  for (i = 0, len = consideredPoints.length; i < len; i++) {
    lonLat = new OpenLayers.LonLat(consideredPoints[i].lon, consideredPoints[i].lat).transform(
      new OpenLayers.Projection("EPSG:4326"), // transform from WGS 1984
      osmmap.getProjectionObject() // to Spherical Mercator Projection
    );

    num = consideredPoints[i].num;
    osmid = consideredPoints[i].osmid;
    marker[i] = new OpenLayers.Marker(lonLat);

    consideredMarkers.addMarker(marker[i], iconRed.clone());

    popup = new OpenLayers.Popup.FramedCloud(
      i, //id
      lonLat, // lonlat
      new OpenLayers.Size(200, 200), // size
      "Point:" + num + " OsmId:" + osmid + "<---", // content
      null, // anchor
      true  // close
    );

    popup.autoSize = true;  // initial setting
    popup.hide();  // hide this popup!

    osmmap.addPopup(popup);  // add to the osmmap popup list

    marker[i].events.register("click", popup, function () {  // add click event
      this.toggle();  // show or hide
    });
  }

  osmmap.addLayer(consideredMarkers);



    }
4

0 に答える 0