ThinkGeo.com    |     Documentation    |     Premium Support

Is it possible to add Map Suite Desktop Edition 4.0 feature on top of a Map Suite Desktop Edition 2.25.5 C# application

Hi,


   Specifically we want to add "Edit Polygon Shape functionality" and "zoom in/out during Polygon creation" functionality on top of our existing map component using Map_Suite_Desktop_Edition_2.25.5,without breaking the existing map codes.

Is there any workaround so that Map_Suite_Desktop_Edition_2.25.5 (upon which the existing application was developed) can work together with Map_Suite_Desktop_Edition_4.0 for adding the above two 4.0 features? You know it is costly if we rewrite the whole thing for only adding  the two features.

Has anyone out there tried to create two references in a C# application to the two dll representing the two editions respectively?

Thanks very much.


Franklin


 


 


 


 



Franklin,


Thanks for your post.


Just confirm with you that how you implement two functions by using 4.0 and then we can consider if 2.25.5 has the way to do the same thing or need to add new functions.


"Edit Polygon Shape functionality": I think you set EditMode of EditOverlay to implement it.


"zoom in/out during Polygon creation": You set TrackMode to polygon and then track a polygon, you hookup the event, so you know when it created and at the same time you can decide to zoom in/out.


The first one is for editing, I think you can look at following posts


gis.thinkgeo.com/Support/Dis...fault.aspx


gis.thinkgeo.com/Support/Dis...fault.aspx

The second one I don't find any idea about it by using 2.25.5 so far, I will keep research on it and let you know the result.


Thanks


James



James,


Thanks very much for the replying. I will try out the method suggested for "zoom in/out during Polygon Creation".


To implement "Edit Polygon Shape functionality" in 4.0,  the code would be something like:


winformsMap1.EditOverlay.EditShapesLayer, where winformsMap1 is defined as a member in "UserControl" via CreateAnInMemoryFeatureLayer: UseControl


However, in order to use the code above, it is necessary to add a new reference pointing to 4.0 DesktopEdition dll


Since we don't want to break the existing 2.25.5 code, the existing 2.25.5 DesktopEdition dll reference should still be there.My concern is: is it an issue to use the two references under same name "DesktopEdition"? Or have you got other method to allow the 4.0 "Edit Polygon Shape Functionality" coexist with the 2.25.5 functionalities already in the application?


Thanks a lot for the help.


Franklin


 


 



Franklin, 
  
 I think you can change one name and then you can add them to reference, but it might not good idea. 2.55.5 is the second generation product of MapSuite, right now we support 4.0 which is fourth generation products, so you’re better to upgrade your MapSuite, the current one is more flexiable so that even there is no function to do your requirement, you can extend it to implement by many ways. 
  
 Thanks 
 James

Hi James,


Managed to get the application built up successfully with references to 2.55.5 and 4.0 dll(uder a different name: DesktopEditionNew).

I am not so clear about how you instantiate WinformsMap. Tried to use:


ThinkGeo.MapSuite.DesktopEdition.WinformsMap winMap1 = new WinformsMap(); // is this OK, although compilation goes through?


But during runtime, stepping over the breakpoint at this statement suggests something wrong: an unexpected exception happend and the application exited.What would you do to instantiate winMap1 to invoke 4.0 functionality?


Thanks.


Franklin


 


 


 


 


 


 



Franklin,


About  instantiate WinformsMap, usually we recommand the users drag the map control and drop to the form, it will instantiate by visual studio. If you want to do it by your own code, I think you can follow the sample code below:


            // 
            // winformsMap1
            // 
            this.winformsMap1.BackColor = System.Drawing.Color.Gray;
            this.winformsMap1.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.Default;
            this.winformsMap1.CurrentScale = 590591790;
            this.winformsMap1.Dock = System.Windows.Forms.DockStyle.Fill;
            this.winformsMap1.DrawingQuality = ThinkGeo.MapSuite.Core.DrawingQuality.Default;
            this.winformsMap1.Location = new System.Drawing.Point(0, 0);
            this.winformsMap1.MapFocusMode = ThinkGeo.MapSuite.DesktopEdition.MapFocusMode.Default;
            this.winformsMap1.MapResizeMode = ThinkGeo.MapSuite.Core.MapResizeMode.PreserveScale;
            this.winformsMap1.MapUnit = ThinkGeo.MapSuite.Core.GeographyUnit.DecimalDegree;
            this.winformsMap1.MaximumScale = 80000000000000;
            this.winformsMap1.MinimumScale = 200;
            this.winformsMap1.Name = "winformsMap1";
            this.winformsMap1.Size = new System.Drawing.Size(740, 740);
            this.winformsMap1.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
            this.winformsMap1.TabIndex = 0;
            this.winformsMap1.Text = "winformsMap1";
            this.winformsMap1.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
            this.winformsMap1.ThreadingMode = ThinkGeo.MapSuite.DesktopEdition.MapThreadingMode.Default;
            this.winformsMap1.ZoomLevelSnapping = ThinkGeo.MapSuite.DesktopEdition.ZoomLevelSnappingMode.Default;

