命令行记录-csv转为shape文件

1、除了一些转为shapefile文件必要的设置外,python读取csv文件也有一些需要注意的地方。

(1)首先读取了第一行fds作为字段名

(2)之后以此读取文件内容存在data里,这部分代码比较冗长

(3)代码容易出错的地方在于ds = driver.CreateDataSource(filename[:-4])这行代码,生成shapefile文件的过程,首先是创建给定名称的文件夹(我这里是stations2),然后再在文件夹里储存相应的shp等文件,文件夹的名称和子文件的名称可以不同,但是注意一定不能写成ds = driver.CreateDataSource(filename),否则以filename为名称的原csv文件会被删除。成功创建了文件夹后,就可以创建图层了,layer = ds.CreateLayer(filename [:-4], srs=spatialref, geom_type=geomtype,options=[‘ENCODING=UTF-8‘])这一句代码之前一直报错,之后又是怎么调好了不太清楚,但是和路径里有没有中文没有关系。

(4)以下代码只写入x,y和precipitation

2、

##给定一个采样点文件(格式:csv) 将其转换为shape文本
from osgeo import ogr
from osgeo import osr
import os

#############read csv file############

filename=‘stations2.csv‘
fh=open(filename,‘r‘)

lns=fh.readline()
lns=lns.strip()
fds=lns.split(‘,‘)

data=[]

lns=fh.readline()
vals=[]
while lns is not None:
    lns=lns.strip()
    if len(lns)==0:
        break
    for v in lns.split(‘,‘):
        #print(v)
        v_ = float(v)
        vals.append(v_)
    data.append(vals)
    lns=fh.readline()
    vals=[]

fh.close()

############create shapefile#############

driver=ogr.GetDriverByName("ESRI Shapefile")

#如文件已存在,则删除
shapename="stations2.shp"
if os.access(shapename,os.F_OK):
    driver.DeleteDataSource(shapename)

#创建 Shape 文件
ds = driver.CreateDataSource(filename[:-4])

spatialref = osr.SpatialReference( ‘LOCAL_CS["arbitrary"]‘ )
geomtype=ogr.wkbPoint#点图层

layer = ds.CreateLayer(filename [:-4], srs=spatialref,

geom_type=geomtype,
                       options=[‘ENCODING=UTF-8‘])#创建图层,定义存数

据的编码

fd_x=ogr.FieldDefn(fds[0],ogr.OFTReal)#浮点型
fd_x.SetPrecision(3)
fd_y=ogr.FieldDefn(fds[1],ogr.OFTReal)#浮点型
fd_y.SetPrecision(3)
fd_p=ogr.FieldDefn(fds[3],ogr.OFTReal)#浮点型
fd_p.SetPrecision(3)

layer.CreateField(fd_x)
layer.CreateField(fd_y)
layer.CreateField(fd_p)
for i in range(len(data)):
    d=data[i]
    wkt="POINT(%f %f)"%(d[0],d[1])
    geom=ogr.CreateGeometryFromWkt(wkt)
    feat=ogr.Feature(layer.GetLayerDefn())#创建SF
    feat.SetGeometry(geom)
    feat.SetField(fds[0],d[0])
    feat.SetField(fds[1],d[1])
    feat.SetField(fds[3],d[3])
    layer.CreateFeature(feat)

ds.Destroy()

原文地址:https://www.cnblogs.com/vividautumn/p/11613118.html

时间: 2024-10-22 07:07:29

命令行记录-csv转为shape文件的相关文章

命令行记录-python 读shp文件记录

1.读shapefile文件主要读以下内容,包括spatialRef投影信息,layerDefn图层定义信息,geomType几何对象类型,fieldDefn字段定义信息.geomlist是得到了每一个feature的geometryRef后转为Wkt形式表示的坐标点位,reclist通过name属性一次获取每个feature的所有field信息. 2. #读ArcGIS Shape文件示例from osgeo import ogrfilename="cntry98.shp" #以只读

Linux (rz、sz命令行)与本地电脑 命令行上传、下载文件

