windows下gdal python安装与使用

我日常的编程语言是C++,看到周边的同事有学习python,围观了几个小例子,感觉python很不错,用起来很方便。所以我打算利用业余时间学习一些python的知识,如果学会了用GPIO 库控制我的树莓派做一些好玩的事情最好了。这篇文章里。我打算分享一下gdal python库的安装与pycharm下编写一个读取shapefile小程序的过程。

1)编译gdal

首先是到gdal的官网上下载 gdal的源码,我选择的版本是2.2.3。源码地址 。因为gdal python的实现方式是 使用 swig对c++对象进行的封装(以上说法可能不太准确),所以需要先用msvc 编译gdal的c++源码。如果你的电脑也是64位操作系统,请先修改“nmake.opt”文件第206行将#WIN64=YES 前面的#去掉。我电脑上安装的 visual studio 2017 community 版本,所以我打开的是 vs2017 版本的“x64 Native Tools Command Prompt for VS 2017”命令行窗口,cd到源码所在目录。执行命令nmake -f makefile.vc MSVC_VER=1910 等待程序编译成功,执行nmake -f makefile.vc install ,编译生成的链接库、exe等会被拷贝到“C:\warmerda\bld\bin”(可以在nmake.opt中修改)。将上面路径加入系统变量“path”中。

2) 安装 gdal python

安装 gdal python模块前,确保你的电脑上安装了python 。cd到源码所在路径的swig/python下,执行命令python setup.py build ,python setup.py install 。然后新开一个python 程序,执行import gdal ,如果没有报错,证明gdal 的安装是成功的。

3) pycharm 安装

对于初学者,编写python需要一个友好的IDE,同事推荐的是pycharm 。我安装的是pycharm 2017 community版本。

需要注意的是,当新建一个工程时,pycharm 已经自带一个python interpreter(解释器)了,而这个解释器并不是刚才我们安装gdal的解释器,所以需要将工程的解释器指定为系统的解释器。解决办法:“File->Settings->Project:xxx->Project Interpreter”,在对话框中选择project interpreter 的“show all”

在弹出的窗口中点“+”add local。选择 “system interpreter”

4) gdal 程序编写

我打算编写一个读取shapefile,获得表字段名称,获取要素个数,并且打印每一个要素的wkt字符,并且打印其外接矩形坐标。程序代码如下:

import sys
from osgeo import gdal
from osgeo import ogr

filename = "test_data/poly.shp"
ds = gdal.OpenEx(filename, gdal.OF_VECTOR)

if ds is None:
    print("can't open "+filename)
    exit(1)

layer = ds.GetLayer(0)
layer.ResetReading()

#打印 layer defination
lyrDefn =layer.GetLayerDefn()
for i in range(lyrDefn.GetFieldCount()):
    fieldDefn = lyrDefn.GetFieldDefn(i)
    print(fieldDefn.GetNameRef())

print("there are total {0} features in layer".format(layer.GetFeatureCount()))

i =1
for feature in layer:
    print("---------{0}th feature--------".format(i))
    geom = feature.GetGeometryRef()
    print("points number {0}".format(geom.GetPointCount()))

    print(geom.ExportToWkt())

    #print(geom.GetGeometryCount())
    env = geom.GetEnvelope()
    for point in env:
        print(point)

    i = i+1
    #print(geom.Area())

使用过程中,我的疑问如下。有经验的同学可以指点一下,我后面学习到答案,会回来补充。

  1. python 中类型转换是如何表达的,比如,在c++中,我通过将Geometry对象转成Polygon对象以使用polygon的专有方法,在python 中,不知道这个过程如何实现的,或者,有没有这个概念?
  2. pycharm 如何支持第三方库的代码补全?用起来好不方便。
  3. gdal python的API Reference 好像不太全,里面好多东西都没有,比如,有些函数的返回值类型并没有标记。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注