# -*- coding: utf-8 -*-

print(u"python与开源QGis课题研究组")
#print("汉字")

#+++++++++++++++++
#创建矢量数据文件
#+++++++++++++++++

try:
    from osgeo import ogr
except:
    import ogr
    
driver = ogr.GetDriverByName("ESRI Shapefile")

import os

'''
ds = driver.CreateDataSource("xx_tesp.shp")
layer = ds.CreateLayer('test',geom_type = ogr.wkbPoint)
fieldDefn = ogr.FieldDefn('id',ogr.OFTString)
fieldDefn.SetWidth(4)
layer.CreateField(fieldDefn)
featureDefn = layer.GetLayerDefn()
print(featureDefn)
feature = ogr.Feature(featureDefn)
#设定几何形状
point = ogr.Geometry(ogr.wkbPoint)
point.SetPoint(0,123,123)
#设定字段数值
feature.SetField('id',23)
#将要素写入到图层
layer.CreateFeature(feature)
ds.Destroy()

import os
out_shp = "xx_tesp.shp"
dir(out_shp)
if os.path.exists(out_shp):
    driver.DeleteDataSource(out_shp)
    
dir(out_shp)

point = ogr.Geometry(ogr.wkbPoint)
print(point)
point.AddPoint(10,20)
print(point)
point.AddPoint(30,20)
print(point)

line = ogr.Geometry(ogr.wkbLineString)
print(line)
line.AddPoint(10,10)
print(line)
line.AddPoint(20,20)
print(line)
line.SetPoint(2,30,30)
print(line)
print(line.GetPointCount())
print(line.GetX(0))
print(line.GetX(1))
print(line.GetX(3))

ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(0,0)
ring.AddPoint(100,0)
ring.AddPoint(100,100)
ring.AddPoint(0,100)
ring.CloseRings()
print(ring)
print(type(ring))

outring = ogr.Geometry(ogr.wkbLinearRing)
outring.AddPoint(0,0)
outring.AddPoint(100,0)
outring.AddPoint(100,100)
outring.AddPoint(0,100)
outring.AddPoint(0,0)

inring = ogr.Geometry(ogr.wkbLinearRing)
inring.AddPoint(25,25)
inring.AddPoint(75,25)
inring.AddPoint(75,75)
inring.AddPoint(25,75)
inring.CloseRings()

polygon = ogr.Geometry(ogr.wkbPolygon)
polygon.AddGeometry(outring)
polygon.AddGeometry(inring)
print(polygon.GetGeometryCount())

#outring2 = polygon.GetGeometryRef(0)
#inring2 = polygon.GetGeometryRef(1)
#print(outring2)
#print(inring2)

for ringx in range(polygon.GetGeometryCount()):
    print(polygon.GetGeometryRef(ringx))

multipoint = ogr.Geometry(ogr.wkbMultiPoint)
point = ogr.Geometry(ogr.wkbPoint)
point.AddPoint(10,10)
multipoint.AddGeometry(point)
print(multipoint)

point.AddPoint(20,20)
multipoint.AddGeometry(point)
print(multipoint)

mp = multipoint.GetGeometryCount()
print(mp)

for mpx in range(multipoint.GetGeometryCount()):
    print(multipoint.GetGeometryRef(mpx))

extfile = 'xx_data_pt.shp'
if os.access(extfile,os.F_OK):
    driver.DeleteDataSource(extfile)
#1、创建数据源
newds = driver.CreateDataSource(extfile)
#print(dir(newds))
#print(dir(newds.CreateLayer))
#2、创建数据源图层
lyrn = newds.CreateLayer('point',None,ogr.wkbPoint)

#3、定义图层字段,添加图层字段
fieldcnstr = ogr.FieldDefn("idx",ogr.OFTInteger)
lyrn.CreateField(fieldcnstr)

fieldf = ogr.FieldDefn("namex",ogr.OFTString)
lyrn.CreateField(fieldf)

point_coors_arr = [[1,0],[2,0],[3,0],[4,0]]
for idxx,point_coors in enumerate(point_coors_arr):
    #print(type(idxx))
    #print(type(point_coors))
    wkt = 'POINT (%f %f)' % (point_coors[0],point_coors[1])
    #print(wkt)
    geom = ogr.CreateGeometryFromWkt(wkt)
    
    feat = ogr.Feature(lyrn.GetLayerDefn())
    
    feat.SetField('idx',idxx)
    feat.SetField('namex','ID{0}'.format(idxx))
    
    feat.SetGeometry(geom)
    lyrn.CreateFeature(feat)
    
    #print(lyrn.GetLayerDefn())
    #print('idx:%i' % (idxx))
    #print("namex:%s" % 'ID{0}'.format(idxx))
    #x = 'ID{0}'.format(idxx)
    #print(x)
    """
    wkt = 'POINT (%f %f)' % (point_coors[0],point_coors[1])
    geom = ogr.CreateGeometryFromWkt(wkt)
    feat = ogr.Feature(lyrn.GetLayerDefn())
    feat.SetField('idx',idxx)
    feat.SetField('namex','ID{0}'.format(idxx))
    feat.SetGeometry(geom)
    lyrn.CreateFeature(feat)
    """
newds.Destroy()

extfile = 'xx_data_line.shp'
driver = ogr.GetDriverByName("ESRI Shapefile")
if os.access(extfile,os.F_OK):
    driver.DeleteDataSource(extfile)

newds = driver.CreateDataSource(extfile)
lyrn = newds.CreateLayer('line',None,ogr.wkbLineString)

#字段定义创建
fieldcnstr = ogr.FieldDefn("id",ogr.OFTInteger)
fieldf = ogr.FieldDefn("name",ogr.OFTString)
lyrn.CreateField(fieldcnstr)
lyrn.CreateField(fieldf)

point_coors_arr = [[0,0,1,2,3,-2,6,0]]
#print(point_coors_arr)
#print(type(point_coors_arr))
#print(len(point_coors_arr))

for idx,point_coors in enumerate(point_coors_arr):
    #wkt = 'LINESTRING(%f %f,%f %f,%f %f,%f %f)' % (point_coors[len(point_coors_arr) - len(point_coors_arr)],point_coors[len(point_coors_arr) - len(point_coors_arr) + 1],)
    wkt = 'LINESTRING(%f %f,%f %f,%f %f,%f %f)' % (point_coors[0],point_coors[1],point_coors[2],point_coors[3],point_coors[4],point_coors[5]
    ,point_coors[6],point_coors[7])
    print(wkt)
    geom = ogr.CreateGeometryFromWkt(wkt)
    feat = ogr.Feature(lyrn.GetLayerDefn())
    feat.SetField('id',idx)
    feat.SetField('name','line_one')
    feat.SetGeometry(geom)
    lyrn.CreateFeature(feat)
    
newds.Destroy()

extfile = 'xx_data_polygon.shp'
driver = ogr.GetDriverByName('ESRI Shapefile')
if os.access(extfile,os.F_OK):
    driver.DeleteDataSource(extfile)
#创建数据源文件
newds = driver.CreateDataSource(extfile)
#创建几何形状图层
lyrn = newds.CreateLayer('polygon',None,ogr.wkbPolygon)
#定义字段
fieldcnstr = ogr.FieldDefn('id',ogr.OFTInteger)
fieldf = ogr.FieldDefn('name',ogr.OFTString)
#图层添加字段
lyrn.CreateField(fieldcnstr)
lyrn.CreateField(fieldf)

wkt_polygon_1 = 'POLYGON((2 1,12 1,12 4,2 4,1 2))'
wkt_polygon_2 = 'POLYGON((4 1,8 1,8 3,4 3,3 1))'
wkt_polygon_3 = 'POLYGON((8 4,10 4, 10 5,8 5,6 4))'
#print(type(wkt_polygon_1))
point_coors_arr = [wkt_polygon_1,wkt_polygon_2,wkt_polygon_3]
#print(type(point_coors_arr))
for idx,point_coors in enumerate(point_coors_arr):
    #print(idx)
    #print(point_coors)
    wkt = point_coors
    #使用wkt创建几何图形
    geom = ogr.CreateGeometryFromWkt(wkt)
    #获取图层要素  ogr.GetLayerDefn , ogr.Feature()
    feat = ogr.Feature(lyrn.GetLayerDefn())
    feat.SetField('id',idx)
    print('poly_{idx}'.format(idx = idx))
    #feat.SetField('name','poly_{idx}'.format(idx = idx))
    feat.SetField('name','poly_{idx}'.format(idx = idx))
    feat.SetGeometry(geom)
    lyrn.CreateFeature(feat)
    
newds.Destroy()

from osgeo import ogr
import os,math
inshp = "xx_data_polygon.shp"
ds = ogr.Open(inshp)  #打开shp源文件
driver = ogr.GetDriverByName("ESRI Shapefile")

outputfile = "xx_data_polygon_copy.shp"   #输出shp
if os.access(outputfile,os.F_OK):
    driver.DeleteDataSource(outputfile)

pt_cp = driver.CopyDataSource(ds,outputfile)
pt_cp.Release()

from osgeo import ogr
import os,math
inshp = 'xx_data_polygon.shp'
ds = ogr.Open(inshp)
driver = ogr.GetDriverByName("ESRI Shapefile")
outputfile = 'cp_polygon.shp'
if os.access(outputfile,os.F_OK):
    driver.DeleteDataSource(outputfile)
    
pt_cp = driver.CopyDataSource(ds,outputfile)
pt_cp.Release()

outputfile = 'cp2.shp'
if os.access(outputfile,os.F_OK):
    driver.DeleteDataSource(outputfile)
newds = driver.CreateDataSource(outputfile)
layer = ds.GetLayer()
pt_layer = newds.CopyLayer(layer,'xxx')
#newds.Destroy()

outputfile = 'cp3.shp'
if os.access(outputfile,os.F_OK):
    driver.DeleteDataSource(outputfile)

newds = driver.CreateDataSource(outputfile)
layernew = newds.CreateLayer('worldcopy',None,ogr.wkbLineString)
layer = ds.GetLayer()
feature = layer.GetNextFeature()
if feature is not None:
    layernew.CreateFeature(feature)
    feature = layer.GetNextFeature()
    
newds.Destroy()

driver = ogr.GetDriverByName("ESRI Shapefile")

inshp = 'xx_data_polygon.shp'
ds = ogr.Open(inshp)

outf = 'cxp.shp'
if os.access(outf,os.F_OK):
    driver.DeleteDataSource(outf)
    print("exists")
newds = driver.CreateDataSource(outf)
layernew = newds.CreateLayer('worldcopy',None,ogr.wkbLineString)

layer = ds.GetLayer()

#print(layer)
feature = layer.GetNextFeature()
print(feature)
while feature is not None:
    layernew.CreateFeature(feature)
    feature = layer.GetNextFeature()
newds.Destroy()
'''

