如果你对JVectorMap
不太了解,请先阅读《开源JS地图插件JVectorMap介绍》。
Converter
是 JVectorMap
提供给我们把 shapefile
数据文件转化为地图数据的转化器。它是基于 Python 编写的,官方建议版本 >=2.7
(貌似 3.x
与 2.x
语法有不少区别,不要使用 3.x
以及以后版本)。另外还需要依赖库 Anyjson , GDAL 和 Shapely 。
Converter依赖库安装
Linux
下手动安装
# install anyjson $ wget https://pypi.python.org/packages/source/a/anyjson/anyjson-0.3.3.tar.gz $ tar zxvf anyjson-0.3.3.tar.gz && cd anyjson-0.3.3 $ python setup.py build && python setup.py install # install Shapely $ wet "https://pypi.python.org/packages/source/S/Shapely/Shapely-1.4.0.tar.gz#md5=8194c567cfdcfe0b458e041366924270" $ tar zxvf Shapely-1.4.0.tar.gz && cd Shapely-1.4.0 $ python setup.py build && python setup.py install # install GDAL $ wget https://pypi.python.org/packages/source/G/GDAL/GDAL-1.11.0.tar.gz $ tar zxvf GDAL-1.11.0.tar.gz && cd GDAL-1.11.0 $ python setup.py build && python setup.py install
如果有 easy_install
,还可以用它来安装。
$ easy_install GDAL $ easy_install anyjson $ easy_install shapely
如果是Debian
/Ubuntu
$ apt-get install python-anyjson python-gdal python-shapely
另外还可以使用 yum
等工具安装,这儿就不再介绍。
Converter 用法
你可以阅读README.md
,里面有转化器的用法示例,一般用法为:converter.py
[option
]… <input_file
> <output_file
>,你也可以使用 converter.py --help
或者查看源码了解详细信息。
# 生成德国数据 $ python converter.py \ --width 1000 \ --country_name_index 4 \ --country_code_index 30 \ --longitude0 10.71 \ --where "ISO = 'DEU'" \ --projection aea \ --name datag_germany \ --language en \ 10m-admin-1-states-provinces-shp/ne_10m_admin_1_states_provinces_shp.shp \ ../tests/assets/jquery-jvectormap-data-germany-aea-en.js
Converter 参数
参数 | 类型 | 描述 |
---|---|---|
input_file | string | 输入文件, 一般情况下是 *.shp格式的文件 |
output_file | string | 输出文件,结果是jVectorMap 可用的SVG 或者JSON 文件,格式为.js |
--scale | float | SVG 的宽度大小。注意:此选项貌似没有被脚本用到,可以参考--width 选项 |
--country_code_index | int | 国家(地区)代码索引,作为jVectorMap 中区域的唯一代码标识,索引从0开始;您可以使用诸如ogrinfo 的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。 |
--country_name_index | int | 国家(地区)名称索引,作为jVectorMap 中区域的唯一标签标识,索引从0开始;您可以使用诸如ogrinfo 的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。 |
--codes_file | string | 国家(区域)代码名称映射表,行内分隔符使用TAB ,格式为:<code> <TAB> <name> ,例如:DE Germany ;务必确保代码和名称匹配。 |
--where | string | 可选的标准,用来限定也用来排除,比如:"ISO = 'DEU' " 表示只选择德国数据;"ne_10m_adm != 'ATA' "表示不包括南极洲。 |
--width | float | 指定影响所产生的SVG 规模的宽度。 |
--insets | string | 允许额外的指定JSON 数据插入;插入的JSON 数据需要是数组格式。 |
--minimal_area | float | 区域面积。用来过滤多边形区域。 |
--buffer_distance | float | 国家边界距离,默认-0.4 |
--simplify_tolerance | float | 到什么程度的矢量路径可以被简化。较大的值会导致更少的信息/细节,但文件会更小。如果未指定或为零此选项,简化不会生效。 |
--viewport | string | 使用指定的区域裁剪矩形视图,格式为:--viewport "<lng1> <lat1> <lng2> <lat2>" ,例如:--viewport "9.6 48.1 11.3 51.4" . |
--longitude0 | string | 坐标系水平中心(中央子午线)的经度 |
--projection | string | 使用投影的方式,分别为:merc (Mercator)mill (Miller Cylindrical)aea (Albers Equal Area)lcc (Lambert Conformal Conic) |
--name | string | 地图的名称,默认:“world” |
--language | string | 两个字母的语言代码,比如:cn ,de ;默认为:en |
--input_file_encoding | string | 输入文件的编码,如:“utf-8 ”,默认“iso-8859-1 ”。 |
--precision | int | 精度,默认2 |
获取地图数据源
官方使用的数据源:
结束语
感谢JVectorMap
给我们提供了这么完善的工具,不过使用时发现程序有小Bug
(和JSON
处理有关),后面我会把修改过的文件共享给大家,敬请期待。