你如何在Mathematica中渲染这样的地图? (例如美国各州和加拿大各省可单独着色?)http://upload.wikimedia.org/wikipedia/commons/archive/1/18/20071029031002%21North_America_map_coloured.svg
我尝试导入SVG路径并构建多边形(使用基于http://mathgis.blogspot.com/2009/11/make-us-county-thematic-map-using.html的方法),但它们看起来不如链接SVG中的曲线好。内置数据库似乎没有美国各州和加拿大各省的形状:只有国家。
谢谢!
PS:这样做的目的是能够制作州/省数据的等值区域图(即根据与该州/省有关的一些数据对州/省进行着色)
答案 0 :(得分:11)
您可以使用.kml或.kmz文件获取状态/省份和多边形的列表。例如,对于美国,您可以使用this file。要提取多边形,您可以执行类似这样的操作
usa = Import["http://code.google.com/apis/kml/documentation/us_states.kml",
"Data"];
transform[s_] := StringTrim[s, Whitespace ~~ "(" ~~ ___ ~~ ")"]
polygons = Thread[transform["PlacemarkNames" /. usa[[1]]] ->
("Geometry" /. usa[[1]])];
stateNames = polygons[[All, 1]];
然后多边形将是一个包含元素"state name" -> Polygon[points]
的列表。函数transform
只是一个辅助函数,用于从.kml文件中获取所需格式的PlacemarkNames(在这种情况下,从名称末尾剥离“(year)”)。
使用这些多边形,您可以使用FaceForm[]
为单个多边形着色。假设我们有一个"state" -> value
形式的数据列表,例如
data = Thread[regionNames -> RandomReal[{0, 1}, Length[regionNames]]];
然后我们可以根据
创建地图colourf = ColorData["Temperature"];
element[value_, poly_] := GraphicsGroup[{EdgeForm[Black], FaceForm[colourf[value]], poly}]
Graphics[{element @@@ Transpose[regionNames /. {data, polygons}]}]
看起来像
答案 1 :(得分:6)
在现有地图图像上使用某些图像处理怎么样?这只是一个原型工作流程。从Wolfram] Alpha和Mathematica中的图像处理集成的数据有很多东西需要探讨。你可以更详细地玩这些。我没有真正尝试使用人口数据并相应地为地图着色,但我认为这是可能的。函数MorphologicalComponents [...]检测边界之间的状态区域并对其进行索引。
map = WolframAlpha["Illinois", {{"Location:USStateData", 1}, "Image"}]
bmap = Binarize[map, .7]
dmap = ColorNegate@Dilation[ColorNegate@bmap, .75]
MorphologicalComponents[dmap] // Colorize
答案 2 :(得分:0)
概述状态的另一个选项从使用GeoGraphics功能开始:
GeoGraphics[
{
EdgeForm[Black],
Polygon[CountryData["UnitedStates", "AdministrativeDivisions"]]
}
GeoBackground -> None,
GeoProjection -> "Mercator"
]