2012-03-15 27 views
6

Tôi đang cố gắng tạo một vòng tròn với một trung tâm được xác định và đặt một điểm đánh dấu biểu tượng lên đó. Mã này hoạt động nếu tôi sử dụng hình ảnh thay vì OpenLayers.Geometry.Polygon.createRegularPolygon. Tôi đã không thể giải quyết nó.Vòng tròn mở rộng Đa giác trên lớp OpenStreetMaps

đây bạn tìm thấy mã của tôi:

<html> 
<head> 
<title>OpenLayers Example</title> 
<script src="http://www.openlayers.org/api/OpenLayers.js"></script> 
</head> 
<body> 

<div id="mapdiv"></div> 
<script> 

map = new OpenLayers.Map("mapdiv"); 
map.addLayer(new OpenLayers.Layer.OSM()); 

epsg4326 = new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection 
projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator) 

var lonLat = new OpenLayers.LonLat(-0.1279688 ,51.5077286).transform(epsg4326,  projectTo); 

var zoom=6; 
map.setCenter (lonLat, zoom); 

var mycircle = OpenLayers.Geometry.Polygon.createRegularPolygon(
       new OpenLayers.Geometry.Point(lonLat), 
       1, 
       30 
      ); 

var featurecircle = new OpenLayers.Feature.Vector(mycircle); 


var vectorLayer = new OpenLayers.Layer.Vector("Overlay"); 

// Define markers as "features" of the vector layer: 
vectorLayer.addFeatures(featurecircle); 

var feature = new OpenLayers.Feature.Vector(
new OpenLayers.Geometry.Point(-0.1244324, 51.5006728 ).transform(epsg4326, projectTo), 
     {description:'info'} , 
     {externalGraphic: 'img/marker.png', graphicHeight: 25, graphicWidth: 21,  graphicXOffset:-12, graphicYOffset:-25 } 
    );  
vectorLayer.addFeatures(feature); 


map.addLayer(vectorLayer); 


</script> 
</body> 
</html> 

Cảm ơn trước cho bất cứ lời khuyên.

Trả lời

18

OpenLayers.Geometry.Point hàm tạo trong x, y không cô đơn obj. Khi bạn đang tạo vòng tròn new OpenLayers.Geometry.Point(lonLat) nên new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat);

enter image description here

này nên làm việc tốt hơn:

map = new OpenLayers.Map("mapdiv"); 
map.addLayer(new OpenLayers.Layer.OSM()); 
epsg4326 = new OpenLayers.Projection("EPSG:4326"); //WGS 1984 projection 
projectTo = map.getProjectionObject(); //The map projection (Spherical Mercator) 

var lonLat = new OpenLayers.LonLat(-0.1279688, 51.5077286).transform(epsg4326, projectTo); 

var zoom = 6; 
map.setCenter(lonLat, zoom); 

var vectorLayer = new OpenLayers.Layer.Vector("Overlay"); 

var point = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat); 


var mycircle = OpenLayers.Geometry.Polygon.createRegularPolygon 
(
    point, 
    50000, 
    40, 
    0 
); 

var featurecircle = new OpenLayers.Feature.Vector(mycircle); 

var featurePoint = new OpenLayers.Feature.Vector(
    point, 
    { description: 'info' }, 
    { externalGraphic: 'img/marker.png', graphicHeight: 25, graphicWidth: 21, graphicXOffset: -12, graphicYOffset: -25 } 
); 
vectorLayer.addFeatures([featurePoint, featurecircle]); 

map.addLayer(vectorLayer); 
+0

Cảm ơn rất nhiều! nó hoạt động! – Lessfoe

+1

@Lessfoe Tuyệt vời. Đừng quên cho tôi tín dụng bằng cách bỏ phiếu và chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm bên cạnh câu trả lời của tôi. Cảm ơn! – capdragon

5

Nếu bạn muốn có vòng tròn của bạn và quan điểm của bạn kết hợp với nhau thành một đối tượng sau đó sử dụng OpenLayers.Geometry.Collection . Sử dụng phương pháp này, bạn có thể áp dụng một số điều khiển như DragFeature sẽ hoạt động trên các phần tử trong bộ sưu tập cùng một lúc.

var defaultStyle = new OpenLayers.Style({ 
    externalGraphic:'${icon}', 
    graphicHeight: 25, 
    graphicWidth: 21,  
    graphicXOffset:-12, 
    graphicYOffset:-25 
}); 
var styleMap = new OpenLayers.StyleMap({'default': defaultStyle }); 
var vectorLayer = new OpenLayers.Layer.Vector("Overlay",{styleMap: styleMap }); 

var aPoint = new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat); 
var aCircle = OpenLayers.Geometry.Polygon.createRegularPolygon(aPoint, 50000, 40, 0); 

var aCirclePoint = new OpenLayers.Geometry.Collection([ aCircle, aPoint ]); 
var aCirclePoint_feature = new OpenLayers.Feature.Vector(aCirclePoint); 
aCirclePoint_feature.attributes = { icon:'/img/marker.png' } 

vectorLayer.addFeatures([ aCirclePoint_feature ]);  
+0

bạn thưa bạn, là một người giàu có! – jperelli