ThinkGeo.com    |     Documentation    |     Premium Support

Draw features to interact with existing ones

Hello


I developped the gis module to draw features with holes. basically each time the user draw a new feature i check :

- if the new feature is inside an existing one I draw the difference between them

- if the new feature contains an existing one I draw the difference between them

- if the new feature intersects an existing one I draw the union between them





I use some method provided by the core assembly

BaseShape 

    bool Contains(Feature targetFeature);

    bool IsWithin(Feature targetFeature);

    bool Intersects(Feature targetFeature);



AreaBaseShape    

    MultipolygonShape Union(Feature targetFeature);

    MultipolygonShape GetDifference(Feature targetFeature);

    

I did all this work in the server side with the OnTrackShapeFinished event. The problem is that each time the user draw something, a postback occurs so that the background (google map in my case) refreshes, the editlayers refreshes as well.



My question is : can I do that entirely in the client side. do you provide the same control as the server side?



Thanks in advance.



Sebastien.



Hi Sebastien,



Actually, we have OpenLayers library as our client control; but I cannot find the functions you mentioned except “Intersects” method. OpenLayers supports more client functions for modifying the client shapes such as rotate, move, transform, etc.


If you are interesting in this, please refer to:

dev.openlayers.org/releases/...ng-js.html


I have two recommendations. One is using server-side API. In the post back, just refresh the Overlay you need, and put the map in an update panel, set a client cache for baseOverlays which are not usually changed.


While another recommendation is still using server-side API; but this time, you can wrap a static web method for callback. I think this is the best way to do it on client side; because it maintains the same algorism between client and server side.


For example, if you want to find the feature whether is “Contains” another feature, just transfer the WKT of the features to server side, and then restore the shapes on the server side, call “Contains” method and transfer back the result to client. It’s all asynchronizing so that the map will not fresh.


If you have any questions please let me know.



Thanks,

Howard



why do you recomand not to use openlayers ? do they provide bad quality services?

Sebastien, 
  
 OpenLayers doesn’t support the functions you needed except “Contains” which you can verify from the link I pasted just now. Also, when you use the OpenLayers, you need to convert our geometry to their geometry type before you using that. I think it’s a little difficutle for normal customer who doesn’t know much about OpenLayers. 
  
 If you have any queries please let me know. 
  
 Thanks, 
 Howard

i tried the second solution : put the map inside an update panel. It works pretty well.  
 I set the tool to be used with the clientside api, Map1.SetDrawMode(), the problem is each time I draw sth on the map, I make a postback to execute the process of merging intersecting etc the features and i lost the mode used. I know it is possible for me to change mode serverside but on client side it is faster. 
  
 thanks in advance

Sebastien,



Good to hear that you make it. The draw mode lost because we don’t synchronize the states which modified by client scripts just like normal web controls.



You still can handle the client states which are changed by client scripts. Please see the attached sample for detail.



Hope it helps. If you have any questions please let me know.



Thanks,

Howard



829-MapShapes.zip (2.16 KB)

do you confirm that  Map1.SetDrawMode(‘Modify’) in the clientside  is TrackMode.Edit in the serverside?

Sebastien, 
  
 Yes, they do the same thing that to change the map to the modify mode.  
  
 In my last demo, I have a hidden field which synchronizes the track mode to the server side. On the server side I use reflection to cast the string back to its real type. But I didn’t take care of all the situations for it’s a demo. 
  
 If you need synchronize modify mode please change saving “Modify” to “Edit” into the hidden field please. 
  
 Any questions please let me know. 
  
 Thanks, 
 Howard