from osgeo import ogr
ds = ogr.Open('convChk.shp')
layer = ds.GetLayer(0)
spatialRef = layer.GetSpatialRef()
print(spatialRef)

python 与开源Gis 书本知识点测试的更多相关文章

  1. Python与开源GIS

    https://www.osgeo.cn/pygis/ 这里列出了与 GIS 相关的 Python 开源类库与工具. 基础类库(抽象库) • GDAL/OGR 是大部分开源GIS的基础,也包括如Arc ...

  2. Python与开源GIS:在OGR中使用SQL语句进行查询

    摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使 ...

  3. 开源GIS软件初探

    谈到GIS软件,首先让我们想到的便是GIS界的龙头大哥ESRI公司旗下的ArcGIS产品,从最初接触的version 9.2到如今的version 10.1,其发展可谓风生水起.MapInfo软件也不 ...

  4. 开源GIS简介.学习

    开发者都希望自己的软件能够运行在尽可能多的计算机上.然而事与愿违,摆在 GIS开发者面前的仍然是对峙的平台.J2EE随着Java5.0的发布,已经正式更名为JavaEE,而微软也正式发布了.NET2. ...

  5. 2016年GitHub排名前20的Python机器学习开源项目(转)

    当今时代,开源是创新和技术快速发展的核心.本文来自 KDnuggets 的年度盘点,介绍了 2016 年排名前 20 的 Python 机器学习开源项目,在介绍的同时也会做一些有趣的分析以及谈一谈它们 ...

  6. 开源GIS简介

    原文 开源GIS C++开源GIS中间件类库: GDAL(栅格)/OGR(矢量)提供了类型丰富的读写支持 GEOS(Geometry Engine Open Source)是基于C++的空间拓扑分析实 ...

  7. 常用开源GIS项目

    常用开源GIS项目     常用开源桌面GIS软件 QGIS 始于2002年5月,算得上是开源GIS平台中的后起之秀.界面友好,分析功能可与GRASS GIS相媲美.主页:http://www.qgi ...

  8. 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)

     注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...

  9. python 各种开源库

    测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...

