ThinkGeo.com    |     Documentation    |     Premium Support

Fonts as points?

(Pardon me if I get some of the naming conventions wrong - I am porting a MapInfo ship-tracking application & am more used to MapInfo terminology)


Is it possible to use Windows fonts as symbols/points? For example WingDings or other fonts that have symbols in them.


And if possible, is it possible to rotate these symbols & colour them as can be done in MapInfo?


(Mapinfo can also assign border (dark outline) or halo (white outline) and can have the font symbol size changeable as well - that would be a bonus!)


I have attached a picture of how things look in MapInfo and what I am trying to achieve using Map Suite Desktop Edition. Only the arrow shaped ship symbol is rotated though it would be possible to rotate the other two. The small dots are the trails where the ships were before. I also censored the labels (which are the next thing I would like to get working somewhat similar to MapInfo).




David, 
  
   You can use the PointStyle as it is supports characters, symbols and bitmaps.  For specifying characters you would need to do the following.  (Sorry I don’t have VS in front of me so I am going from the online API documentation) 
  
 1. Set the PointStyle.PointType to the Character enumeration. 
 2. You can use whatever font you want using the PointStyle.CharacterFont, this is also where you control the size. 
 3. You control the specific character by the PointStlye.CharacterIndex 
 4. You can adjust the brush of how it is drawn using the PointStyle.CharacterSolidBrush. 
 5. You can adjust the rotation using the PointStyle.RotationAngle 
  
   The only thing I could not find was the halo.  I know we support halos for the TextStyle but may have overlooked it for the point character stuff.  If that is important we can go ahead and add that.  Just let me know. 
  
 David

David, 
  
   One more thing that I forgot on the last post.  We have a pretty extensive icon library that is pretty cheap and royalty free.  You may want to check it out.  Typically if there are icons you need that are not in there we can create them as well.  They really help the app pop and come as transparent PNGs of various sizes and colors!  Below is a link to some of the samples. 
  
 gis.thinkgeo.com/Products/StandaloneMapDataIconLibraries/MapSuiteIconLibrary/SampleImages/tabid/537/Default.aspx 
  
 David


Thanks for the quick reply. As you can see, this worked ok. I can't see how to get the black outline & the halo would be useful to add to the wishlist as we have quite a few customers that we would like to migrate to this new version. They are familiar with halo & outline to differentiate their vessels.


My next step is to figure out how to rotate & colour each individual vessel. There is a sample project but I am having trouble getting it to work or translate to VB so far.


Thanks,




Dave


 


 


 



 David,


 
  I saw that sample, it was created when the Desktop Edition was in Beta so a few of the APIs have changed since then.  We will work you up a sample for that.  I will also see about the halo pan and outline.  I know the halo will be easy and the outline should be as well but I have less experience with the outline.
 
  If you do not have tons of items to display you could use the MapShapes layer.  This was designed so that every feature can have its own symbolism and zoom levels.  It is best used if you have less than 1,000 items.  After you reach that threshold it is better to go a different route.  The other route would be to put the items in an InMemoryFeatureLayer and then use the styles to key off of different column values such as color, rotation value its.  You can also pretty easily create your own custom style that can do this.  If you are interest I am adding the links to a few videos that are really good, I highly recommend them.  You will learn allot about the terminology and what is possible.
 
Videos: gis.thinkgeo.com/Products/GISComponentsforNETDevelopers/MapSuiteDesktopEdition/Videos/tabid/679/Default.aspx
 
I suggest you watch the following:
1. Extending Map Suite: Creating Custom Styles
2. Extending Map Suite: Integrating Custom Data Formats
3. Extending Map Suite: Exploring Layers
 
Also here is the code for map shapes. 
 


            MapShapeLayer mapShapeLayer = new MapShapeLayer();

            MapShape mapShape1 = new MapShape(new Feature(10,10));
            mapShape1.ZoomLevels.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1;
            mapShape1.ZoomLevels.ZoomLevel01.DefaultPointStyle.RotationAngle = 45;
            // add whatever other style you want..
            mapShape1.ZoomLevels.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            // Add as many map shapes as you need
            mapShapeLayer.MapShapes.Add("shape1", mapShape1);

            LayerOverlay mapShapesOverlay = new LayerOverlay();
            mapShapesOverlay.Layers.Add("MapShapes", mapShapeLayer);

            winformsMap1.Overlays.Add(mapShapesOverlay);


 
