ThinkGeo.com    |     Documentation    |     Premium Support

Custom Styles in EditOverlay

 I have an application that uses custom styles for drawing everything.  Basically, I override the DrawCore event in my custom style to draw my symbology, be it line, point, or text.  I am preparing to add editing capabilities to my application.  I will start with point feature input.  I have looked at the sample code for point feature input and run it locally.  When in point feature input mode, the user clicks a location and a point feature is drawn on the edit overlay.  All of this appears to happen on the client side.


My questions are:


1.  Is there a way to have the point symbol appear on the mouse pointer until the location is clicked?


2.  Do I have any control over the appearance of the point feature displayed?


3.  Is it possible to place a point feature and change the rotation angle of that feature as a two step process?


4.  Is it possible to use a custom style with the EditOverlay?


Thanks,


Charles



Hi Charles, 
  
 I try to reply your questions but suddenly I thought maybe I misunderstand your requirement. 
  
 Do you want to edit your features like this: 
  
 1. Switch to edit mode, then click one feature, keep its original style in EditOverlay and then edit it. 
  
 2. Make selected vertex auto follow mouse pointer but don’t need customer hold mouse left button. 
  
 Sorry I still haven’t understood your item 2 and 3.  
 Do you want to let vertex highlight if your mouse over it in item 2?  
 And what’s your original operation for item 3, why we need choose a rotation angle. 
  
 Regards, 
  
 Don

This is going to be a bit complicated, so bear with me. 



My product is a fully editable GIS.  For practical reasons, the editing on the Web version will be limited at first.  My 'point' symbol library has close to 1000 different symbols.  Only a few are symmetrical such that the rotation angle is unimportant to its appearance.  Our legacy applications 'input point' process follows: 



1.  Initialize input mode. (Symbol follows mouse). 

2.  Left click to choose a location in the map (or right click to cancel operation). 

3.  Left click to set the rotation angle (or right click to use zero degrees) (Note: symbol spins on first click point). 

4.  Display a feature attribute record in a data edit form. 

5.  Redraw the map with the new feature included. 



I should point out that my 'point' symbol is stored and handled as a point inside MapSuite, but I override the DrawCore event in my custom style and I stroke out a vector image at every point location. 



So as not to confuse current customers, I'd like the new process to mimic the old as closely as possible.  Initially, I want to be able to start input mode (rather than picking and editing a feature), have the mouse pointer change to a feature image when over the map control, and drop the feature image at the first click location.  Once placed, I'd like to change to rotate mode to set the rotation angle of the feature.  For the sake of speed, I'd prefer that this happen on the client side without post-back.  After the second click to set the rotation angle, I would return to the server side code and create a database record for the feature at the click location and with the rotation angle (SQL Ssrver Spatial), which would then appear in my custom style when the map control updated. 



Having looked at the MapSuite Client API and the OpenLayers API, I don't think it is possible to have the input image on the client side to be the same as my custom style on the server side.  I haven't quite figured out everything that is available on the client side, but, if possible, that would be icing on the cake. 



I hope this helps clarify the situation. 



Charles



Hi Charles,  
  
 I read your detail description and understand your desgin. 
  
 It’s really complicated and it looks you have so much work need to do about Openlayers,we don’t have a workaround for that. 
  
 For your requirement, I think you need to override OpenLayers.Control.DrawFeature and OpenLayers.Control.ModifyFeature.  
  
 The other thing Our EditOverlay directly call OpenLayers.Control.DrawFeature and when choose point mode it should be OpenLayers.Handler.Point. 
  
 I am sorry I cannot provide you some code detail about it because that’s really not easy. 
  
 Regards, 
  
 Don