TileMill是一款免费的地图设计工具,他的特色在于可自定义程度极其丰富,利用CSS就可以更改地图中海洋、国家边界、道路等各种元素的颜色和样式,小到精确到街道,大到国际、洲际地图都可以做,同时也能导出图片或者矢量格式方便使用。
主要功能:
1、支持 ESRI Shapefile, KML, GeoJSON, GeoTIFF, PostGIS, and SQLite数据来源。
2、新版本支持大数据量栅格数据的加载与显示,支持山体阴影,分层设色等功能。
3、支持数据的查询,也就是属性数据的浏览。
4、支持以Carto css样式语言对地图进行配色设计(比xml要方便很多)
5、支持svg图标,truetype字体样式等,基于Mapnik提供(mapnik2.0出来了又强大了不少)
6、支持地图tooltip、图片、图表、utf-8 Grid(不是很了解这个技术)等自定义信息提示
7、支持直接发布到Mapbox,和朋友共享你制作的地图。
使用方法:
1、软件主界面:
我使用的0.10.0(目前最新版),软件左侧的五个按钮依次为:进入编辑模式、打开工程目录、一个简单的软件指南、插件选项以及设置按钮。
软件界面很友善,感兴趣的童鞋自己试一下就基本了解几个按钮的功能了。下面仅以一个简单的例子来制作一个地图。
首先点击左端的 Projects 按钮,可以看到,软件已经内置了几个样例工程,对于初学者,这几个样例还是有很大帮助的,建议仔细研究一下。这里不多说。
点击New project,我们新建一个工程,填写一个文件名称,点击add。一幅简单的世界地图已经在我们眼前了。可是我们还没有添加任何数据,写任何代码呀?其实这是工程在创建的时候,自动为我们加载的。这时候在软件界面的左下角,多了4个按钮,依次为模板、字体、一个简单的Carto说明以及图层按钮(重要)。界面右边的大半部分都是地图样式编辑区域,tilemill使用.mss文件来定义导入的地图数据的样式。又上角为保存和导出按钮。
我们点击左下角的Layers(图层)按钮,可以看到,软件已经为我们加载了一个数据。这便是显示在我们地图界面的世界轮廓数据。在样式编辑区域,已经有一个style.mss文件,定义了世界轮廓的显示样式:
Map {
background-color: #b8dee6;
}
#countries {
::outline {
line-color: #85c5d3;
line-width: 2;
line-join: round;
}
polygon-fill: #fff;
}
我们看到,定义了地图背景为淡蓝色(海洋),大陆的轮廓(outline)样式以及大陆板块的颜色。
地图的数据的添加跟这个原理是一样的,1、引入地图数据 2、定义相应数据显示样式
添加图层方法:
TileMill 可以从文件、SQLite 和 PostGIS 读取图层。这里演示从 PostGIS 读取 OSM 数据。演示假设您已经熟悉 OSM 数据的结构。您可以通过 pgAdminIII 或 QGIS 、Open Jump 等桌面 GIS 系统了解 OSM 数据。
从 PostGIS 导入数据。首先,点击图层按钮(|LAYER|)并选择 ‘+ Add layer’ 添加图层。在 ‘Add layer’ 中选择数据源类型为 PostGIS:
从 PostGIS 添加道路(roads)图层。选择图层后点击 ‘Save & Style’ 确认:
ID: osm_roads
Class: osmroads
Connection: host=localhost port=5432 user=user password=user dbname=osm_local
Table or subquery: planet_osm_roads
Unique key field: osm_id
Geometry field: way
SRS: Select WGS84
从 PostGIS 导入 osm_line 图层,选中后点击 ‘Save & Style’ 确认:
ID: osm_line
Class: osmline
Connection: host=localhost port=5432 user=user password=user dbname=osm_local
Table or subquery: planet_osm_line
Unique key field: osm_id
Geometry field: way
SRS: Select WGS84
从 PostGIS 导入 osm_points 位置点图层,选中后点击 ‘Save & Style’ 确认:
ID: osm_points
Class: osmpoints
Connection: host=localhost port=5432 user=user password=user dbname=osm_local
Table or subquery: (select osm_id, amenity, way from planet_osm_point where amenity is not null) AS amen
Unique key field: osm_id
Geometry field: way
SRS: Select WGS84
在 osm_points 图层中只选择了来自 osm_local 的一个子集,以保证其设施类型(amenity)属性非空。