David

David, 
  
   I just realized I added the sample above in C#.  If you have any issue figuring this out let me know and I can convert it.  I am just so used to C# though my background is VB going back to version 1.  We used VB.NET here for the first two version of Map Suite but then switched to C#, enough history for now I suppose.  Let me know if you have any questions or issues. 
  
 David

I will look into MapShapes layer as well - we do expect to have less than 1000 vessels on a map - probably less than 500. However, the vessels are all updating, some of them every 30 seconds, so whatever I use has to keep up with the movement. And each vessel will change rotation as it moves, to match the course made good. Also each vessel needs to have a label which will need to be updated each time as well. Each vessel will potentially be different shape, size & colour with different attributes such as halo or outline.


We will then later need to add targeting - calculating distance to the appropriate destination (easier at sea - usually a straight line!) and region reporting - detecting leaving & entering port, etc.


And then to complicate matters more I will have another layer (or maybe 2) which will show the previous positions of the vessels as trails - both points & connecting lines. Typically we have about 3000 trail points per day for our fleet and try to show at least 2 days worth at a time. So, that layer is getting big. I will tackle that one later.


So, it seems there are a lot of different ways to do things! Deciding which is the hard part, especially when I am new to the software, though I have programmed with MapInfo (MapBasic) & VB for 15 years or so. I have a lot to learn about Canvas, DrawCore & MapShapeLayer now - that should keep me busy for a while! But will definitely appreciate it if that sample can be brought up work with the current version - I can muddle through if it is in C# as long as it works (though VB.Net would save a LOT of time!).


Thanks,


Dave



David,


Thanks for your post and feedback.
 
Now, I made a VB sample with MapShape used in Desktop Edition, it is attached, while unfortunately the data is too large to be attached alongside. So you probably need to reference the DLLs to compile it and need to get the data(Countries02.shp and 2 png files) included in the data folder.
 
Hope it helps and  this is what we can start for your application.
 
Thanks.
 
Yale

DesktopMapShapeVBSample.zip (14 KB)

I got some errors after opening in VB.Net 2008:


Error    5    Type 'MapShapeLayer' is not defined.    C:\Documents and Settings\David\My Documents\Visual Studio Projects\ThinkGeo\DesktopMapShapeVBSample\Post7945Sample\Form1.vb    16    34    Post7945Sample

 


Error    6    Type 'MapShape' is not defined.    C:\Documents and Settings\David\My Documents\Visual Studio Projects\ThinkGeo\DesktopMapShapeVBSample\Post7945Sample\Form1.vb    18    30    Post7945Sample

 


(the 2nd error occurs 4 times but all for the same reason.


 


It also came up with 4 warning - not sure if they are the cause of the errors:


Warning    1    Could not resolve this reference. Could not locate the assembly "NetTopologySuite". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.    Post7945Sample

 


Warning    2    Could not resolve this reference. Could not locate the assembly "GeoAPI". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.    Post7945Sample

 


Warning    3    The referenced component 'GeoAPI' could not be found.     

 


Warning    4    The referenced component 'NetTopologySuite' could not be found.     


 


I am trying to sort these out now. By the way, there is a website that can convert C# code to VB.Net code:


developerfusion.com/tools/convert/csharp-to-vb/


It didn't do a perfect job but is a good start.

 



David, 
  
 That is strange. The solution sample pasted above DesktopMapShapeVBSample.zip complete sample application targeting in VS2008 and I double checked that it works fine. Could you reference all the DLLs(4 DLLs) in the folder and get me a screenshot if problem is still there? 
 C:\Program Files (x86)\ThinkGeo\Map Suite Desktop Full Edition 4.0\Developer Reference\Desktop Edition 
  
 Any more questions just feel free to let me know. 
  
 Thanks. 
  
 Yale 


Ah, could it be the problem that I am still using MapSuiteCore:3.1.299;DesktopEdition:3.1.299? Was MapShape & MapShapeLayer only added in V4?



 



David, 
  
   That is most likely the case.  I highly suggest you upgrade to the latest version.  We are backwards compatible so it should all work out well.  It is going to slow down issue resolution by staying on the older version.  Especially if you have an issue or an enhancement you want, you will end up going with the newest version anyway. 
  
 David