• jvectormap中的地图转换器的使用注意事项
    时间:2014-07-16   作者:mikakun   出处:github.com

    JVectorMap是一个优秀的、兼容性强的jQuery地图插件。它可以工作在包括IE6在内的各款浏览器中,矢量图输出,除官方提供各国地图数据外,用户可以使用数据转换程序定制地图数据。本文主要介绍其提供的地图数据转化工具的使用和注意事项。

    从哪儿可以下载地图数据

    1. jVectorData ready-to-go maps
    2. Natural Earth map data

    converter.py需要哪些包

    对于普通的Linux操作系统

    1. dev-lang/python <= 2.x
    2. sci-libs/gdal USE="python geos"
    3. sci-libs/geos USE="python"
    4. dev-python/anyjson

    5. 手动安装: Shapely

     $ tar xf Shapely-*.tar.gz && cd Shapely-*
     $ python2 setup.py build
     # python2 setup.py install

    对于Debian/Ubuntu

    # apt-get install python-anyjson python-gdal python-shapely

    converter.py的用法

    1. README.md, which includes a conversion example
    2. Program synopsis is converter.py [option]... <input_file> <output_file> , also run converter.py --help for details
    3. The default values of all command line options can be looked up in the converter.py source code, e.g. parser.add_argument('--name', type=str, default='world')

    converter.py 参数详解

    input_file 输入文件, 一般情况下是 *.shp格式的文件

    output_file 输出文件,结果是jVectorMap可用的SVG或者JSON文件,格式为.js

    --scale (float) SVG的宽度大小。注意:此选项貌似没有被脚本用到,可以参考--width选项

    --country_code_index (int, 0) 国家(地区)代码索引,作为jVectorMap中区域的唯一代码标识,索引从0开始;您可以使用诸如ogrinfo的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。

    --country_name_index (int, 1) 国家(地区)名称索引,作为jVectorMap中区域的唯一标签标识,索引从0开始;您可以使用诸如ogrinfo的工具来确定索引。注意索引务必唯一,否则地图将会有丢失的区域。

    --codes_file (str, "") 国家(区域)代码名称映射表,行内分隔符使用TAB,格式为:<code><TAB><name>,例如:DE    Germany;务必确保代码和名称匹配。

    --where (str, "") 可选的标准,用来限定也用来排除,比如:"ISO = 'DEU'" 表示只选择德国数据;"ne_10m_adm != 'ATA'"表示不包括南极洲。

    --width (float) 指定影响所产生的SVG规模的宽度。

    --insets (str) 允许额外的指定JSON数据插入;插入的JSON数据需要是数组格式。

    --minimal_area (float) 不清楚含义

    --buffer_distance (float, -0.4) 国家边界距离

    --simplify_tolerance (float) 到什么程度的矢量路径可以被简化。较大的值会导致更少的信息/细节,但文件会更小。如果未指定或为零此选项,简化不会生效。

    --viewport (str) 使用指定的区域裁剪矩形,格式为:--viewport "<lng1> <lat1> <lng2> <lat2>",例如:--viewport "9.6 48.1 11.3 51.4".

    --longitude0 (str, "0") 坐标系水平中心(中央子午线)的经度

    --projection (str, "mill")

    使用投影的方式,分别为:
    merc (Mercator)
    mill (Miller Cylindrical)
    aea (Albers Equal Area)
    lcc (Lambert Conformal Conic)

    --name (str, "world") 地图的名称

    --language (str, "en") 两个字母的语言代码,比如:cn,de

    --input_file_encoding (str, "iso-8859-1") 输入文件的编码,如:“utf-8”

    --precision (int, 2) 精度

    生成地图数据

    $ python2 converter.py --width 900 --longitude0 11.5 --name world --projection mill --language en public_map_data.shp map_world_mill_en.js

    生成德国数据

    $ python2 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

    自然地球数据的第二版,不再用iso属性,替而代之的是iso_a2

    --where "iso_a2 = 'DE'"

    手动获取地图数据

    1. Shapefile 格式
    2. 工具 ogrinfo (which makes use of GDAL)

    3. Support-test and list layers

    $ ogrinfo ne_10m_admin_1_states_provinces_shp.shp
    INFO: Open of `ne_10m_admin_1_states_provinces_shp.shp'
          using driver `ESRI Shapefile' successful.
    1: ne_10m_admin_1_states_provinces_shp (Polygon)

    4. Get all data of layer by layer name

    $ ogrinfo -ro ne_10m_admin_1_states_provinces_shp.shp ne_10m_admin_1_states_provinces_shp

    5. Limiting results with provided WHERE-Clause using argument -where <condition>. In this example, only list rows where field ISO is DEU (Germany).

    $ ogrinfo -ro -where "ISO = 'DEU'" ne_10m_admin_1_states_provinces_shp.shp ne_10m_admin_1_states_provinces_shp

    或者在你转化之前,先使用SAGA-GIS制作你的shapefile,它非常容易上手,界面友好,在Ubuntu上你可以从软件中心下载

    1. load your natural earth 10m file

    2. workspace/modules/shape tools/select by attribute to select all the region you need

    3. workspace/modules/shape tools/copy selection to new shape layer

    4. workspace/Data/right click on your new layer -> add to map; remove natural earth layer (will free some memory)

    5. workspace/Data/right click on your new layer/attributes/show remove unnecessary fields(most of them, just keep the first one -the code- and the name), update attributes as per your app requirements

    6. workspace/Data/save as shp

    7. use the converter on that shape file, you'll just need to set tolerance, width, language & name

    $ python2 /path/to/converter.py \
       --width 500 \
       --simplify_tolerance 0.044 \
       --buffer_distance -0.3 \
       --projection mill \
       --name ex \
       --language en \
       /path/to/yourcustommadeshapefile.shp \
       /path/to/jquery-jvectormap-ex-mill-en.js


    NB: tolerance is relative to the size of shape file (if shape file is the world you'r looking at value around 1000 min, if it is just a country made using this method it is around 0.02 -

    depending on its size & the level of details you're after

    转自:https://github.com/datag/jvectormap/wiki/Map-converter-notes

    网友留言/评论

    我要留言/评论

    相关文章

    浅谈Heatmap:在自然界之中,蛇的眼睛有夜视功能,即便是茫茫黑夜,它也能轻而易举的找到猎物,这是因为任何物体都会辐射热红外,且辐射的高低和温度成正比,由于生命体的体温会明显高于周围环境的温度,所以在蛇眼面前便无处遁形。热红外成像被广泛应用于军事领域,士兵带上能识别热红外的眼镜后能轻而易举的发现藏匿的敌人。
    GEOS介绍和安装:GEOS是“Geometry Engine, Open Source”的含义,提供了OGC规范中简单几何要素对象操作的C++语言的实现。在地理信息系统领域,拓扑模型是重要的,其计算方法简单但是难得以实现。使得GEOS不同于其他项目的也正是“空间谓词”与“空间操作”。空间谓词是比较两个空间对象并返回一个布尔变量值作为结果,它表明了存在于两个空间对象之间特殊的关系。比如典型的空间谓词有Contains(), Intersects(), Touches(), and Crosses()函数等。GEOS项目中对该些函数的实现是异常强壮的,即使是奇异几何对象或是临时的坐标系统运算也不能使其运算不正常或计算错误。目前绝大多数的商业软件仍然在最基础的空间谓词处理上相对成熟,这正是GEOS项目的重要意义。“空间操作”则主要是对两个几何对象进行计算并且返回一个新的几何实体。比较典型的操作函数如Difference(), Union()以及Buffer()等。GEOS中的操作算法已经被广泛的经过了测试。GEOS类库被各类开源空间信息软件项目广泛应用,使用GEOS,它们可以基于最新的规范的几何实体来完成,同时也拥有了复杂空间方法的实现。
    有关技术管理经理的一些思考:这些天里工作的环境发生了一些微小的变化,可能以后对基层开发的程序员也会有更加具体的影响。上周参加 Open Party 时,重点听了《那些失败的项目们》,分析了一个项目的提出、实施,直到最后失败的过程。我也在想一个技术团队究竟应该用怎样的一种管理方式,才能让技术团队的效率达到更优。
    如何成为一位优秀的创业CEO:做创业公司的 CEO 可以说是世界上最有挑战性的事情之一。你得让客户喜欢你的产品,得组建团队,还要想办法从客户、合作者和投资者那里拿到资金;并且要指导整个工作流程的优化。
    关于独立游戏开发5个过程的相关建议:作为一名独立游戏开发者,在制作游戏过程中尽量多学些东西这一点极为重要。我认为这一过程包含以下几个步骤:1.想法 2.原型 3.迭代 4.测试 5.完工。我希望针对这个过程的每个阶段提供一些对你们有所帮助的建议,以便你们加快开发速度,提升游戏质量。
    代码审查:好事?坏事?:在软件开发领域,代码审查看起来是一个少有争议、相当平和的话题。
    如何避免重构带来的危险:重构代码很危险,它会给测试工作增加巨大的负担。除非你的程序需要重构,一定不要轻易重构代码。我这里所说的并不是把一个for循环改成while循环,或把一个StringBuffer改成StringBuilder,我说的是大动作,例如重写一个方法,一个函数,甚至整个类或包。如果你缺乏对一个方法或一个类的了解,那你重构它的条件就不充分。即使你有一个天才的计划,你也需要和团队一起设计其中重大的修改。
    Facebook如何提高软件质量?:刘彪是微软测试技术团队的一名软件设计工程师,他在自己的博客上分享了Facebook如何提高软件质量的原则、手段和背后的原因。
    程序员如何保持优秀:优秀便接近成功,金钱和名望比较难以控制。
    关于实施有效站会(Stand-Up Meeting)的三个技巧:通常的站会(tand-Up meetings)的形式总是让我感觉有点怪怪的。它有时会造成一些并不期望的效果。这篇文章里,我将向大家介绍一些在我们blossom公司里经过修改后的站会措施。