Thanks


James



James,


In  CSharp(VS 2008 Winforms)WindowsHowDoISamples project, where can i find the form on which you drag and drop the WindowFormsMap customer control? I am trying to relate the recommended instantiation method to a real sample which comes with Map Suite 4.0 Desktop Edition trial download.


Thanks.


 


Franklin


 



Franklin, 
  
 Thanks for your post. 
  
 Following code samples in our code snippet shows you the way to drag and drop, you are probablly need to referece the DLLs to make it can compile and run. 
 code.thinkgeo.com/projects/list_files/centeringtolerance 
 code.thinkgeo.com/projects/show/trackoverlayescnew 
 code.thinkgeo.com/projects/show/draggingvertex(need 4.0.66.0 or higher version) 
  
 Anything I am not clear just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Yale, 
  
     I was referring to Map Suite DesktopEdition\Samples\CSharp 2008 Winforms.Microsoft Visual Studio Solution. In that context, where can i find the form on which you drag and drop the WindowFormsMap custom control? I have no problem in following the procedure for creating the map control as described in gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/20/aft/4804/afv/topic/Default.aspx 
 In the CSharp 2008 Winforms sample, i cannot find the form on which the map control is dropped so as to complete the recommended instantiation method above. Can you shed light on this? Thanks. 
  
  
 Franklin

Yale, 
  
   I got it from LoadAMapFromStreams.cs[design] in that project space.  
 Thanks. 
  
 Franklin

Yale, 
  
      If a class is not derived from UserControl, how should the above drag-and-drop instantiation method be adapted to  create a winformsMap instance in that class? I have the instantiation problem in that particular scenario mentioned earlier.  
 As you may notice, the 2.55.5 version doesn’t have this instantiation restriction and i am trying to fit the winformMap instance into an ordinary C# class which is not derived from UserControl in our existing map software architecture.  
 Can you give me an example in this respect? 
 Thank a lot for your help. 
  
 Franklin

Franklin, 
  
 I think we are thinking differently somehow. In my understanding, the winforms Map control is a control which should be placed on a control container like a UserControl or Windows Form. If you want to draw inside a class which is not a control container, we may need to use the MapEngine like how it is done Service Edition instead of using the MapControl directly. 
  
 If I am misunderstanding anything, please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Yale, 
  
     Thanks for making the point of using MapEngine in this scenario. In our existing map application we adopt a Model-View-Presenter architecture which MapSuite-2.55.5-desktop-based map module can fit well into. My question is: which product will be more suitable to fit into the Model-View-Presenter architecture, MapSuite  4.0 Desktop Edition or Service Edition? What are the  scenarios for using Service? 
 Thanks. 
 frranklin

Franklin, 
  
 I am afraid we made some different understandings in some places. 
  
 I agree with you to choose Desktop control instead of using Service APIs to build up the Model-View-Presenter  architecture, it will save a lot of time for it is an easy drag-drop control.  
 The different between Desktop Edition and Service Edition is very similar to the Window32 APIs and Windows Operating system, all the powerful functionalities built on Desktop Edition is built based on the Service APIs. And Desktop edition is an available control which you can easily drag and drop into other control containers. The advantages of Service editions is its powerful APIs and rich extensibility, you can easily extend it by writing your own source /layer/style etc. You even can built your own Dekstop  UI control based on it. 
  
 One thing I am not 100% sure is when you use the 2.55.5 desktop control, how you drag and drop for it? I think 4.0.0 map control should exactly the same way. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Yale, 
  
    For 4.0 desktop map control, the recommended way for instantiating WinformsMap is to drag it from toolbox and drop it to a form. 
 My concern is 1.) will this drag-drop instantiation create a lot of overhead in a multithreaded Map application using Composite GUI Application Block architecture (CAB)? 2.) will the 4.0 Service be a better candidate for fitting into the CAB architecture because  the MapEngine instantiation method is more flexible in this context?  
 Thanks. 
  
 Franklin

Franklin,


Thanks for your post and feedback.
 
As my understanding, Composite UI Application Block (CAB) is intended to provide proven practices to build complex UIs based on simpler “parts”. So I would rather to say that choosing desktop edition map control or service map control depends on what functionalities we want to get from the MapControl. For example, if we want the Track and Edit shapes integrated, I say we probably need to desktop edition instead of service edition, we have discussed this in our another threading post. If we just want to show map or navigate map, we probably can choose service edition. From the HowDoI samples attached in our service edition packaged, you can see bunch of examples showing the way drawing on the picture box with the service APIs.
 
Any more questions please feel free to let me know.
 
Thanks.
 
Yale