随机推荐

  1. Flask之flask-sqlalchemy

    接下来基于这个Flask项目,我们要加入Flask-SQLAlchemy让项目变得生动起来 1.加入Flask-SQLAlchemy第三方组件 from flask import Flask # 导入 ...

  2. 191010 python3分解质因数

    # 题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.# 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:# (1)如果这个质数恰等于n,则说明分解 ...

  3. LAMP环境搭建基本步骤

    LAMP环境搭建基本步骤 参考链接https://yq.aliyun.com/articles/106387 apache性能优化.配置https://my.oschina.net/lockupme/ ...

  4. 使用Kerberos进行Hadoop认证

    使用Kerberos进行Hadoop认证 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  5. Mongodb3.6 Replica Set 配置

    单机下执行: /usr/local/mongodb/bin/mongod --dbpath /usr/local/mongodb/r1 --port --replSet myset /usr/loca ...

  6. JAVA 的8种基本数据类型

    整型 int 一般的数据 long 极大的数据 short 用于特定的场合,比如底层的文件处理或者需要控制占用存储单元空间量的大数组 byte 用于特定的场合,比如底层的文件处理或者需要控制占用存储单 ...

  7. 关于Istio 1.1,你所不知道的细节

    本文整理自Istio社区成员Star在 Cloud Native Days China 2019 北京站的现场分享 第1则 主角 Istio Istio作为service mesh领域的明星项目,从2 ...

  8. @ConfigurationProperties绑定配置信息至Array、List、Map、Bean

    原文:https://blog.csdn.net/justry_deng/article/details/90758250 相关说明:在SpringBoot中,我们可以通过以下几种方式获取并绑定配置文 ...

  9. Skew-symmetric matrix

  10. OpenStack是什么,OpenStack详解

    1. OpenStack是什么 OpenStack官方的解释很官方,而且从不同角度,也有不同的理解,OpenStack可以理解为一个云操作系统 OpenStack旗下包含了一组由社区维护的开源项目,他 ...