JVectorMap API 之 Converter

如果你对JVectorMap不太了解,请先阅读《开源JS地图插件JVectorMap介绍》。

Converter 是 JVectorMap 提供给我们把 shapefile 数据文件转化为地图数据的转化器。它是基于 Python 编写的,官方建议版本 >=2.7(貌似 3.x2.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_filestring输出文件,结果是jVectorMap可用的SVG或者JSON文件,格式为.js
--scalefloatSVG的宽度大小。注意:此选项貌似没有被脚本用到,可以参考--width选项
--country_code_indexint国家(地区)代码索引,作为jVectorMap中区域的唯一代码标识,索引从0开始;您可以使用诸如ogrinfo的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。
--country_name_indexint国家(地区)名称索引,作为jVectorMap中区域的唯一标签标识,索引从0开始;您可以使用诸如ogrinfo的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。
--codes_filestring国家(区域)代码名称映射表,行内分隔符使用TAB,格式为:<code> <TAB> <name>,例如:DE Germany;务必确保代码和名称匹配。
--wherestring可选的标准,用来限定也用来排除,比如:"ISO = 'DEU'" 表示只选择德国数据;"ne_10m_adm != 'ATA'"表示不包括南极洲。
--widthfloat指定影响所产生的SVG规模的宽度。
--insetsstring允许额外的指定JSON数据插入;插入的JSON数据需要是数组格式。
--minimal_areafloat区域面积。用来过滤多边形区域。
--buffer_distancefloat国家边界距离,默认-0.4
--simplify_tolerancefloat到什么程度的矢量路径可以被简化。较大的值会导致更少的信息/细节,但文件会更小。如果未指定或为零此选项,简化不会生效。
--viewportstring使用指定的区域裁剪矩形视图,格式为:--viewport "<lng1> <lat1> <lng2> <lat2>",例如:--viewport "9.6 48.1 11.3 51.4".
--longitude0string坐标系水平中心(中央子午线)的经度
--projectionstring使用投影的方式,分别为:
merc (Mercator)
mill (Miller Cylindrical)
aea (Albers Equal Area)
lcc (Lambert Conformal Conic)
--namestring地图的名称,默认:“world”
--languagestring两个字母的语言代码,比如:cnde;默认为:en
--input_file_encodingstring输入文件的编码,如:“utf-8”,默认“iso-8859-1”。
--precisionint精度,默认2

获取地图数据源

官方使用的数据源:

结束语

感谢JVectorMap 给我们提供了这么完善的工具,不过使用时发现程序有小Bug(和JSON处理有关),后面我会把修改过的文件共享给大家,敬请期待。

发表评论