Map creation is divided into several steps:

entering the geodata (which are points, lines and polygons with appropriate tags)

styling (specify feature appearance on the map)

rendering into a raster image (transform geodata and style into an image using rendering software)

You would want a tool that does all the quirks for you behind an easy to use UI. But unfortunately, there is no such tool (hopefully, there will be). So, you have to pick a dedicated tool for each step.

I use the following combination of tools/workflow:

Entering/downloading the geodata

JOSM editor: download a map from the osm server edit a map upload your changes to the osm server (why won't you share your work?) save a map to a *.osm file

PostGIS/osm2pgsql update the import style file if needed import a map to the local server



If you don't want to share your work, you can setup the local OSM server and make JOSM work with it (making saving a map to a *.osm file and using osm2pgsql unnecessary). Still, be aware of the license if you use parts of OSM data.

Styling

Styling consists of two steps:

setup layers/datasource

customize lines/poligons/points/text output.

There are two formats to style a map: "raw" mapnik style file and CartoCSS.

Mapnik is a rendering library which powers OSM site. Setup and edit mapnik style file open the style file in the mapnik viewer



A "raw" Mapnik style file is cumbersome to edit, and CartoCSS a simpler alernative. CartoCSS (previously Cascadenik) is convertable to mapnik style file. Tilemill is a tool I use to edit/preview CartoCSS.

Tilemill. Style/preview your map in tilemill export to mapnik *.xml file.



Rendering

Custom python script for mapnik Update bounding box/zoom level/size render map to *.png file.



[Optional] Bring your map online

Of course, you can just use a large *.png file for your map, but imagine how long it would take to download it! So you split your map into tiles at different zoom levels.

Tilemill -> Mapnik -> MBTiles -> Mapbox You can bring your map online by using Tilemill and MapBox.



Unfortunately, to update your map according to new OSM edits, you'll still have to download and render it locally.

So, there's a better solution: CartoDB. CartoDB supports CartoCSS. With it you don't need to install anything locally. Just import your data into it, style with CartoCSS and click share button. There's a free db size limit though. But since it's open source you can host it on your own. There's another limitation: you can only visualize either points or lines or polygons.

PS

Every tool has its own limitations, so try to experiment.