如何使用OpenLayers创建一个单击的链接中心并在地图上显示弹出窗口?

时间:2012-05-12 06:09:51

标签: javascript django openlayers geodjango

我已经使用GeoDjango返回的geojson在地图上绘制了特征。我现在想单独显示这些功能的列表。如果单击一个,则地图将以该特定点为中心,并显示包含一些详细信息的弹出窗口。一个很好的例子是GoogleMaps,你可以在这里有一个地方列表,点击其中任意一个就会在地图上显示一个与该特定地点对应的弹出窗口。

这篇帖子建议应该创建一个eventListener,所以我试过这个但是无济于事:Link

我不确定如何将这些组件绑在一起。单击链接后,以下代码不执行任何操作。 href也很混乱,因为它检查我的视图的url模式,所以我扔了一个void(0)来避免这种情况。

<div id="place-list"></div>
<div id="map"></div>

// ... code that reads a geoJSON and outputs features
var mapnik = new OpenLayers.Layer.OSM();
map.addLayer(vectorLayer);
vectorLayer.addFeatures(features);

// Build the clickable list of features
var list = "";
for (var i=0, len=features.length; i  len; i++) {
        // This does not work?
        list = list + "<a href=\"javascript:void(0);\""+"onclick=\"selectFeature("+i+");\">"+features[i].attributes["address"]+"</a><br/>";
}

    $("#place-list").append(list);  

    var info;
    function selectFeature(i) {
        feature = features[i];
        info = new OpenLayers.Control.SelectFeature(
            vectorLayer, 
            {
                eventListeners: {
                    getfeaturesinfo: function(event) {
                        map.addPopup(new OpenLayers.Popup.FramedCloud(
                            feature.id,
                            feature.lonlat,
                            null,
                            event.text,
                            null,
                            true
                        ));
                    }
                }
            }
        );

    }
    map.addControl(info);
    info.activate();

1 个答案:

答案 0 :(得分:0)

我能够弄明白我的问题。我必须创建一个OpenLayers.Control.Panel来保存我的链接,然后将其添加到我的地图中。对于每个要素对象,我创建并将eventlistener链接到每个要素ID。

以下是一个很好的例子:OpenLayers Eventhandler example