从零开始,构建电子地图网站:0_3_数据处理python(1)

一、环境搭建

Python往postgresql中导数据,至少需要3个库包,gdal、shaply、psycopg2。

先一个一个来。

1.安装gdal

直接安会有问题,先去下个安装程序,https://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal

根据python的版本选择程序。

如果不知道python的版本,可以打开cmd,输入python,回车。

 

根据python版本和电脑位数,选了GDAL-3.0.1-cp37-cp37m-win32.whl下载。

安装的时候,打开cmd,运行语句:pip install D:\gismap\软件\ GDAL-3.0.1-cp37-cp37m-win32.whl,输入,回车。

如果提示,

 

提示要升级pip,写啥就敲啥。python -m pip install --upgrade pip

升级完了,接着运行上一个语句,把GADL安装了。

 

 

2.安装shaply

先去下个安装程序,https://www.lfd.uci.edu/~gohlke/pythonlibs/#shapely

根据python版本和电脑位数,选了Shapely-1.6.4.post2-cp37-cp37m-win32.whl下载。

安装的时候,打开cmd,运行语句:pip install D:\gismap\软件\Shapely-1.6.4.post2-cp37-cp37m-win32.whl,输入,回车。

如果提示,

 

提示要升级pip,写啥就敲啥。python -m pip install --upgrade pip

升级完了,接着运行上一个语句,把shapely安装了。

 

 

 

3.安装psycopg2

这个直接在pycharm上安装就行。

File——Settings,选择Project Interpreter,选择python.exe路径,点击加号,加库包,搜索需要的库包,选中,点击Install Package安装。

装pgcopy,能把psycopg2都装上。

 

二、测试库包

先建个txt,readshptopg.txt,改成readshptopg.py,用pycharm打开,直接拖拽到界面里就可以,如果显示,No interpreter,就设置一下,引到python.exe所在的路径下。

敲入:

import shapely

import psycopg2

import gdal

如果有代码补全,那么就说明安装得差不多了。

然后开始一个一个包来引用。

三、确定编码

首先确定电脑的编码。

打开cmd,输入chcp,我的电脑返回“活动代码页:936”,这说明我的电脑默认编码格式是gbk的。

  1. 脚本结构定义

Py脚本怎么写都能执行,但还是将结构规范化一下,这是代码的整洁之美。

# coding=gbk

Import 库包

Def 函数():

if __name__ == '__main__':

       执行函数

 

四、读取shp文件

这个是读shp,返回一个list的方法,再把list写入一个文本文档的方法。

 

# coding=gbk

try:

    from osgeo import gdal

    from osgeo import ogr

except ImportError:

    import gdal

    import ogr

# pathStr,shp文件的全路径

def ReadVectorFile(pathStr):



    # 返回结果是一个list

    result=[]

    # 支持中文路径

    gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "NO")

    # 属性表字段支持中文

    gdal.SetConfigOption("SHAPE_ENCODING", "")

    strVectorFile = pathStr

    # 注册所有的驱动

    ogr.RegisterAll()

    # 打开数据

    ds = ogr.Open(strVectorFile, 0)

    # 获取该数据源中的图层个数,一般shp数据图层只有一个,如果是mdb、dxf等图层就会有多个

    iLayerCount = ds.GetLayerCount()

    # 获取第一个图层

    oLayer = ds.GetLayerByIndex(0)

    # 对图层进行初始化

    oLayer.ResetReading()

    # 获取图层中的属性表表头并输出,可以定义建表语句

    print("属性表结构信息:")

    oDefn = oLayer.GetLayerDefn()

    iFieldCount = oDefn.GetFieldCount()

    for iAttr in range(iFieldCount):

        oField = oDefn.GetFieldDefn(iAttr)

        print("%s: %s(%d.%d)" % ( \

     \

            oField.GetNameRef(), \

     \

            oField.GetFieldTypeName(oField.GetType()), \

     \

            oField.GetWidth(), \

     \

            oField.GetPrecision()))

    # 输出图层中的要素个数

    print("要素个数 = ", oLayer.GetFeatureCount(0))

    oFeature = oLayer.GetNextFeature()

    # 下面开始遍历图层中的要素,将对象都作为string输出

    while oFeature is not None:

        # 获取要素中的属性表内容

        lineStr=[]

        for iField in range(iFieldCount):

            lineStr.append(oFeature.GetFieldAsString(iField))

    # 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值