PostgreSQL安装配置
PostgreSQL/PostGIS安装
PostgreSQL安装第一步、下载PostgreSQL 9.2.3。
第二步、双击PostgreSQL 9.2.3,安装PostgreSQL。
第三步、选择程序安装路径。
第四步、设置数据库超级用户密码。
第五步、设置数据库服务器监听端口号,默认为5432。
第六步、点击Next,进行PostgreSQL安装
第七步、安装完成
第八步、点击Finish,安装PostGIS。后续安装需要网络环境,若无网络,点击取消,退出安装(无网环境下,PostGIS的安装见1.2)。
PostGIS安装第一步、下载
postgis-pg92-setup-2.0.3-2.exe。第二步、双击安装程序,进行安装。
第三步、选择安装内容,如下图:
第四步、选择安装路径。
第五步、设置密码(即安装PostgreSQL时的密码)
第六步、安装PostGIS。
第七步、完成安装。
PostgreSQL配置
出于安全考虑,默认情况下PostgreSQL不支持远程访问。若要PostgreSQL支持远程访问,可修改其配置文件,具体步骤如下:
第一步、打开PostgreSQL安装目录(如:C:\Program Files\PostgreSQL\9.2\data)下的“postgresql.conf”文件,将监听地址改为’”*”号,如下图:
第二步、编辑“pg_hba.conf”文件,添加下面代码。
第三步、重启PostgreSQL服务。
空间数据库与空间函数
空间数据库建立
首先,启动PostgreSQL客户端工具PgAdminIII。
第一步、在对象浏览器中,右键单击“数据库”,在弹出的快捷菜单中选择“新建数据库”。
第二步、在弹出的“新建数据库”对话框中选择“属性”标签,设置数据库的名称及所有者。
第三步、选择“定义”标签,设置数据库的“模版”、“表空间”等选项。
第四步、单击确定,建立“test”数据库,如下图:
空间函数介绍
PostGIS中的大多函数以ST(Spatial Type)为前缀。其主要类型分为:
管理函数几何构造函数几何存取几何编辑函数几何输出函数空间关系和测量函数几何处理函数几何操作符几何构造函数
函数
描述
ST_GeomFromText
Return a specified ST_Geometry value from Well-Known Text representation (WKT).
ST_GeomFromWKB
Creates a geometry instance from a Well-Known Binary geometry representation (WKB) and optional SRID.
ST_GeomFromGML
Takes as input GML representation of geometry and outputs a PostGIS geometry object.
ST_GeomFromKML
Takes as input KML representation of geometry and outputs a PostGIS geometry object.
ST_GeomFromGeoJSON
Takes as input a geojson representation of a geometry and outputs a PostGIS geometry object.
几何存取函数
函数
描述
ST_GeometryType
Return the geometry type of the ST_Geometry value.
ST_IsEmpty
Returns true if this Geometry is an empty geometrycollection, polygon, point etc.
ST_XMin
Returns X minima of a bounding box 2d or 3d or a geometry.
ST_XMax
Returns X maxima of a bounding box 2d or 3d or a geometry.
ST_YMin
Returns Y minima of a bounding box 2d or 3d or a geometry.
ST_YMax
Returns Y maxima of a bounding box 2d or 3d or a geometry.
几何输出函数
函数
描述
ST_AsBinary
Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data.
ST_AsText
Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata.
ST_AsGeoJSON
Return the geometry as a GeoJSON element.
ST_AsGML
Return the geometry as a GML version 2 or 3 element.
ST_AsKML
Return the geometry as a KML element. Several variants. Default version=2, default precision=15
ST_AsSVG
Returns a Geometry in SVG path data given a geometry or geography object.
空间关系与测量函数
函数
描述
ST_Area
Returns the area of the surface if it is a polygon or multi-polygon. For "geometry" type area is in SRID units. For "geography" area is in square meters.
ST_Centroid
Returns the geometric center of a geometry.
ST_Distance
For geometry type Returns the 2-dimensional cartesian minimum distance (based on spatial ref) between two geometries in projected units.
ST_MaxDistance
Returns the 2-dimensional largest distance between two geometries in projected units.
ST_Length
Returns the 2d length of the geometry if it is a linestring or multilinestring. geometry are in units of spatial reference and geography are in meters (default spheroid)
ST_Contains
Returns true if and only if no points of B lie in the exterior of A, and at least one point of the interior of B lies in the interior of A.
ST_Covers
Returns 1 (TRUE) if no point in Geometry B is outside Geometry A.
ST_Crosses
Returns TRUE if the supplied geometries have some, but not all, interior points in common.
ST_Disjoint
Returns TRUE if the Geometries do not "spatially intersect" - if they do not share any space together.
ST_Equals
Returns true if the given geometries represent the same geometry. Directionality is ignored.
ST_Intersects
Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they dont (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect)
ST_Overlaps
Returns TRUE if the Geometries share space, are of the same dimension, but are not completely contained by each other.
ST_Touches
Returns TRUE if the geometries have at least one point in common, but their interiors do not intersect.
ST_Within
Returns true if the geometry A is completely inside geometry B
空间数据导入导出
使用shp2pgsql工具,导入Shapefile文件时,首先添加环境变量,否则导入中文Shapefile容易出现乱码。环境变量如下:
PGCLIENTENCODING=GBK
Shp2pgsql/ pgsql2shp
数据导入
首先CD到PostgreSQL Bin目录下:执行shp2pgsq命令,将Shapefile文件转换为sql文件:shp2pgsql -d -D -W "GBK" F:\Data\Beijing\区县.shp ro_region >c:\区县.sql
执行psql命令,运行生成的SQL文件:psql -U postgres -w -d test -f c:\区县2.sql
也可以将上面两步合成一步,直接将Shapefile导入到数据库中:shp2pgsql -D -W "GBK" F:\Data\Beijing\区县.shp ro_region_1 | psql -U postgres -w -d test
注意事项:
使用上面命令前,记得要添加环境变量!关于上面命令的参数的意义,大家可以参考帮助文档,或在命令行中输入“shp2pgsql -?”查看详细说明。若要将多个Shapefile文件导入到数据库中,可以编写批处理命令。数据导出
首先CD到PostgreSQL Bin目录下导出指定的数据表pgsql2shp -f C:\ro_region1.shp -u postgres test region_grp_2010
导出查询结果pgsql2shp -f C:\ro_region2.shp -u postgres test “select title,geom from ro_region_1 limit 5”
注意事项:
使用上面命令前,记得要添加环境变量!关于上面命令的参数的意义,大家可以参考帮助文档,或在命令行中输入“pgsql2shp -?”查看详细说明。若要将多个数据表导出为Shapefile文件,可以编写批处理命令。OGR2OGR
使用GDAL中提供的ogr2ogr工具,可以实现Shapefile与空间数据表的转换。当然,使用前,首先要检验你的Ogr2ogr工具是否支持各项数据库驱动。
CD到GDAL Bin安装目录下输入ogr2ogr –formats,查看ogr2ogr支持的驱动信息,如下图:数据导入
导入Shapefile到数据库:ogr2ogr --config SHAPE_ENCODING "" -f "PostgreSQL" PG:"host=localhost user=postgres dbname=test password=111111" "F:\Data\Beijing\station.shp" -nln station0927
数据导出
导出单个数据表ogr2ogr --config SHAPE_ENCODING "" -f "ESRI Shapefile" c:\city.shp PG:"host=localhost user=postgres dbname=test password=111111" "city"
导出多个数据表ogr2ogr --config SHAPE_ENCODING "" -f "ESRI Shapefile" c:\data PG:"host=localhost user=postgres dbname=test password=111111" "river" "city"
导出查询结果ogr2ogr--config SHAPE_ENCODING "" -f "ESRI Shapefile" c:\river.shp PG:"host=localhost user=postgres dbname=test password=111111" -sql "select rinm,geom from river limit 10"
导出所有表到指定的目录ogr2ogr --config SHAPE_ENCODING ""-f "ESRI Shapefile" c:\data PG:"host=localhost user=postgres dbname=test password=111111"
关于ogr2ogr
ogr2ogr不仅可以将Shapefile导入到PostgreSQL中,还可以导入到Oracle、SqlServer、MySQL等数据中。ogr2ogr不仅可以将空间数据表,导出为Shapefile文件,还可以导出为KML等矢量数据。若Shapefile中即包括Polygon,又包含MultiPolygon,使用Ogr2ogr导入到数据库中会失败;但数据表中即包含Polygon又包含MultiPolygon,可以将数据表导出为Shapefile文件。空间查询分析
空间索引建立
对于空间数据量较大时,应考虑建立空间索引,加快查询效率,如下:
create index greenland_geom_index on greenland using GIST(geom);
空间函数应用
相关数据表如下:
表名
描述
city_builded_zone_shp
城市建成区
now_build_land_shp
现状建设用地
building_basement_shp
建筑物基底
builded_road_shp
建成区内路网
region_shp
北京市区县基本信息表
select sum(ST_Area(sysfeaturegeometry)) as area_1 from now_build_land_shp where lxdm like 212% or lxdm like 22% or lxdm like 24%;
计算城镇道路总长度select sum(ST_Length(sysfeaturegeometry)) as length_1 from builded_road_shp;
计算北京市各区县四至范围select name,ST_XMin(sysfeaturegeometry),ST_YMin(sysfeaturegeometry),
ST_XMax(sysfeaturegeometry),ST_YMax(sysfeaturegeometry) from region_shp;
计算城市建成区范围内现状建设用地中“类型代码”属性为212、24的图斑面积select sum(ST_Area(ST_Intersection(a.geom1,b.geom2))) as building_area_2 from
(select sysfeaturegeometry as geom1 from city_builded_zone_shp) a,
(select sysfeaturegeometry as geom2 from now_build_land_shp where lxdm like ‘212%’ or lxdm like ‘24%’) b
where ST_Intersects(a. geom1 ,b. geom2)=true;
计算城市建成区范围内的建筑面积建筑物高度:h=cd*tan b(注:cd为阴影长度,b为太阳高度角)
楼层数:lc=h/hd(注:hd为单楼层高度,计算结果取整)
建筑面积:jzmj=jdmj*lc(注:jdmj为基底面积,即图斑面积)
select sum(ST_Area(b.sysfeaturegeometry)*(floor((cd*tan(radians(b))/hd)))) as building_area
from city_builded_zone_shp a, building_basement_shp b
where ST_Contains(a.sysfeaturegeometry,ST_Centroid(b.sysfeaturegeometry))=true;
更新数据表坐标系统SELECT UpdateGeometrySRID(nj_village_shp,sysfeaturegeometry,4326);
PostgreSQL与JSON
PostgreSQL 9.2中引入了一种新的数据类型JSON。
JSON(JavaScript Object Notation)特点:
JSON是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。JSON采用完全独立于语言的文本格式。较XML更加小巧,更适合于网络数据传输。GeoJSON是JSON的扩展,可用于存储地理数据。创建数据表
/*创建表*/
create table a(id int,json_value json);
/*插入数据*/
insert into a values(1,{"name":"Tom","Age":23,"Sex":"M"});
insert into a values(2,{"name":"Jack","Age":24,"Sex":"F"});
insert into a values(3,{"name":"Alice","Age":21,"Sex":"M"});
JSON数据查询
/*返回JSON数据*/
select array_to_json(array_agg(a)) json_value from(select * from bj_rainfall limit 2) a;
/*返回JSON数据*/
select array_to_json(array_agg(t)) as json_value from
(select gid,city_name,ST_AsGeoJSON(geom)::json as geom from city where city_name=北京) t;
查询结果如下:
JSON运算符与函数
PostgreSQL 9.3中的JSON操作符
Operator
Right Operand Type
Description
Example
->
int
Get JSON array element
[1,2,3]::json->2
->
text
Get JSON object field
{"a":1,"b":2}::json->b
->>
int
Get JSON array element as text
[1,2,3]::json->>2
->>
text
Get JSON object field as text
{"a":1,"b":2}::json->>b
#>
array of text
Get JSON object at specified path
{"a":[1,2,3],"b":[4,5,6]}::json#>{a,2}
#>>
array of text
Get JSON object at specified path as text
{"a":[1,2,3],"b":[4,5,6]}::json#>>{a,2}
PostgreSQL 9.3中的JSON函数
函数
返回类型
array_to_json(anyarray [, pretty_bool])
json
row_to_json(record [, pretty_bool])
json
to_json(anyelement)
json
json_array_length(json)
int
json_each(json)
SETOF key text, value json
json_each_text(from_json json)
SETOF key text, value text
json_extract_path(from_json json, VARIADIC path_elems text[])
json
json_extract_path_text(from_json json, VARIADIC path_elems text[])
text
json_object_keys(json)
SETOF text
json_populate_record(base anyelement, from_json json, [, use_json_as_text bool=false]
anyelement
json_populate_recordset(base anyelement, from_json json, [, use_json_as_text bool=false]
SETOF anyelement
json_array_elements(json)
SETOF json
数据库备份恢复
数据库的备份与恢复
首先CD到PostgreSQL Bin安装目录下。
备份整个数据库pg_dump -U postgres -h 172.24.3.104 -p 5432 -f c:\sisp.sql sisp
备份指定的的数据表pg_dump -U postgres -t region -t ro_world test >c:\region.sql
数据恢复psql -U postgres -p 5432 -h localhost -d sisp -f c:\sisp.sql
psql -U postgres -p 5432 -h localhost -d mydb -f c:\region.sql
pg函数
PostGIS中的常用函数以下内容包括比较多的尖括号,发布到blogger的时候会显示不正常,内容太多我也无暇一个个手动改代码,因此如有问题就去参考PostGIS官方文档。
首先需要说明一下,这里许多函数是以ST_[X]yyy形式命名的,事实上很多函数也可以通过xyyy的形式访问,在PostGIS的函数库中我们可以看到这两种函数定义完全一样。
1. OGC标准函数管理函数:添加几何字段 AddGeometryColumn( )
删除几何字段 DropGeometryColumn( )
检查数据库几何字段并在geometry_columns中归档 Probe_Geometry_Columns()
给几何对象设置空间参考(在通过一个范围做空间查询时常用) ST_SetSRID(geometry integer)
几何对象关系函数:
获取两个几何对象间的距离 ST_Distance(geometry geometry)
如果两个几何对象间距离在给定值范围内,则返回TRUE ST_DWithin(geometry geometry float)
判断两个几何对象是否相等
(比如LINESTRING(0 0 2 2)和LINESTRING(0 0 1 1 2 2)是相同的几何对象) ST_Equals(geometry geometry)
判断两个几何对象是否分离 ST_Disjoint(geometry geometry)
判断两个几何对象是否相交 ST_Intersects(geometry geometry)
判断两个几何对象的边缘是否接触 ST_Touches(geometry geometry)
判断两个几何对象是否互相穿过 ST_Crosses(geometry geometry)
判断A是否被B包含 ST_Within(geometry A geometry B)
判断两个几何对象是否是重叠 ST_Overlaps(geometry geometry)
判断A是否包含B ST_Contains(geometry A geometry B)
判断A是否覆盖 B ST_Covers(geometry A geometry B)
判断A是否被B所覆盖 ST_CoveredBy(geometry A geometry B)
通过DE-9IM 矩阵判断两个几何对象的关系是否成立 ST_Relate(geometry geometry intersectionPatternMatrix)
获得两个几何对象的关系(DE-9IM矩阵) ST_Relate(geometry geometry)
几何对象处理函数:获取几何对象的中心 ST_Centroid(geometry)
面积量测 ST_Area(geometry)
长度量测 ST_Length(geometry)
返回曲面上的一个点 ST_PointOnSurface(geometry)
获取边界 ST_Boundary(geometry)
获取缓冲后的几何对象 ST_Buffer(geometry double [integer])
获取多几何对象的外接对象 ST_ConvexHull(geometry)
获取两个几何对象相交的部分 ST_Intersection(geometry geometry)
将经度小于0的值加360使所有经度值在0-360间 ST_Shift_Longitude(geometry)
获取两个几何对象不相交的部分(A、B可互换) ST_SymDifference(geometry A geometry B)
从A去除和B相交的部分后返回 ST_Difference(geometry A geometry B)
返回两个几何对象的合并结果 ST_Union(geometry geometry)
返回一系列几何对象的合并结果 ST_Union(geometry set)
用较少的内存和较长的时间完成合并操作,结果和ST_Union相同 ST_MemUnion(geometry set)
几何对象存取函数:获取几何对象的WKT描述 ST_AsText(geometry)
获取几何对象的WKB描述 ST_AsBinary(geometry)
获取几何对象的空间参考ID ST_SRID(geometry)
获取几何对象的维数 ST_Dimension(geometry)
获取几何对象的边界范围 ST_Envelope(geometry)
判断几何对象是否为空 ST_IsEmpty(geometry)
判断几何对象是否不包含特殊点(比如自相交) ST_IsSimple(geometry)
判断几何对象是否闭合 ST_IsClosed(geometry)
判断曲线是否闭合并且不包含特殊点 ST_IsRing(geometry)
获取多几何对象中的对象个数 ST_NumGeometries(geometry)
获取多几何对象中第N个对象 ST_GeometryN(geometryint)
获取几何对象中的点个数 ST_NumPoints(geometry)
获取几何对象的第N个点 ST_PointN(geometryinteger)
获取多边形的外边缘 ST_ExteriorRing(geometry)
获取多边形内边界个数 ST_NumInteriorRings(geometry)
同上 ST_NumInteriorRing(geometry)
获取多边形的第N个内边界 ST_InteriorRingN(geometryinteger)
获取线的终点 ST_EndPoint(geometry)
获取线的起始点 ST_StartPoint(geometry)
获取几何对象的类型 GeometryType(geometry)
类似上,但是不检查M值,即POINTM对象会被判断为point ST_GeometryType(geometry)
获取点的X坐标 ST_X(geometry)
获取点的Y坐标 ST_Y(geometry)
获取点的Z坐标 ST_Z(geometry)
获取点的M值 ST_M(geometry)
几何对象构造函数:
参考语义:
Text:WKT
WKB:WKB
Geom:Geometry
M:Multi
Bd:BuildArea
Coll:Collection ST_GeomFromText(text[])
ST_PointFromText(text[])
ST_LineFromText(text[])
ST_LinestringFromText(text[])
ST_PolyFromText(text[])
ST_PolygonFromText(text[])
ST_MPointFromText(text[])
ST_MLineFromText(text[])
ST_MPolyFromText(text[])
ST_GeomCollFromText(text[])
ST_GeomFromWKB(bytea[])
ST_GeometryFromWKB(bytea[])
ST_PointFromWKB(bytea[])
ST_LineFromWKB(bytea[])
ST_LinestringFromWKB(bytea[])
ST_PolyFromWKB(bytea[])
ST_PolygonFromWKB(bytea[])
ST_MPointFromWKB(bytea[])
ST_MLineFromWKB(bytea[])
ST_MPolyFromWKB(bytea[])
ST_GeomCollFromWKB(bytea[])
ST_BdPolyFromText(text WKT integer SRID)
ST_BdMPolyFromText(text WKT integer SRID)我告诉你msdn版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!