#encoding: utf-8
__author__ = 'Administrator'
import psycopg2
import ppygis
import datetime
import string
import sys
import logging
import GeowayLogger
reload(sys)
#中文错误
sys.setdefaultencoding( "utf-8" )
vLog = GeowayLogger.GeowayLogger("c://geoway2.log",logging.DEBUG)
vLog.start()
#postgis
#pgisCon = psycopg2.connect(database="postgis_21_sample",user="postgres",password="")
pgisCon = psycopg2.connect(database="postgis_21_sample",user="postgres",password="postgres",host="192.98.12.60",port="5432")
pgisCursor = pgisCon.cursor() pgisCursor.execute("create table IF NOT EXISTS tianditupoi_agg(id integer PRIMARY KEY,geometry GEOMETRY)")
pgisCursor.execute("create table IF NOT EXISTS tianditupoi_1( check (id >= 0 and id< 2500001) ) INHERITS (tianditupoi_agg)")
pgisCursor.execute("create table IF NOT EXISTS tianditupoi_2( check (id >= 2500001) ) INHERITS (tianditupoi_agg)")
#创建分区表ID索引
pgisCursor.execute("CREATE INDEX tianditupoi_1_idindex on tianditupoi_1(id)")
pgisCursor.execute("CREATE INDEX tianditupoi_2_idindex on tianditupoi_2(id)")
#创建分区规则
pgisCursor.execute("CREATE RULE tianditupoi_insert_1 AS ON INSERT TO tianditupoi_agg WHERE (id >= 0 and id < 2500001) DO INSTEAD INSERT INTO tianditupoi_1 VALUES (NEW.id,NEW.geometry)")
pgisCursor.execute("CREATE RULE tianditupoi_insert_2 AS ON INSERT TO tianditupoi_agg WHERE (id >= 2500001 ) DO INSTEAD INSERT INTO tianditupoi_2 VALUES (NEW.id,NEW.geometry)")
pgisCon.commit()
#创建天地图要素分区表,并将数据进行转移
def fromTdtPoi2TdtPoiAg():
#sql_txt = sqlite3.connect("c://POI.tdb")
startTime = datetime.datetime.now();
cusor = pgisCon.cursor()
cusor.execute("select oid,st_astext(geom) as geometry from tianditupoi")
#row = cusor.fetchone()
i = 0;
for _row in cusor.fetchall():
#print _row
#_p = {"name":_row[1],"address":_row[2],"loc":[_row[9],_row[10]]}
#poi.insert(_p)
geo ="%s"%(_row[1])
istr = 'insert into tianditupoi_agg(id,geometry)values(%d,%s)'%(string.atoi(_row[0]),"'"+geo+"'")
i = i+1
#logging.info("运行日志:%s"%(istr))
#pgisCursor.execute("insert into poi(id,name,address,geometry)values("+(_row[0])+",'"+(_row[1])+"','"+(_row[1])+"',"+ppygis.Point(_row[9], _row[10])+")")
pgisCursor.execute(istr)
#一千条提交一次
if i>= 50000 :
pgisCon.commit()
print("执行中....")
i = 0 #最后提交一次
pgisCon.commit()
endTime = datetime.datetime.now()
print("数据导入总耗时:%s描述"%((endTime - startTime).seconds))
print("插入完毕...")
#更新空间参考ID
pgisCursor.execute("update tianditupoi_1 set geometry = ST_SetSRID(geometry,4326)")
pgisCursor.execute("update tianditupoi_2 set geometry = ST_SetSRID(geometry,4326)")
#创建分区表空间索引
pgisCursor.execute("create index tianditupoi2_geo_index on tianditupoi_2 using gist(geometry)")
pgisCursor.execute("create index tianditupoi1_geo_index on tianditupoi_1 using gist(geometry)")
print("空间索引创建完毕...")
pgisCursor.close()
pgisCon.commit()
pgisCon.close() #进行数据导入
fromTdtPoi2TdtPoiAg()

