Update (15 FEB 2017)
In the light of new geo-functionality developments I would like to add another approach via GeoImage. Consider the magnitude of the geomagnetic field across the entire planet. Get the data:
data = QuantityMagnitude[
GeomagneticModelData[{{-90, -180.}, {90, 180.}}, "Magnitude",
GeoZoomLevel -> -2]];
Build high-res contour plot:
plot = ListContourPlot[data, PlotRangePadding -> 0,
ColorFunction -> "TemperatureMap", Frame -> False,
InterpolationOrder -> 2, ImageSize -> 800, Contours -> 20,
ContourStyle -> Opacity[.2]]
Specify how you would like to place this rectangle on the map (we use world range to show the application of geo-projection too):
GeoGraphics[{GeoStyling[{"GeoImage", plot},
GeoRange -> {{-90, 90}, {-180, 180}}], Opacity[0.6],
GeoBoundsRegion["World"]}, GeoRange -> "World",
GeoProjection -> "Robinson"]
Colored background interferes with colors of the heat map. Use just coastlines:
GeoGraphics[{
GeoStyling[{"GeoImage", plot},
GeoRange -> {{-90, 90}, {-180, 180}}], Opacity[.8],
GeoBoundsRegion["World"]}, GeoRange -> "World",
GeoProjection -> "Robinson", GeoBackground ->
{"Coastlines", "Land" -> White, "Ocean" -> White, "Border" -> Black}]
Older versions
Well I do not have your data, so I'll just show things I have. I'll go with India, it has nice cities layout. You can upgrade for your data yourself. If you know only locations of cities, but not their population, then
data = DeleteCases[
Reverse[CityData[#, "Coordinates"]] & /@ CityData[{All, "India"}],
Missing["NotAvailable"]];
Show[SmoothDensityHistogram[data, .3, ColorFunction -> "SunsetColors",
PlotPoints -> 150, Mesh -> 20, MeshStyle -> Opacity[.1], PlotRange -> All],
Graphics[{FaceForm[], EdgeForm[Directive[White, Opacity[.7]]],
CountryData["India", "Polygon"]}]]
If you know the population, then maybe something like this:
Graphics[{Opacity[0.1, Blue],
Cases[Disk[Reverse[CityData[#, "Coordinates"]],
Log[10.^12, CityData[#, "Population"]]] & /@
CityData[{All, "India"}], Disk[{__Real}, _Real]], {FaceForm[],
EdgeForm[Directive[Red, Thick, Opacity[.9]]],
CountryData["India", "Polygon"]}}, Background -> Black]
For US use something like:
data = DeleteCases[Reverse[CityData[#, "Coordinates"]] & /@
CityData[{All, "UnitedStates"}], Missing["NotAvailable"]];
Show[SmoothDensityHistogram[data, .5, ColorFunction -> "SunsetColors",
PlotPoints -> 150, Mesh -> 20, MeshStyle -> Opacity[.1], PlotRange -> All],
Graphics[{FaceForm[], EdgeForm[Directive[White, Opacity[.7]]],
CountryData["UnitedStates", "FullPolygon"]}],
AspectRatio -> Automatic, PlotRange -> {{-180, -65}, {20, 70}},
ImageSize -> 800, Frame -> False]