circle are not yet implemented in the current version or Cartoweb
but here is a patch that should enable it.
I did it myself because explaining you what to do would have taken me the same amount of time.
I dont provide the tool icon though.

regards
Oliver

Hi,

I would like to know if it's possible to draw a circle (center and radius defined by the user) with the plugin "Outline" modified or with another solution?

Thanks

Patrick BERANGER
Pôle Modernisation / Système d'Information Géographique
DRE Rhône-Alpes / DDE Rhône
Tél : 04 78 63 39 62


_______________________________________________
Cartoweb-users mailing list
Cartoweb-users@lists.maptools.org
http://lists.maptools.org/mailman/listinfo/cartoweb-users

Index: htdocs/js/dhtmlInit.js
===================================================================
RCS file: /var/lib/cvs/projects/cw3/cartoweb3/htdocs/js/dhtmlInit.js,v
retrieving revision 1.25
diff -u -r1.25 dhtmlInit.js
--- htdocs/js/dhtmlInit.js      20 Nov 2007 07:46:47 -0000      1.25
+++ htdocs/js/dhtmlInit.js      7 Feb 2008 08:02:02 -0000
@@ -428,6 +428,33 @@
  };
};
/***** OUTLINE ****/
+Map.prototype.outline_circle = function(aDisplay) {
+  this.resetMapEventHandlers();
+  this.setCurrentLayer('outline_poly');
+  this.getDisplay(aDisplay).setTool('draw.circle');
+
+  this.onNewFeature = function(aFeature) {
+      this.onToolUnset();
+  };
+  this.onFeatureInput = this.onFeatureChange = function(aFeature) {
+    fillForm(aFeature);
+    if (typeof addLabel == 'undefined')
+      doSubmit();
+    else
+      addLabel(polyDefaultLabel, mouse_x, mouse_y);
+  };
+  this.onToolUnset = function() {
+    //clear the outline_poly's display layer
+    this.getDisplay(aDisplay).clearLayer('outline_poly');
+    this.onCancel();
+  };
+  this.onCancel = function() {
+    if (typeof hideLabel != 'undefined')
+      hideLabel();
+    emptyForm();
+  };
+};
+
Map.prototype.outline_poly = function(aDisplay) {
  this.resetMapEventHandlers();
  this.setCurrentLayer('outline_poly');
Index: plugins/outline/client/ClientOutline.php
===================================================================
RCS file: 
/var/lib/cvs/projects/cw3/cartoweb3/plugins/outline/client/ClientOutline.php,v
retrieving revision 1.59
diff -u -r1.59 ClientOutline.php
--- plugins/outline/client/ClientOutline.php    5 Nov 2007 10:08:44 -0000       
1.59
+++ plugins/outline/client/ClientOutline.php    7 Feb 2008 08:03:36 -0000
@@ -121,6 +121,7 @@
    const TOOL_LINE      = 'outline_line';
    const TOOL_RECTANGLE = 'outline_rectangle';
    const TOOL_POLYGON   = 'outline_poly';
+    const TOOL_CIRCLE   = 'outline_circle';

    /**
     * Constructor
@@ -197,6 +198,7 @@
                     new ToolDescription(self::TOOL_LINE, true, 71),
                     new ToolDescription(self::TOOL_RECTANGLE, true, 72),
                     new ToolDescription(self::TOOL_POLYGON, true, 73),
+                     new ToolDescription(self::TOOL_CIRCLE, true, 74),
                     );
    }

@@ -211,9 +213,10 @@
    public function filterGetRequest(FilterRequestModifier $request) {
        // gets geometry type from GET request
        $this->geomType = '';
-        $poly = $request->getValue('outline_poly');
-        $line = $request->getValue('outline_line');
-        $point = $request->getValue('outline_point');
+        $poly = $request->getValue(self::TOOL_POLYGON);
+        $line = $request->getValue(self::TOOL_LINE);
+        $point = $request->getValue(self::TOOL_POINT);
+        $circle = $request->getValue(self::TOOL_CIRCLE);

        // set correct parameters for new shape depending on type
        if (!empty($poly)) {
@@ -228,6 +231,10 @@
$this->geomType = $tool = self::TOOL_POINT; $selection_coords = $point;
            $selection_type = 'point';
+        } elseif (!empty($point)) {
+ $this->geomType = $tool = self::TOOL_CIRCLE; + $selection_coords = $circle;
+            $selection_type = 'circle';
        } else {
            return;
        }
@@ -318,6 +325,7 @@

        case self::TOOL_RECTANGLE:
        case self::TOOL_POLYGON:
+        case self::TOOL_CIRCLE:
            $styledShape->shapeStyle = clone $this->outlineState->polygonStyle;
            break;

@@ -577,6 +585,17 @@
    protected function getShape($type, $values) {

        switch ($type) {
+            case self::TOOL_CIRCLE :
+                $points = Utils::parseArray($values, ';');
+                if (sizeOf($points) != 2) return false;
+
+                $shape = new Circle;
+                $xy = Utils::parseArray($points[0], ',');
+                $shape->x = $xy[0];
+                $shape->y = $xy[1];
+                $shape->radius = $points[1];
+                return $shape;
+            break;
            case self::TOOL_POLYGON :
                $points = Utils::parseArray($values, ';');
                if (sizeOf($points) <= 0) return false;
Index: plugins/outline/server/ServerOutline.php
===================================================================
RCS file: 
/var/lib/cvs/projects/cw3/cartoweb3/plugins/outline/server/ServerOutline.php,v
retrieving revision 1.55
diff -u -r1.55 ServerOutline.php
--- plugins/outline/server/ServerOutline.php    26 Oct 2007 12:56:19 -0000      
1.55
+++ plugins/outline/server/ServerOutline.php    7 Feb 2008 08:02:48 -0000
@@ -71,6 +71,13 @@
$p->addXY($shape->maxx, $shape->miny); $p->addXY($shape->minx, $shape->miny);
            $p->addXY($shape->minx, $shape->maxy);
+        } else if ($className == 'Circle') {
+            $f = ms_newShapeObj(MS_SHAPE_POLYGON);
+            for ($i = 0; $i <= 360; $i = $i + 10) {
+                $x = $shape->x + (cos($i * (22 / 7) / 180) * $shape->radius);
+                $y = $shape->y - (sin($i * (22 / 7) / 180) * $shape->radius);
+                $p->addXY($x, $y);
+            }
        } else {
            if ($className == 'Line') {
                $f = ms_newShapeObj(MS_SHAPE_LINE);
@@ -278,6 +285,7 @@
                break;
            case 'Rectangle':
            case 'Polygon':
+            case 'Circle':
                $this->drawPolygon($shape, $maskMode);
                break;
            default:
_______________________________________________
Cartoweb-users mailing list
Cartoweb-users@lists.maptools.org
http://lists.maptools.org/mailman/listinfo/cartoweb-users

Reply via email to