The "old" MapPoint 2004/2006 symbols recently came up in a couple of threads --
Need to Use 2006 Symbols in 2010 Using VBA
2006 MapPoint Symbols 297-301 Help!
so I figured we'd revisit this topic.
First, a little bit of background. MapPoint 2002 had 256 symbols which are available for download from Microsoft --
Download Pushpin images for Streets and Trips or MapPoint 2009 from Official Microsoft Download Center
Then, either with the MapPoint 2004 or 2006 version, Microsoft added an additional 80 symbols. These are available for download here --
With MapPoint 2009, Microsoft changed all the symbols and people complained, so Microsoft listened to their customers and brought back the old symbols starting with MapPoint 2010 and things have stayed the same since. In general, when I refer to MapPoint 2010 or 2013 in this article, whatever I am saying applies to all versions MapPoint 2010, 2011, and 2013.
The symbols brought back in MapPoint 2010 were not exactly the same however, there are some style differences. As you can see the MapPoint 2013 symbols are a bit bigger and prettier with a gradient while the MapPoint 2006 symbols were simpler.
It's not a huge difference, and I think you could make a case for either style and their readability on a map, but the difference is enough that some people might think the old MapPoint 2006 symbols would work better in some circumstances.
Here's another bunch.
Again, I'm not saying one set is necessarily better than the other in all cases, but it's nice to have the option to use the old or new one as one might be preferential for some maps.
So, being the mapping nerd that I am, I took it as a challenge to see if it's possible to automatically "downgrade" a MapPoint 2013 map using lots of different built-in symbols to a map using the equivalent MapPoint 2006 symbol. Note that the goal is not to downgrade the map to a MapPoint 2006 PTM file so that MapPoint 2006 can open it, but just to convert the symbols in the MapPoint 2013 map to be the old style symbols.
In general, I was successful, but there were some hurdles.
The first step in doing this was to set up a blank MapPoint 2013 map with all of the 336 MapPoint symbols imported into it. To do this, I downloaded all of the symbols above, and then imported them using the Symbol import tool from PushpinCity.com.
You can download the PTM here. This is a MapPoint 2013 North America map with all of the 336 MapPoint 2006 symbols imported as custom symbols. I posted this as a MapPoint Map Template PTT file, so you can swap this in for your default template or use it as a template to create a new map, and then copy/paste your datasets/layers into the new map.
There is roughly a 1 to 1 correspondence between the two symbol sets, at least it starts out that way.
However, when you get down past the basic triangles, there starts to be differences. At this point, the MapPoint 2013 symbol sets inserts eight flags, after which it picks up again with the old cross symbols. The 2006 set DOES have the flag symbols, but they are down lower in the list starting at 286.
A couple currency symbols and the numbers 21-50 are also re-positioned. The 2013 set has an additional 12 symbols that have no equivalent in the 2006 set.
You can download an Excel sheet listing all of the equivalents here.
So now that we have this equivalency list, and a single map PTM file with all of the symbols (both the MapPoint 2013 and 2006 symbols), we need two more things to complete this exercise.
- A test map with lots of different MapPoint 2013 symbols, set at both the dataset and individual Pushpin level.
- A script to loop through the Pushpins and dataset and set the symbol to be the equivalent 2006 symbol.
Here are before and after screenshots of our map.
Perhaps my four year old laptop can't take advantage of and properly render the new higher-res prettier Symbols, but at least in this screenshot, the older Symbols are less "diffuse" in my opinion and have more visual "pop", lending towards a more readable map. Thus, at least in the way my computer is rendering the Symbols, I think this effort has been a worthwhile undertaking.
Regarding the code, first, because of the shifting of the Flags and Currency Symbols, to find the equivalent ID is not a simple addition problem such as newID = oldID + 398, but without too many lines of code you could set up ranges. e.g if oldID < 164 then newID = oldID + 398, but I'm too lazy for this, and I think it's too prone to typos/error. Instead I just used Excel to generate the code for me and then pasted it into an Excel VBA module.
First, if it doesn't match one of the 2010/2013 symbol id's, i.e. it's already a custom symbol or one of the 12 new ones that has no equivalent, it's just going to return the same ID. Then if it does match, it overwrites that and returns the 2004/2006 equivalent ID.Code:Public Function newID(symID As Integer) As Integer newID = symID If symID = 0 Then newID = 398 If symID = 1 Then newID = 399 If symID = 2 Then newID = 400 If symID = 3 Then newID = 401 If symID = 4 Then newID = 402 ...
The code for the actual converter subroutine is quite simple.
Note that when you change the Symbol on a Dataset manually via the MapPoint interface it automatically changes the symbol for ALL of the Pushpins in that dataset. Luckily, the behavior is different when setting it programmatically. It DOES NOT change all the symbols of the associated Pushpins. Otherwise this code would be a lot more complicated. We would have to use Arrays or Dictionaries to keep track of the Pushpin's symbols.Code:Sub ConvertSymbolsFrom2013to2006() Dim APP As Object Set APP = GetObject(, "MapPoint.Application") Dim MAP As Object Set MAP = APP.ActiveMap Dim DS As Object Dim RS As Object For Each DS In MAP.Datasets DS.Symbol = newID(DS.Symbol) Debug.Print "Starting Dataset: " & DS.Name Set RS = DS.QueryAllRecords RS.MoveFirst Do While Not RS.EOF RS.Pushpin.Symbol = newID(RS.Pushpin.Symbol) RS.MoveNext Loop Next End Sub
Another note: the program above takes care of all the basic Pushpin datasets. It would not work for Multiple Symbol datasets, though it probably could. If you wish to do it, please comment below. I think we would need to explore the DataMap object. I poked around for ten minutes and didn't see where to read the current symbols, but of course you can set new ones with the DisplayDataMap(...) method.
So, while this may all have seemed a bit of a neanderthalic effort (no offense to neanderthals) to resist change and revert back to the old symbols, I can certainly understand some people's point of view that the old symbols without the gradient are simpler and easier to read on a map in some circumstances. Also, we've demonstrated a script to mass-convert symbols on a map at both the dataset and individual pushpin levels.
Put another way, one of the "fixes" or features in MapPoint 2010 is that you could open up MapPoint 2004/2006 maps and the Symbols would stay the same. (This had been a problem with MapPoint 2009 where the Pushpin Symbols would all get changed.) However, after opening the map in MapPoint 2010, the Symbols wouldn't be exactly the same as exhibited by the screenshots above showing the differences between the MapPoint 2013 and MapPoint 2006 Symbol styles. What we have demonstrated in this article is how to keep the symbols exactly the same (albeit with additional steps).
Questions, comments, or what else would you like to see? Please place comments below.