Python访问PostGIS(建表、空间索引、分区表)的更多相关文章

  1. 通过python给mysql建表

    一.python连接mysql from sqlalchemy import create_engine # 数据库数据 HOSTNAME = '127.0.0.1' # linux本地 PORT = ...

  2. python基础_mysql建表、编辑、删除、查询、更新

    1.建一张学生表 包含(id,name,age,sex)2.增加四条数据3.查询表中sex为男的数据4.删除id =3的数据,5.将sex为女的,修改为男 create: CREATE TABLE d ...

  3. 大数据学习day26----hive01----1hive的简介 2 hive的安装(hive的两种连接方式,后台启动,标准输出,错误输出)3. 数据库的基本操作 4. 建表(内部表和外部表的创建以及应用场景,数据导入,学生、分数sql练习)5.分区表 6加载数据的方式

    1. hive的简介(具体见文档) Hive是分析处理结构化数据的工具   本质:将hive sql转化成MapReduce程序或者spark程序 Hive处理的数据一般存储在HDFS上,其分析数据底 ...

  4. Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法

    一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Orac ...

  5. mysql分表与分区表

    mysql分表与分区表 转自:http://blog.51yip.com/mysql/949.html   一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具 ...

  6. oracle_分区表的新增、修改、删除、合并。普通表转分区表方法

    一. 分区表理论知识Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Oracl ...

  7. 5.oracle建表的时候同时创建主键,外键,注释,约束,索引

    5.oracle建表的时候同时创建主键,外键,注释,约束,索引 1 --主键 )); ) ,constraint aba_pr primary key(id,name1)); --外键 )); --复 ...

  8. python常用内建模块 collections,bs64,struct,hashlib,itertools,contextlib,xml

    #  2  collections 是Python内建的一个集合模块,提供了许多有用的集合类. # 2.1 namedtuple #tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: p ...

  9. Hive的安装和建表

    目录 认识Hive 1. 解压 2. 配置mysql metastore(切换到root用户) 3. 配置hive 4. 安装hive和mysq完成后,将MySQL的连接jar包拷贝到$HIVE_HO ...

随机推荐

  1. 洛谷.4512.[模板]多项式除法(NTT)

    题目链接 多项式除法 & 取模 很神奇,记录一下. 只是主要部分,更详细的和其它内容看这吧. 给定一个\(n\)次多项式\(A(x)\)和\(m\)次多项式\(D(x)\),求\(deg(Q) ...

  2. hdu 3061 最大权闭合子图

    属于模板题吧... #include <cstdio> #include <cstring> #include <vector> #define min(a,b) ...

  3. BZOJ 3876: [Ahoi2014]支线剧情 带下界的费用流

    3876: [Ahoi2014]支线剧情 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3876 Description [故事背景] 宅 ...

  4. NOIP 2002提高组 选数 dfs/暴力

    1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 已知 n 个整数 x1,x2,…, ...

  5. GIT(4)----免输入账号和密码方法

    1.全局方式 包删除了,再次下载也不需要在配置输入密码和用户名 参考资料:git pull 和 git push免输入账号和密码方法 2.局部方式 包删除了,密码用户也会被删除,需要重新设置 打开终端 ...

  6. 使用postMessage进行react和iframe的数据通信.md

    将react的数据传递给iframe 1.首先在父组件(react文件)内引入iframe <iframe style={{border:0,width:"100%",hei ...

  7. 云计算大会有感—MapReduce和UDF

    (转载请注明出处:http://blog.csdn.net/buptgshengod) 1.參会有感       首先还是非常感谢CSDN能给我票,让我有机会參加这次中国云计算峰会.感觉不写点什么对不 ...

  8. wireshark提取gzip格式的html

    原文地址:http://blog.csdn.net/vah101/article/details/44102501 首先使用wireshark启动抓包,然后以百度为例,访问百度的首页,之后停止抓包,w ...

  9. 点集转线python最优代码

    import arcpy import os import types def convertPoints(): arcpy.env.overwriteOutput = True inPts = ar ...

  10. DockManager如何停靠 z

    DockManager默认只能停靠在窗体上,如果想停靠在其他控件上,我们发现并没有选项可以选,可能目前大部分解决方法是新建一个用户控件文件,再在用户控件里面单独设计模块. 除了这种方法还有没有其他的呢 ...