在svg中绘制地理数据

svgis的Python项目详细描述


空间地理信息系统

Build StatusCoverage Status

从vector geodata文件(shp、geojson等)创建svg图形。

SVGIS非常适合:创建小倍数,在一个合理的投影中组合大量数据集,以及根据源数据中的类绘制样式它非常适合在绘图程序中创建用于编辑的基本地图,其基于CSS的样式为样式提供了极大的灵活性。

svgis draw input.shp -o out.svg
svgis draw south_dakota.shp north_dakota.geojson -o dakota.svg
svgis draw england.shp scotland.shp wales.shp --style gb.css -o great_britain.svg

文档:http://pythonhosted.org/svgis

安装

需要fiona,而这又需要gdal。

安装步骤:

在os x上:brew install gdal(需要Homebrew

在Linux上:sudo apt-get install libgdal1-dev

在Windows上:请参见OSGeo4W

然后:

pip install svgis

svgis的一个可选功能是将多边形剪裁到边界框。如果只需要绘制非常复杂的特征的一部分,这将加快速度

要支持剪切输出形状,需要GEOS库:

  • 苹果操作系统x:brew install geos
  • Linux系统:sudo apt-get install geos
  • windows:geos是osgeo4w的一部分,所以你有它!

然后,使用稍有不同的命令安装svgis:

pip install svgis[clip]

命令

svgis命令行工具包括几个实用程序最重要的是svgis draw,它根据输入的地理数据层绘制svg地图。

其他命令:

  • svgis bounds:获取给定投影中图层的边界框
  • svgis graticule:在给定范围内创建一个网格
  • svgis project:确定(可选)为给定的边界框生成的投影svgis draw< < < >< } >:更改现有SVG的比例>
  • {< CD12> }:将CSS样式添加到现有SVG

有关这些命令及其选项的完整信息,请阅读docs

示例

绘制以反照率投影的相邻美国的轮廓:

curl -O http://www2.census.gov/geo/tiger/GENZ2014/shp/cb_2014_us_nation_20m.zip
unzip cb_2014_us_nation_20m.zip
svgis draw cb_2014_us_nation_20m.shp --crs EPSG:5070 --scale 1000 --bounds -124 20.5 -64 49 -o us.svg

接下来的两个示例使用Natural Earthadmin-0数据集。

把高收入国家画成绿色,低收入国家画成蓝色:

/* style.css */.income_grp_5_Low_income{fill:blue;}.income_grp_3_Upper_middle_income{fill:green}.ne_110m_lakes{fill:#09d;stroke:none;}
svgis draw --style style.css --class-fields income_grp ne_110m_admin_0_countries.shp ne_110m_lakes.shp -o out.svg

使用Albers projection绘制欧洲的国家边界和湖泊,简化输出多边形,并用紫色绘制德国。

svgis draw ne_110m_admin_0_countries.shp ne_110m_lakes.shp \
    --crs EPSG:102013 \ 
    --scale 1000\ 
    --simplify 90\ 
    --style '.ne_110m_admin_0_countries { fill: tan } .Germany { fill: purple }'\
    --style '.ne_110m_lakes { fill: #09d; stroke: none; }'\ 
    --class-fields name \ 
    --bounds -10 304065\ 
    -o out.svg

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JavaFX TableView更新单元格,不更新对象值   在扫描器中使用分隔符的java   java OkHttp 4.9.2,连接无法重用,导致端口耗尽   eclipse中的c JNI:运行Java代码   java是否在出厂的所有硬件设备中都有/mnt/sdcard/Android/data文件夹(或等效文件夹)?   Java,在eclipse中访问资源文件夹中的图像   java为什么Bluemix dashDB操作抛出SqlSyntaxErrorException,SQLCODE=1667?   JavaHtmlUnitWebClient。getPage不处理javascript   Google API认证的java问题   java如何将JSON数组反序列化为Apache beam PCollection<javaObject>   ServerSocket停止接收命令,java/安卓   来自Java类的安卓 Toast消息   java如何自动重新加载应用程序引擎开发服务器?   java是否可以尝试/捕获一些东西来检查是否抛出了异常?   java如何做到这一点当我按下load game时,它不仅会加载信息,还会将您带到游戏中?   Java选项Xmx代表什么?   Java映射,它在插入时打印值   设置“ulimit c unlimited”后,java无法生成系统核心转储