<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      一、 PostgreSQL與PostGIS的關(guān)系

      PostgreSQL 是世界上技術(shù)最先進(jìn)的開(kāi)源數(shù)據(jù)庫(kù),其前身是1977年一個(gè)源于Berkeley名為Ingres的非關(guān)系型數(shù)據(jù)庫(kù),其項(xiàng)目領(lǐng)導(dǎo)人為Michael Stonebraker教授。1982年該教授商業(yè)化了Ingres;1985年,Michael Stonebraker教授回到Berkeley,開(kāi)始對(duì)新的數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)行研究,并于次年在美國(guó)防務(wù)高級(jí)研究項(xiàng)目局(DARPA)、陸軍研究辦公室 (ARO)、國(guó)家科學(xué)基金(NSF)以及ESL, Inc等機(jī)構(gòu)的贊助下啟動(dòng)了Postgres(Post-Ingres)項(xiàng)目。

      Postgres 在1987年形成第一個(gè)Demo,1989年發(fā)布第一個(gè)版本,直到1993年的4.2版本,由于外部用戶過(guò)多,做技術(shù)支持和維護(hù)源代碼的時(shí)間影響到了對(duì)數(shù) 據(jù)庫(kù)的研究,因此Berkeley中止了該項(xiàng)目。在此期間,Postgres項(xiàng)目就已經(jīng)被使用在了一些GIS系統(tǒng)中。

      Postgres項(xiàng) 目并未就此消亡,在1994年兩個(gè)Berkeley的研究生向Postgres中加入了SQL語(yǔ)言解釋器,將之改名為Postgre95并發(fā)布到了互聯(lián)網(wǎng) 上。經(jīng)過(guò)一些黑客的修改,1996年P(guān)ostgres95再次更名為PostgreSQL,并采用BSD許可證發(fā)布了第一個(gè)開(kāi)源版本。經(jīng)過(guò)多年發(fā) 展,PostgreSQL已經(jīng)發(fā)展成為一個(gè)技術(shù)非常先進(jìn)的開(kāi)源數(shù)據(jù)庫(kù),其支持特性之多性能之強(qiáng)可與諸多高級(jí)商業(yè)數(shù)據(jù)庫(kù)比肩。

      這里提供了一個(gè)世界上主流數(shù)據(jù)庫(kù)的特性比較,有興趣的可以從中管窺PostgreSQL在數(shù)據(jù)庫(kù)領(lǐng)域中的成就。
      http://en.wikipedia.org/wiki/Comparison_of_relational_database_management_systems

      PostGIS 則是PostgreSQL的一個(gè)擴(kuò)展,目的是使PostgreSQL支持空間數(shù)據(jù)的存儲(chǔ)和使用,其本質(zhì)類(lèi)似于ArcSDE和Oracle Spatial Extension。PostGIS是采用GPL許可發(fā)布的,完整地實(shí)現(xiàn)了OGC的《Simple Features Specification for SQL》規(guī)范,并于2006年獲得OGC認(rèn)證。在此基礎(chǔ)上,PostGIS還對(duì)規(guī)范進(jìn)行了一些擴(kuò)展,在后面的特性中我們可以慢慢了解到。

       二、 PostGIS中的幾何類(lèi)型

      PostGIS支持所有OGC規(guī)范的“Simple Features”類(lèi)型,同時(shí)在此基礎(chǔ)上擴(kuò)展了對(duì)3DZ、3DM、4D坐標(biāo)的支持。

      1. OGC的WKB和WKT格式

      OGC定義了兩種描述幾何對(duì)象的格式,分別是WKB(Well-Known Binary)和WKT(Well-Known Text)。

      在SQL語(yǔ)句中,用以下的方式可以使用WKT格式定義幾何對(duì)象:
      POINT(0 0) ——點(diǎn)
      LINESTRING(0 0,1 1,1 2) ——線
      POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)) ——面
      MULTIPOINT(0 0,1 2) ——多點(diǎn)
      MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4)) ——多線
      MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1))) ——多面
      GEOMETRYCOLLECTION(POINT(2 3),LINESTRING((2 3,3 4))) ——幾何集合

      以下語(yǔ)句可以使用WKT格式插入一個(gè)點(diǎn)要素到一個(gè)表中,其中用到的GeomFromText等函數(shù)在后面會(huì)有詳細(xì)介紹:
      INSERT INTO table ( SHAPE, NAME )
      VALUES ( GeomFromText('POINT(116.39 39.9)', 4326), '北京');

      2. EWKT、EWKB和Canonical格式

      EWKT和EWKB相比OGC WKT和WKB格式主要的擴(kuò)展有3DZ、3DM、4D坐標(biāo)和內(nèi)嵌空間參考支持。

      以下以EWKT語(yǔ)句定義了一些幾何對(duì)象:
      POINT(0 0 0) ——3D點(diǎn)
      SRID=32632;POINT(0 0) ——內(nèi)嵌空間參考的點(diǎn)
      POINTM(0 0 0) ——帶M值的點(diǎn)
      POINT(0 0 0 0) ——帶M值的3D點(diǎn)
      SRID=4326;MULTIPOINTM(0 0 0,1 2 1) ——內(nèi)嵌空間參考的帶M值的多點(diǎn)

      以下語(yǔ)句可以使用EWKT格式插入一個(gè)點(diǎn)要素到一個(gè)表中:
      INSERT INTO table ( SHAPE, NAME )
      VALUES ( GeomFromEWKT('SRID=4326;POINTM(116.39 39.9 10)'), '北京' )

      Canonical格式是16進(jìn)制編碼的幾何對(duì)象,直接用SQL語(yǔ)句查詢出來(lái)的就是這種格式。

      3. SQL-MM格式

      SQL-MM格式定義了一些插值曲線,這些插值曲線和EWKT有點(diǎn)類(lèi)似,也支持3DZ、3DM、4D坐標(biāo),但是不支持嵌入空間參考。

      以下以SQL-MM語(yǔ)句定義了一些插值幾何對(duì)象:
      CIRCULARSTRING(0 0, 1 1, 1 0) ——插值圓弧
      COMPOUNDCURVE(CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1)) ——插值復(fù)合曲線
      CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)) ——曲線多邊形
      MULTICURVE((0 0, 5 5),CIRCULARSTRING(4 0, 4 4, 8 4)) ——多曲線

      MULTISURFACE(CURVEPOLYGON(CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0),(1 1, 3 3, 3 1, 1 1)),((10 10, 14 12, 11 10, 10 10),(11 11, 11.5 11, 11 11.5, 11 11))) ——多曲面

      三、 PostGIS中空間信息處理的實(shí)現(xiàn)

      1. spatial_ref_sys表

      在基于PostGIS模板創(chuàng)建的數(shù)據(jù)庫(kù)的public模式下,有一個(gè)spatial_ref_sys表,它存放的是OGC規(guī)范的空間參考。我們?nèi)∥覀冏钍煜さ?326參考看一下:

      它的srid存放的就是空間參考的Well-Known ID,對(duì)這個(gè)空間參考的定義主要包括兩個(gè)字段,srtext存放的是以字符串描述的空間參考,proj4text存放的則是以字符串描述的PROJ.4 投影定義(PostGIS使用PROJ.4實(shí)現(xiàn)投影)。

      4326空間參考的srtext內(nèi)容:
      GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]

      4326空間參考的proj4text內(nèi)容:
      +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

      2. geometry_columns表

      geometry_columns表存放了當(dāng)前數(shù)據(jù)庫(kù)中所有幾何字段的信息,比如我當(dāng)前的庫(kù)里面有兩個(gè)空間表,在geometry_columns表中就可以找到這兩個(gè)空間表中幾何字段的定義:

      其中f_table_schema字段表示的是空間表所在的模式,f_table_name字段表示的是空間表的表名,f_geometry_column字段表示的是該空間表中幾何字段的名稱,srid字段表示的是該空間表的空間參考。

      3. 在PostGIS中創(chuàng)建一個(gè)空間表

      在PostGIS中創(chuàng)建一個(gè)包含幾何字段的空間表分為2步:第一步創(chuàng)建一個(gè)一般表,第二步給這個(gè)表添加幾何字段。

      以下先在test模式下創(chuàng)建一個(gè)名為cities的一般表:
      create table test.cities (id int4, name varchar(20))

      再給cities添加一個(gè)名為shape的幾何字段(二維點(diǎn)):
      select AddGeometryColumn('test', 'cities', 'shape', 4326, 'POINT', 2)

      4. PostGIS對(duì)幾何信息的檢查

      PostGIS可以檢查幾何信息的正確性,這主要是通過(guò)IsValid函數(shù)實(shí)現(xiàn)的。
      以下語(yǔ)句分辨檢查了2個(gè)幾何對(duì)象的正確性,顯然,(0, 0)點(diǎn)和(1,1)點(diǎn)可以構(gòu)成一條線,但是(0, 0)點(diǎn)和(0, 0)點(diǎn)則不能構(gòu)成,這個(gè)語(yǔ)句執(zhí)行以后的得出的結(jié)果是TRUE,FALSE。

      select IsValid('LINESTRING(0 0, 1 1)'), IsValid('LINESTRING(0 0,0 0)')
      默認(rèn)PostGIS并不會(huì)使用IsValid函數(shù)檢查用戶插入的新數(shù)據(jù),因?yàn)檫@會(huì)消耗較多的CPU資源(特別是復(fù)雜的幾何對(duì)象)。當(dāng)你需要使用這個(gè)功能的時(shí)候,你可以使用以下語(yǔ)句為表新建一個(gè)約束:
      ALTER TABLE cities
      ADD CONSTRAINT geometry_valid
      CHECK (IsValid(shape))

      這時(shí)當(dāng)我們往這個(gè)表試圖插入一個(gè)錯(cuò)誤的空間對(duì)象的時(shí)候,會(huì)得到一個(gè)錯(cuò)誤:
      INSERT INTO test.cities ( shape, name )
      VALUES ( GeomFromText('LINESTRING(0 0,0 0)', 4326), '北京');

      ERROR: new row for relation "cities" violates check constraint "geometry_valid"
      SQL 狀態(tài): 23514

      5. PostGIS中的空間索引

      數(shù)據(jù)庫(kù)對(duì)多維數(shù)據(jù)的存取有兩種索引方案,R-Tree和GiST(Generalized Search Tree),在PostgreSQL中的GiST比R-Tree的健壯性更好,因此PostGIS對(duì)空間數(shù)據(jù)的索引一般采用GiST實(shí)現(xiàn)。

      以下的語(yǔ)句給sde模式中的cities表添加了一個(gè)空間索引shape_index_cities,在pgAdmin中也可以通過(guò)圖形界面完成相同的功能。
      CREATE INDEX shape_index_cities
      ON sde.cities
      USING gist
      (shape);

      另外要注意的是,空間索引只有在進(jìn)行基于邊界范圍的查詢時(shí)才起作用,比如“&&”操作。 

      四、 PostGIS中的常用函數(shù)

      以下內(nèi)容包括比較多的尖括號(hào),發(fā)布到blogger的時(shí)候會(huì)顯示不正常,內(nèi)容太多我也無(wú)暇一個(gè)個(gè)手動(dòng)改代碼,因此如有問(wèn)題就去參考PostGIS官方文檔。

      首先需要說(shuō)明一下,這里許多函數(shù)是以ST_[X]yyy形式命名的,事實(shí)上很多函數(shù)也可以通過(guò)xyyy的形式訪問(wèn),在PostGIS的函數(shù)庫(kù)中我們可以看到這兩種函數(shù)定義完全一樣。

      1. OGC標(biāo)準(zhǔn)函數(shù)

      管理函數(shù):
      添加幾何字段 AddGeometryColumn(, , , , , )
      刪除幾何字段 DropGeometryColumn(, , )
      檢查數(shù)據(jù)庫(kù)幾何字段并在geometry_columns中歸檔 Probe_Geometry_Columns()
      給幾何對(duì)象設(shè)置空間參考(在通過(guò)一個(gè)范圍做空間查詢時(shí)常用) ST_SetSRID(geometry, integer)

      幾何對(duì)象關(guān)系函數(shù)
      獲取兩個(gè)幾何對(duì)象間的距離 ST_Distance(geometry, geometry)
      如果兩個(gè)幾何對(duì)象間距離在給定值范圍內(nèi),則返回TRUE ST_DWithin(geometry, geometry, float)
      判斷兩個(gè)幾何對(duì)象是否相等
      (比如LINESTRING(0 0, 2 2)和LINESTRING(0 0, 1 1, 2 2)是相同的幾何對(duì)象) ST_Equals(geometry, geometry)
      判斷兩個(gè)幾何對(duì)象是否分離 ST_Disjoint(geometry, geometry)
      判斷兩個(gè)幾何對(duì)象是否相交 ST_Intersects(geometry, geometry)
      判斷兩個(gè)幾何對(duì)象的邊緣是否接觸 ST_Touches(geometry, geometry)
      判斷兩個(gè)幾何對(duì)象是否互相穿過(guò) ST_Crosses(geometry, geometry)
      判斷A是否被B包含 ST_Within(geometry A, geometry B)
      判斷兩個(gè)幾何對(duì)象是否是重疊 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)
      通過(guò)DE-9IM 矩陣判斷兩個(gè)幾何對(duì)象的關(guān)系是否成立 ST_Relate(geometry, geometry, intersectionPatternMatrix)
      獲得兩個(gè)幾何對(duì)象的關(guān)系(DE-9IM矩陣) ST_Relate(geometry, geometry)

      幾何對(duì)象處理函數(shù):
      獲取幾何對(duì)象的中心 ST_Centroid(geometry)
      面積量測(cè) ST_Area(geometry)
      長(zhǎng)度量測(cè) ST_Length(geometry)
      返回曲面上的一個(gè)點(diǎn) ST_PointOnSurface(geometry)
      獲取邊界 ST_Boundary(geometry)
      獲取緩沖后的幾何對(duì)象 ST_Buffer(geometry, double, [integer])
      獲取多幾何對(duì)象的外接對(duì)象 ST_ConvexHull(geometry)
      獲取兩個(gè)幾何對(duì)象相交的部分 ST_Intersection(geometry, geometry)
      將經(jīng)度小于0的值加360使所有經(jīng)度值在0-360間 ST_Shift_Longitude(geometry)
      獲取兩個(gè)幾何對(duì)象不相交的部分(A、B可互換) ST_SymDifference(geometry A, geometry B)
      從A去除和B相交的部分后返回 ST_Difference(geometry A, geometry B)
      返回兩個(gè)幾何對(duì)象的合并結(jié)果 ST_Union(geometry, geometry)
      返回一系列幾何對(duì)象的合并結(jié)果 ST_Union(geometry set)
      用較少的內(nèi)存和較長(zhǎng)的時(shí)間完成合并操作,結(jié)果和ST_Union相同 ST_MemUnion(geometry set)

      幾何對(duì)象存取函數(shù):
      獲取幾何對(duì)象的WKT描述 ST_AsText(geometry)
      獲取幾何對(duì)象的WKB描述 ST_AsBinary(geometry)
      獲取幾何對(duì)象的空間參考ID ST_SRID(geometry)
      獲取幾何對(duì)象的維數(shù) ST_Dimension(geometry)
      獲取幾何對(duì)象的邊界范圍 ST_Envelope(geometry)
      判斷幾何對(duì)象是否為空 ST_IsEmpty(geometry)
      判斷幾何對(duì)象是否不包含特殊點(diǎn)(比如自相交) ST_IsSimple(geometry)
      判斷幾何對(duì)象是否閉合 ST_IsClosed(geometry)
      判斷曲線是否閉合并且不包含特殊點(diǎn) ST_IsRing(geometry)
      獲取多幾何對(duì)象中的對(duì)象個(gè)數(shù) ST_NumGeometries(geometry)
      獲取多幾何對(duì)象中第N個(gè)對(duì)象 ST_GeometryN(geometry,int)
      獲取幾何對(duì)象中的點(diǎn)個(gè)數(shù) ST_NumPoints(geometry)
      獲取幾何對(duì)象的第N個(gè)點(diǎn) ST_PointN(geometry,integer)
      獲取多邊形的外邊緣 ST_ExteriorRing(geometry)
      獲取多邊形內(nèi)邊界個(gè)數(shù) ST_NumInteriorRings(geometry)
      同上 ST_NumInteriorRing(geometry)
      獲取多邊形的第N個(gè)內(nèi)邊界 ST_InteriorRingN(geometry,integer)
      獲取線的終點(diǎn) ST_EndPoint(geometry)
      獲取線的起始點(diǎn) ST_StartPoint(geometry)
      獲取幾何對(duì)象的類(lèi)型 GeometryType(geometry)
      類(lèi)似上,但是不檢查M值,即POINTM對(duì)象會(huì)被判斷為point ST_GeometryType(geometry)
      獲取點(diǎn)的X坐標(biāo) ST_X(geometry)
      獲取點(diǎn)的Y坐標(biāo) ST_Y(geometry)
      獲取點(diǎn)的Z坐標(biāo) ST_Z(geometry)
      獲取點(diǎn)的M值 ST_M(geometry)

      幾何對(duì)象構(gòu)造函數(shù)
      參考語(yǔ)義:
      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)

       2. PostGIS擴(kuò)展函數(shù)

      管理函數(shù):

      刪除一個(gè)空間表(包括geometry_columns中的記錄) DropGeometryTable([], )
      更新空間表的空間參考 UpdateGeometrySRID([], , , )
      更新空間表的統(tǒng)計(jì)信息 update_geometry_stats([, ])

      參考語(yǔ)義:
      Geos:GEOS庫(kù)
      Jts:JTS庫(kù)
      Proj:PROJ4庫(kù) postgis_version()

      postgis_lib_version()
      postgis_lib_build_date()
      postgis_script_build_date()
      postgis_scripts_installed()
      postgis_scripts_released()
      postgis_geos_version()
      postgis_jts_version()
      postgis_proj_version()
      postgis_uses_stats()
      postgis_full_version()

      幾何操作符:

      A范圍=B范圍 A = B
      A范圍覆蓋B范圍或A范圍在B范圍左側(cè) A &<> B
      A范圍在B范圍左側(cè) A <<>> B
      A范圍覆蓋B范圍或A范圍在B范圍下方 A &<| B A范圍覆蓋B范圍或A范圍在B范圍上方 A |&> B
      A范圍在B范圍下方 A <<| B A范圍在B范圍上方 A |>> B
      A=B A ~= B
      A范圍被B范圍包含 A @ B
      A范圍包含B范圍 A ~ B
      A范圍覆蓋B范圍 A && B

      幾何量測(cè)函數(shù):

      量測(cè)面積 ST_Area(geometry)
      根據(jù)經(jīng)緯度點(diǎn)計(jì)算在地球曲面上的距離,單位米,地球半徑取值6370986米 ST_distance_sphere(point, point)
      類(lèi)似上,使用指定的地球橢球參數(shù) ST_distance_spheroid(point, point, spheroid)
      量測(cè)2D對(duì)象長(zhǎng)度 ST_length2d(geometry)
      量測(cè)3D對(duì)象長(zhǎng)度 ST_length3d(geometry)
      根據(jù)經(jīng)緯度對(duì)象計(jì)算在地球曲面上的長(zhǎng)度 ST_length_spheroid(geometry,spheroid)
      ST_length3d_spheroid(geometry,spheroid)
      量測(cè)兩個(gè)對(duì)象間距離 ST_distance(geometry, geometry)
      量測(cè)兩條線之間的最大距離 ST_max_distance(linestring,linestring)
      量測(cè)2D對(duì)象的周長(zhǎng) ST_perimeter(geometry)
      ST_perimeter2d(geometry)
      量測(cè)3D對(duì)象的周長(zhǎng) ST_perimeter3d(geometry)
      量測(cè)兩點(diǎn)構(gòu)成的方位角,單位弧度 ST_azimuth(geometry, geometry)

      幾何對(duì)象輸出:
      參考語(yǔ)義:
      NDR:Little Endian
      XDR:big-endian
      HEXEWKB:Canonical
      SVG:SVG 格式
      GML:GML 格式
      KML:KML 格式
      GeoJson:GeoJson 格式

      ST_AsBinary(geometry,{'NDR'|'XDR'})
      ST_AsEWKT(geometry)
      ST_AsEWKB(geometry, {'NDR'|'XDR'})
      ST_AsHEXEWKB(geometry, {'NDR'|'XDR'})
      ST_AsSVG(geometry, [rel], [precision])
      ST_AsGML([version], geometry, [precision])
      ST_AsKML([version], geometry, [precision])
      ST_AsGeoJson([version], geometry, [precision], [options])

      幾何對(duì)象創(chuàng)建:

      參考語(yǔ)義:
      Dump:轉(zhuǎn)儲(chǔ) ST_GeomFromEWKT(text)

      ST_GeomFromEWKB(bytea)
      ST_MakePoint(, , [], [])
      ST_MakePointM(, , )
      ST_MakeBox2D(, )
      ST_MakeBox3D(, )
      ST_MakeLine(geometry set)
      ST_MakeLine(geometry, geometry)
      ST_LineFromMultiPoint(multipoint)
      ST_MakePolygon(linestring, [linestring[]])
      ST_BuildArea(geometry)
      ST_Polygonize(geometry set)
      ST_Collect(geometry set)
      ST_Collect(geometry, geometry)
      ST_Dump(geometry)
      ST_DumpRings(geometry)

      幾何對(duì)象編輯:

      給幾何對(duì)象添加一個(gè)邊界,會(huì)使查詢速度加快 ST_AddBBOX(geometry)
      刪除幾何對(duì)象的邊界 ST_DropBBOX(geometry)
      添加、刪除、設(shè)置點(diǎn) ST_AddPoint(linestring, point, [])
      ST_RemovePoint(linestring, offset)
      ST_SetPoint(linestring, N, point)
      幾何對(duì)象類(lèi)型轉(zhuǎn)換 ST_Force_collection(geometry)
      ST_Force_2d(geometry)
      ST_Force_3dz(geometry), ST_Force_3d(geometry),
      ST_Force_3dm(geometry)
      ST_Force_4d(geometry)
      ST_Multi(geometry)
      將幾何對(duì)象轉(zhuǎn)化到指定空間參考 ST_Transform(geometry,integer)
      對(duì)3D幾何對(duì)象作仿射變化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8, float8)
      對(duì)2D幾何對(duì)象作仿射變化 ST_Affine(geometry, float8, float8, float8, float8, float8, float8)
      對(duì)幾何對(duì)象作偏移 ST_Translate(geometry, float8, float8, float8)
      對(duì)幾何對(duì)象作縮放 ST_Scale(geometry, float8, float8, float8)
      對(duì)3D幾何對(duì)象作旋轉(zhuǎn) ST_RotateZ(geometry, float8)
      ST_RotateX(geometry, float8)
      ST_RotateY(geometry, float8)
      對(duì)2D對(duì)象作偏移和縮放 ST_TransScale(geometry, float8, float8, float8, float8)
      反轉(zhuǎn) ST_Reverse(geometry)
      轉(zhuǎn)化到右手定則 ST_ForceRHR(geometry)
      參考IsSimple函數(shù)
      使用Douglas-Peuker算法 ST_Simplify(geometry, tolerance)
      ST_SimplifyPreserveTopology(geometry, tolerance)
      講幾何對(duì)象頂點(diǎn)捕捉到網(wǎng)格 ST_SnapToGrid(geometry, originX, originY, sizeX, sizeY)
      ST_SnapToGrid(geometry, sizeX, sizeY), ST_SnapToGrid(geometry, size)
      第二個(gè)參數(shù)為點(diǎn),指定原點(diǎn)坐標(biāo) ST_SnapToGrid(geometry, geometry, sizeX, sizeY, sizeZ, sizeM)
      分段 ST_Segmentize(geometry, maxlength)
      合并為線 ST_LineMerge(geometry)

      線性參考:

      根據(jù)location(0-1)獲得該位置的點(diǎn) ST_line_interpolate_point(linestring, location)
      獲取一段線 ST_line_substring(linestring, start, end)
      根據(jù)點(diǎn)獲取location(0-1) ST_line_locate_point(LineString, Point)
      根據(jù)量測(cè)值獲得幾何對(duì)象 ST_locate_along_measure(geometry, float8)
      根據(jù)量測(cè)值區(qū)間獲得幾何對(duì)象集合 ST_locate_between_measures(geometry, float8, float8)

      雜項(xiàng)功能函數(shù):
      幾何對(duì)象的摘要 ST_Summary(geometry)
      幾何對(duì)象的邊界 ST_box2d(geometry)
      ST_box3d(geometry)
      多個(gè)幾何對(duì)象的邊界 ST_extent(geometry set)
      0=2d, 1=3dm, 2=3dz, 3=4d ST_zmflag(geometry)
      是否包含Bounding Box ST_HasBBOX(geometry)
      幾何對(duì)象的維數(shù):2、3、4 ST_ndims(geometry)
      子對(duì)象的個(gè)數(shù) ST_nrings(geometry)
      ST_npoints(geometry)
      對(duì)象是否驗(yàn)證成功 ST_isvalid(geometry)
      擴(kuò)大幾何對(duì)象 ST_expand(geometry, float)
      計(jì)算一個(gè)空間表的邊界范圍 ST_estimated_extent([schema], table, geocolumn)
      獲得空間參考 ST_find_srid(, , )
      幾何對(duì)象使用的內(nèi)存大小,單位byte ST_mem_size(geometry)
      點(diǎn)是否在圓上 ST_point_inside_circle(,,,)
      獲取邊界的X、Y、Z ST_XMin(box3d)
      ST_YMin(box3d)
      ST_ZMin(box3d)
      ST_XMax(box3d)
      ST_YMax(box3d)
      ST_ZMax(box3d)
      構(gòu)造一個(gè)幾何對(duì)象的數(shù)組 ST_Accum(geometry set)

      長(zhǎng)事務(wù)支持:
      啟用/關(guān)閉長(zhǎng)事務(wù)支持,重復(fù)調(diào)用無(wú)副作用 EnableLongTransactions()
      DisableLongTransactions()
      檢查對(duì)行的update和delete操作是否已授權(quán) CheckAuth([],

      , )
      鎖定行 LockRow([],
      , , , [])
      解鎖行 UnlockRows()
      在當(dāng)前事務(wù)中添加授權(quán)ID AddAuth()

      其它還有SQL-MM和ArcSDE樣式的函數(shù)支持,可以參考http://postgis.refractions.net/documentation/manual-1.3/ch06.html#id2750611,這里就不詳細(xì)列了。

      五、 PostGIS示例

      下面我們通過(guò)一個(gè)簡(jiǎn)單的Flex應(yīng)用示例來(lái)看一下PostGIS的用法:

      假想現(xiàn)在發(fā)生了恐怖襲擊,導(dǎo)致在一些城市有污染物出現(xiàn),現(xiàn)在我們要根據(jù)污染物和當(dāng)?shù)仫L(fēng)力、風(fēng)向情況,計(jì)算污染擴(kuò)散范圍,針對(duì)這些區(qū)域及時(shí)進(jìn)行警報(bào)和疏散。

      首先我們希望獲得所有發(fā)生污染的城市的當(dāng)前風(fēng)速、風(fēng)向等信息,在我們的PostGIS數(shù)據(jù)庫(kù)中有一個(gè)空間表保存著這些信息,我們構(gòu)造這樣的SQL語(yǔ)句進(jìn)行查詢:
      select *,ST_AsGeoJson(shape) from sde.wind

      這里會(huì)獲取所有風(fēng)相關(guān)的信息,并且附加了以JSON格式返回的幾何信息,這有助于我們?cè)贔lex中進(jìn)行解析。如下圖是關(guān)于風(fēng)的查詢結(jié)果:

      下 面我們希望PostGIS幫助我們實(shí)現(xiàn)一些空間分析。我們以污染發(fā)生的城市為起點(diǎn),當(dāng)?shù)仫L(fēng)向?yàn)橹鞣较颍瑯?gòu)造一個(gè)30度開(kāi)角的范圍;這個(gè)范圍將是污染擴(kuò)散的 主要方向,擴(kuò)散的范圍主要和風(fēng)的強(qiáng)度有關(guān);在構(gòu)造這個(gè)區(qū)域以后,為了保險(xiǎn)起見(jiàn),我們?cè)趯?duì)其進(jìn)行一定范圍的緩沖,最后得到每個(gè)污染源可能擴(kuò)散的范圍。我們構(gòu) 造的SQL語(yǔ)句如下:
      select *,ST_AsGeoJson( ST_Buffer( ST_PolygonFromText( 'POLYGON((' ||ST_X(shape)||' '||ST_Y(shape)||',' ||ST_X(shape)+velocity*cos((direction+15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction+15)*PI()/180)/20||',' ||ST_X(shape)+velocity*cos((direction-15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction-15)*PI()/180)/20||',' ||ST_X(shape)||' '||ST_Y(shape)||'))' ) , velocity/50 ) ) from sde.wind

      下面是PostGIS進(jìn)行運(yùn)算后返回的結(jié)果:

      在這里,F(xiàn)lex應(yīng)用與服務(wù)器的交互通過(guò)BlazeDS進(jìn)行,下面是本示例在服務(wù)器端的Java代碼:

      package wuyf;

      import java.sql.Connection;
      import java.sql.DriverManager;
      import java.sql.ResultSet;
      import java.sql.Statement;
      import java.util.ArrayList;
      import java.util.HashMap;

      public class Wind
      {
      private Connection conn = null;

      public Connection getConn()
      {
      if (conn==null)
      {
      try
      {
      Class.forName("org.postgresql.Driver");
      String url = "jdbc:postgresql://localhost:5432/sde" ;
      conn = DriverManager.getConnection(url, "sde" , "pwd" );
      conn.setAutoCommit(false);
      }
      catch(Exception e)
      {
      System.err.print(e);
      }
      }

      return conn;
      }

      public ArrayList
      > getWinds()
      {
      ArrayList
      > result = new ArrayList>();

      if ( this.getConn()==null )
      return result;

      try
      {
      String sql = "select *,ST_AsGeoJson(shape) from sde.wind";

      Statement st = this.getConn().createStatement();
      st.setFetchSize(0);
      ResultSet rs = st.executeQuery(sql);
      while (rs.next())
      {
      HashMap
      map = new HashMap();
      map.put("shape", rs.getString("ST_AsGeoJson"));
      map.put("velocity", rs.getString("velocity"));
      map.put("direction", rs.getString("direction"));
      result.add(map);
      }
      rs.close();
      st.close();
      }
      catch(Exception e)
      {
      System.err.print(e);
      }

      return result;
      }


      public ArrayList
      > getEffectZones()
      {
      ArrayList
      > result = new ArrayList>();

      if ( this.getConn()==null )
      return result;

      try
      {
      String sql = "select *,ST_AsGeoJson(";
      sql+= "ST_Buffer(";
      sql+= "ST_PolygonFromText(";
      sql+= "'POLYGON(('";
      sql+= "||ST_X(shape)||' '||ST_Y(shape)||','";
      sql+= "||ST_X(shape)+velocity*cos((direction+15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction+15)*PI()/180)/20||','";
      sql+= "||ST_X(shape)+velocity*cos((direction-15)*PI()/180)/20||' '||ST_Y(shape)+velocity*sin((direction-15)*PI()/180)/20||','";
      sql+= "||ST_X(shape)||' '||ST_Y(shape)||'))'";
      sql+= ")";
      sql+= ", velocity/50";
      sql+= ")";
      sql+= ") ";
      sql+="from sde.wind";

      Statement st = this.getConn().createStatement();
      st.setFetchSize(0);
      ResultSet rs = st.executeQuery(sql);
      while (rs.next())
      {
      HashMap
      map = new HashMap();
      map.put("shape", rs.getString("ST_AsGeoJson"));
      map.put("velocity", rs.getString("velocity"));
      map.put("direction", rs.getString("direction"));
      result.add(map);
      }
      rs.close();
      st.close();
      }
      catch(Exception e)
      {
      System.err.print(e);
      }

      return result;
      }

      } 

       

      引自: 牛魔王的作坊

       

       

       

       

       

       

      posted on 2009-04-28 11:09  * 天堂在線 *  閱讀(14377)  評(píng)論(0)    收藏  舉報(bào)

      主站蜘蛛池模板: 免费看黄片一区二区三区| 精品国产欧美一区二区三区在线 | 亚洲国产一区二区三区| 无码欧亚熟妇人妻AV在线外遇| 精品人妻伦一二三区久久| 日韩av爽爽爽久久久久久| 国产色a在线观看| 色播久久人人爽人人爽人人片av| 国产色悠悠视频在线观看| 内地偷拍一区二区三区| 亚洲精品美女一区二区| 延长县| 99久久国产成人免费网站| 福利视频一区二区在线| 久久一日本综合色鬼综合色 | 久久久精品2019中文字幕之3| 国产中文字幕精品喷潮 | 内射无套内射国产精品视频| 中文国产不卡一区二区| 婷婷五月综合激情| 涩涩爱狼人亚洲一区在线| 日本高清中文字幕免费一区二区 | 成人国产亚洲精品一区二区| 欧美成人黄在线观看| 国产极品美女高潮抽搐免费网站| 齐河县| 丰满妇女强制高潮18xxxx| 欧美交A欧美精品喷水| 中文字幕日韩有码一区| 国产亚洲精品岁国产精品| 精品人妻少妇一区二区三区在线| 精品日韩亚洲av无码| 欧美精品人人做人人爱视频| 男女爽爽无遮挡午夜视频| 天堂亚洲免费视频| 免费a级毛视频| 亚洲综合无码日韩国产加勒比| 国产成人毛片在线视频| 国产成人亚洲精品日韩激情| 亚洲一二三区精品美妇| 不卡高清AV手机在线观看|