Thanks guys ... the digitizing code has changed in the upcoming 2.0 release to use the OpenLayers vector library rather than our home- grown canvas implementation so we'll make sure there is a way to clean up after digitizing ...

Mike, can you take a skim through this thread and make sure the new Vector implementation has a method for cleaning up, or implicitly cleans up if possible.

Cheers

Paul


On 29-Jan-09, at 6:14 PM, Mark Pendergraft wrote:

thanks!
I'll take a look at it later tonight.
-Mark

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Rodolfo
Moreno
Sent: Thursday, January 29, 2009 3:02 PM
To: [email protected]
Subject: RE: [mapguide-users] Fusion and Digitizing


Hi Mark, I have gotten to clear the digitized polygons in FUSION viewer
by
modifying the MapGuideViewerapi.js

var polDigitizer;
function DigitizePolygon(handler) {
   if (handler) {
     var Fusion = window.top.Fusion;
     var mapWidget = Fusion.getWidgetById(mapWidgetId);
     var digitizer = new Fusion.Tool.Canvas.Polygon(mapWidget);
     digitizer.mouseDown = MultiPointHandlers.prototype.mouseDown;
     digitizer.mouseMove = MultiPointHandlers.prototype.mouseMove;
     digitizer.dblClick = MultiPointHandlers.prototype.dblClick;
     Object.inheritFrom(digitizer, Fusion.Tool.Canvas.prototype, []);
     digitizer.handler = handler;
     digitizer.activateCanvas();

     polDigitizer = digitizer;

     //add a listener to update the position of the features
     var mapWidget = Fusion.getWidgetById(mapWidgetId);
     mapWidget.registerForEvent(Fusion.Event.MAP_EXTENTS_CHANGED,
extendEvtResponse );
   }
}

function extendEvtResponse(){
 var digitizer = polDigitizer;
 digitizer.updatePx();
 digitizer.clearContext();
 digitizer.draw(digitizer.context);
}

function clearPol(){
  polDigitizer.clearContext();
  var Fusion = window.top.Fusion;
  var mapWidget = Fusion.getWidgetById(mapWidgetId);
  mapWidget.deregisterForEvent(Fusion.Event.MAP_EXTENTS_CHANGED,
extendEvtResponse);
  polDigitizer.deactivateCanvas();

}

In your main page you must call to clearPol() function in order to clear
the
digitized polygon. For the other shapes I guess that the logic is the
same.
The above code only clears the last polygon digitized. It's necessary to manage an array of digitizers for controlling all digitized polygons. I
haven't had time for trying it.

I have tested with mapguide 2.0.1 with FUSION 1.0.6 in IE7 and FF2
maybe you can improve it.

Regards,


GordonL wrote:

Hi Mark,
I know what you mean about the sticky digitizing... I was told to look
at
the
resetCanvas function in the Measure.js file to get rid of that
leftover
digitize graphics...but I haven't tried it yet...

gordon


Mark Pendergraft wrote:

I was in no way implying the wheel should be reinvented, in fact the
code I posted was an example of how to use the MapGuideViewerAPI.js
supplied DigitizePolygon(handler) function that you referred to.

I did say that I would like to see some method to clear the digitized
shapes after the function's handler has been called.  In MGOS 1.2
after
a polygon was digitized, it was destroyed.  In MGOS 2 with Fusion
1.1,
the polygon stays on the map until the user closes their browser.

-Mark P.

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of GordonL
Sent: Thursday, January 29, 2009 1:20 PM
To: [email protected]
Subject: RE: [mapguide-users] Fusion and Digitizing


You know, you really do not need to reinvent the wheel, if you have
already
built a lot of code with the Basic Web Layouts.  Did you know that
Fusion
supports some retro digitizing methods?
For example, I put the following in an INVOKESCRIPT in the Flexible
Web
Layout:

top.parent.DigitizePoint(top.OnPointDigitized);

I also have the OnPointDigitized in a JS file attached to the main
frame/window.  So I reuse my code for both FUSION and Basic Web
Layouts...

Just check out the functions in the MapGuideViewerApi.js in the
/www/fusion/MapGuide/ folder...
They include:
Refresh()
SetSelectionXML(selectionXml)
ZoomToView(x, y, scale, refresh)
DigitizePoint(handler)
DigitizeLine(handler)
DigitizeLineString(handler)
DigitizeRectangle(handler)
DigitizePolygon(handler)

They work just like the classic MapGuide Viewer API...pretty sweet.

gordon




Mark Pendergraft wrote:

Absolutely.
My biggest beef with digitizing in Fusion is that when you digitize
an
object (point/polygon/etc.) it stays on the map.  The existing
functions
don't have a clear method to remove the digitized object, and my
programming skills aren't good enough that I want to mess with it.

It's very simple,
Add a reference to MapGuideViewerApi.js and call DigitizePolygon()

The DigitizePolygon function requires that you pass it a handler

Something similar to the following:

DigitizePolygon(CreateJobByPolygon);

function CreateJobByPolygon(polygon) {
   var geomText = polygon.Count;
   for (var i = 0; i < polygon.Count; i++){
       geomText += "," + polygon.Point(i).X + "," +
polygon.Point(i).Y;
   }
   Fusion.getWidgetById('Map').setCursor('auto');
//      here you would send your geomText to a web service, or aspx page
that would turn the coordinates into a linear ring
// and then a polygon from there. The geomText variable (in this
particular situation) evaluates to something similar to
//    3,5000.00,5000.00,5050.00,5050.00,5100.00,5100.00
}


Of course you can format the way the coordinates are sent to your
application any way you want.

I would also recommend calling the DigitizePolygon() function from
an
InvokeScript() widget, as I had some problems when I tried to
actually
create a widget and call it from there. Also, I prefer to change my
cursor when the widget is activated, you can see I put it back to
'auto'
in the CreateJobByPolygon() function, but I like to set it to
'crosshair' before the DigitizePolygon function is called.

-Mark P.

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Stefan
Dalakov
Sent: Friday, January 23, 2009 12:35 PM
To: MapGuide Users Mail List
Subject: [mapguide-users] Fusion and Digitizing

Hi all,
From what I read here, should I conclude that digitizing functions
in

Fusion are not yet fully supported ?
I need to digitize a polygon on the map and save it permanently. I
have
this working with AJAX viewer, but would like to port it to Fusion
Has anyone succeeded to  do this ?

Stefan Dalakov


_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users
_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users



--
View this message in context:
http://n2.nabble.com/Fusion-and-Digitizing-tp2205560p2241352.html
Sent from the MapGuide Users mailing list archive at Nabble.com.

_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users
_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users






-----
Rodolfo Moreno
CivilEng

--
View this message in context:
http://n2.nabble.com/Fusion-and-Digitizing-tp2205560p2241865.html
Sent from the MapGuide Users mailing list archive at Nabble.com.

_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users
_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to