2014-01-21 84 views
2

我想创建一个选项,用户绘制在地图上的多边形,让用户绘制多边形,诺基亚HERE地图:地图

点应标绘点击地图,当第一点被点击一次半透明应绘制多边形。

我该如何做到这一点?

回答

4

您可以将点击侦听器添加到在地图上创建标记的地图。 您创建的第一个标记应该有一个点击侦听器来结束编辑(删除您首先添加到地图中的侦听器) 每次在地图中创建一个新标记都可以绘制多边形。

//Supposing map is an instance of our map. 
//Suposing we have a global instance of a container called myContainer and has been already added to the map 
//suposing we have a global variable called polygon and has been already added to the map 

map.addListener("click", addMarker); 

function addMarker(evt){ 

    var pixelGeo = map.pixelToGeo(evt.displayX, evt.displayY); 
    var coordinate = new nokia.maps.geo.Coordinate(pixelGeo.latitude, pixelGeo.longitude); 
    var marker = new nokia.maps.map.StandardMarker(coordinate); 

    //compare if it's the first created marker, so we can add an event listener for ending 
    if(myContainer.objects.getLength() > 0){ 
     //add event listener to marker 
     marker.addListener("click",finishPolygon); 

    } 

    //add marker to container 
    myContainer.objects.add(marker); 

    //paint polygon acording to markers 
    paintPoly(); 
} 

function paintPoly(){ 

    //grab coordinates from markers and draw polyline 
    var aMarkers = myContainer.objects.asArray(); 
    var aCoords = []; 
    for(var marker in aMarkers){ 
     var marker = aMarkers[marker]; 
     aCoords.push(marker.coordinate); 
    } 

    //remove polygon instance from map 
    map.objects.remove(polygon); 

    //add new polygon 
    polygon = new nokia.maps.map.Polygon(
     aCoords, 
     { 
      pen: { strokeColor: #000, lineWidth: 1 }, 
      brush: { color: #ababab } 
     } 
    ); 
} 

希望这可以帮助你作为指导。 你可以检查对象的属性和功能Here maps开发者页面

+0

这是非常有益的,谢谢! – Rao

+0

有没有办法来检查是否已经有一个事件监听器附加到一个函数? – Rao