2014-10-30 96 views
1

我一直在尝试新版本(3)的Open Layers。我稍微修改了图标特征示例,因此它会显示一个多边形。我一直在寻找,阅读并尝试了几个小时,但无法弄清楚我做错了什么。功能没有显示在地图上

我不想使用geoJSON,因为我想动态添加和删除功能。

这是我到目前为止的代码:

<script type="text/javascript"> 
    var point1 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'); 
    var point2 = ol.proj.transform([35.41, 9.82], 'EPSG:4326', 'EPSG:3857'); 
    var point3 = ol.proj.transform([33.41, 11.82], 'EPSG:4326', 'EPSG:3857'); 
    var polyFeat = new ol.Feature({ 
    geometry: new ol.geom.Polygon([point1, point2, point3]) 
    }); 

    var polyStyle = new ol.style.Style({ 
    fill: new ol.style.Fill({ 
     color: 'blue' 
    }), 
    stroke: new ol.style.Stroke({ 
     color: 'red', 
     width: 2 
    }) 
    }); 

    polyFeat.setStyle(polyStyle); 

    var vectorSource = new ol.source.Vector({ 
    features: [polyFeat] 
    }); 

    var vectorLayer = new ol.layer.Vector({ 
    source: vectorSource 
    }); 

    var rasterLayer = new ol.layer.Tile({ 
    source: new ol.source.TileJSON({ 
     url: 'http://api.tiles.mapbox.com/v3/mapbox.geography-class.jsonp' 
    }) 
    }); 

    var map = new ol.Map({ 
    layers: [rasterLayer, vectorLayer], 
    target: document.getElementById('map'), 
    view: new ol.View({ 
     center: ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'), 
     zoom: 3 
    }) 
    }); 
</script> 

为什么多边形没有显示?为您解决问题

回答

2

两件小事:

首先,它建议关闭多边形,所以用相同的坐标作为第一个声明的第四点。

var point4 = ol.proj.transform([37.41, 8.82], 'EPSG:4326', 'EPSG:3857'); 

然后,您的几何new ol.geom.Polygon([point1, point2, point3])应该new ol.geom.Polygon([[point1, point2, point3, point4]])

这里重要的事实并非point4此外但你的阵列点转变为点的数组的数组。见the API,说OpenLayers 3 ol.geom.Polygon构造函数预计Array.<Array.<ol.Coordinate>>预期。