GWT Openlayer绘制圆矢量特征

时间:2013-04-24 03:47:24

标签: java gwt gwt-rpc gwt-openlayers

stackoverflow用户,我需要绘制圆圈,在Openlayer的GWT包装器中,我使用了DrawFeature,ModifyFeature控件,但是无法找到绘制Circle的控件,或者带有示例welcome的任何建议。例如:

import org.gwtopenmaps.openlayers.client.control.*;    
Vector vectorLayer = new Vector("Vector Layer");    
ModifyFeature mod = new ModifyFeature(vectorLayer);

像这是圈子的任何绘画功能?

1 个答案:

答案 0 :(得分:3)

您想为圆圈启用DrawFeature,还是想在图层上添加圆圈?

  • 为圆圈启用DrawFeature:

    //功能选项     DrawFeatureOptions drawFeatureOptions = new DrawFeatureOptions();

    // Handler option for circle
    RegularPolygonHandlerOptions handlerOptions = new RegularPolygonHandlerOptions();
    // 30 side is ok for a circle
    handlerOptions.setSides(30);
    handlerOptions.setSnapAngle(0);
    handlerOptions.setIrregular(false);
    
    // Add the handler option to the DrawFeatureOptions
    drawFeatureOptions.setHandlerOptions(handlerOptions);
    
    // create the draw feature control
    DrawFeature drawCircleFeatureControl = new DrawFeature(geometryFeaturesLayer, new RegularPolygonHandler(),
            drawFeatureOptions);
    
    // Add the control to the map
    map.addControl(drawCircleFeatureControl);
    
  • 在图层上添加圆圈

在openlayers中有一个javascript方法:OpenLayers.Geometry.Polygon.createRegularPolygon 我无法在GWT openlayers中找到它,所以你必须调用javascript方法:

    /**
 * Create a regular polygon around a radius. Useful for creating circles and the like.
 * 
 * @param origin {OpenLayers.Geometry.Point} center of polygon.
 * @param radius {Float} distance to vertex, in map units.
 * @param sides {Integer} Number of sides. 20 approximates a circle.
 * @param rotation {Float} original angle of rotation, in degrees.
 * @return Polygon
 */
public static native JSObject jsCreateRegularPolygon(JSObject origin, Float radius, Integer sides, Float rotation)
/*-{
    return $wnd.OpenLayers.Geometry.Polygon.createRegularPolygon(origin, radius, sides, rotation);
}-*/;

然后从您的代码中调用它以创建您的圈子

JSObject polygonJSObject = jsCreateRegularPolygon(point, 100f, 30, 45f); // with 30 sides for a circle
Polygon circle = Polygon.narrowToPolygon(polygonJSObject);