Linux 与本地电脑直接交互, 命令行上传.下载文件. 一.lrzsz命令行安装: 1.rpm安装:(链接: http://pan.baidu.com/s/1cBuTm2 密码: vijf) rpm -ivh lrzsz-0.12.20-22.1.x86_64.rpm 2.yum 安装: yum install lrzsz 二.命令使用: 1.发送到本地: sz 文件名 2.上传到服务器: rz -be 在弹出的框中选择文件,上传文件的用户和组是当前登录的用户

Linux命令行下svn ignore忽略文件或文件夹用法

Linux命令行下svn ignore忽略文件或文件夹用法 一.忽略单个目录 1.忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的,在服务器本地目录添加了material,但是不希望把material加入版本控制,因此我们需要忽略掉这个目录首先使用svn status命令查看当前状态[[email protected] oa.youxi.com]# svn status? htdocs/admin/adv/material 添加需要忽略的目录,貌似必须得进入该目录之

MAC - 命令行中用sublime打开指定文件,使用ln命令建立软链接

目前sublime是mac下最好的文本编辑软件,经常要使用它打开一些文件,例如html,js,txt,json等文件,但是sublime2默认不支持在命令行下调用,经过研究发现可以用建立软连接的方式调用,同样原因应该可以用到mac下其它不支持命令行的软件 系统版本:10.9.4 可以使用 open -a /Applications/Sublime\ Text\ 2.app composer.json 但是每次这样输太麻烦,可以用建立软连接的方式调用 ln -s /Applications/Sub

在命令行中加参数的文件复制程序

这篇博文介绍使用命令行参数的编程方法,载体是用于文件复制的程序.这也是我用Markdown编辑器写的第一篇博文.Markdown在写<逆袭大学>时用过,写博文是第一次. 本文正文: 引子 下面的程序,可以完成由a.txt到b.txt的复制. #include <iostream> #include <fstream> using namespace std; int main( ) { char ch; ifstream infile("a.txt"

如何使用命令行编译和运行java文件

相信大家现在一般都在使用IDE环境来开发运行java文件,但我觉得可以在命令行里面简单运行java文件,技多不压身. 接下来我来说一下编译和运行java文件: 第一步,首先下一个入门程序(注意:一定要将程序里面的类名跟保存的文件名称写成一样) 第二步,进入到java文件保存的目录(注意:必须要进入到保存的目录,否则运行会出错) 第四步使用javac HelloWorld.java编译源程序会生成一个.class的中间代码 第五步使用java HelloWorld运行程序(注意java后面的程序结

加载依赖的jar包在命令行编译和运行java文件

在命令里编译和执行java文件,当应用程序需要需要依赖的jar包里面的class文件才能编译运行的时候,应该这样做: 1. 首先是编译过程,在命令行里面执行: (1) javac -classpath ClassPath Test.java    //其中ClassPath对应的是jar包的路径,这个jar包亦可以是zip包 (2) javac -classpath CLASSPATH:*.jar Test.java    //其中ClassPath对应的是jar包的路径,这个jar包亦可以是z

如何通过命令行窗口查看sqlite数据库文件

1.找到AndroidSDK目录下的platform-tools文件夹,会发现该目录下有一个adb.exe文件. 到系统环境变量出去设置Path的值,将 adb.exe 所在的路径加进去. 2.在命令行窗口输入:" adb shell " 进入控制台 3.输入 " cd /data/data/包名.项目名称(小写)/databases/ " (如: cd /data/data/co m.keqi.test/databases/)进入项目文件所在的存储路径 4.可通过

使用命令行跳转到指定文件或者文件夹

如果想要跳转到文件或者文件夹,先看看文件或者文件夹所在的位置, 如果是在C盘,则直接可以在命令行中输入cd 文件或者文件夹的位置.例如:我想要跳转到桌面上的某个文件或者文件夹,则进入命令行之后可以直接输入 cd C:\Users\Administrator\Desktop\newFile  (跳转到桌面上的newFile文件夹) 如果不是在c盘,则要先跳转到相应的盘符,在进行与C盘类似的操作.例如:我想要跳转到I盘下的Data文件夹, 则应该进入命令行之后输入I:,此时,会进入到I盘内,再继续输