Map # is a numeric value. For desktop applications, I believe this is usually used by the developers as the identifier for screens/fields etc. e.g. 000000034.
Map Id is an alphanumeric value, which is usually a human readable (ish) name assigned to the map # so ordinary people can figure out what 000000034 relates to.
e.g. Map #: 000000034 Map Id: AMAZING_WIDGET
Traditionally, the developers provided a .h file to the tech writer, containing their map numbers and map ids, and the tech writer, using the map id, assigned each number to the applicable help topic.
However, it is also possible for the tech writer to generate both the map numbers and map ids, and the developer to then assign the map numbers to the applicable screens within the application.
To further confuse things, I believe web developers wouldn't normally use a map number. I *think* they use the map ids, and the map # would simply be used by the tech writer in order to use the context sensitive mapping tool in Robohelp. (I can't confirm this, however - it is based on a long, convoluted discussion with a web developer when (unsuccessfully) trying to get context sensitive help set up for a web application.)