geometry:既可以存放平面坐標(biāo)系又可以存放地理坐標(biāo)系數(shù)據(jù)
geography:地理坐標(biāo)系,在POSTGIS1.5版本添加的此功能
POSTGIS中使用雙冒號(hào)
::geography
這種寫法其實(shí)就是為了顯式地處理geometry中可以同時(shí)存放平面坐標(biāo)和球面坐標(biāo)的問題,使用::geography時(shí)坐標(biāo)串的wkt值并沒有變化,說明并不是做了轉(zhuǎn)換,而是指定
POSTGIS導(dǎo)數(shù)據(jù)工具是使用shp2pgsql.exe進(jìn)行操作的,而不是ogr2ogr。
POSTGIS自己的導(dǎo)數(shù)據(jù)工具是通過AddGeometryColumn函數(shù)添加空間數(shù)據(jù)表的,它不能指定geometry和geography,所以使用POSTGIS自己帶的工具入庫時(shí)數(shù)據(jù)直接默認(rèn)就是geometry類型。
通過Esri File GDB工具讀取的字段里類型為geography
CREATE TABLE "public"."test"("OBJECTID" integer,"geom" geography,"shortint" INTEGER,"longint" INTEGER,"double" DECIMAL,"text" VARCHAR(50),"date" timestamptz,"blob" bytea,"SHAPE_Length" DECIMAL,"SHAPE_Area" DECIMAL,"create_time" timestamp,"failure_time" timestamp,"id" serial4);COMMENT ON COLUMN "public"."test"."OBJECTID" IS 'OBJECTID';COMMENT ON COLUMN "public"."test"."geom" IS '幾何';COMMENT ON COLUMN "public"."test"."shortint" IS '短整形';COMMENT ON COLUMN "public"."test"."longint" IS '長(zhǎng)整型';COMMENT ON COLUMN "public"."test"."double" IS '雙精度';COMMENT ON COLUMN "public"."test"."text" IS '文本';COMMENT ON COLUMN "public"."test"."date" IS '日期';COMMENT ON COLUMN "public"."test"."blob" IS 'blob';COMMENT ON COLUMN "public"."test"."SHAPE_Length" IS 'SHAPE_Length';COMMENT ON COLUMN "public"."test"."SHAPE_Area" IS 'SHAPE_Area';COMMENT ON COLUMN "public"."test"."create_time" IS '創(chuàng)建時(shí)間';COMMENT ON COLUMN "public"."test"."failure_time" IS '
失效時(shí)間';COMMENT ON COLUMN "public"."test"."id" IS '主鍵 ID'
turf.js是計(jì)算的平面距離
通過AddGeometryColumn函數(shù)生成的空間表字段會(huì)在表中新增這幾行記錄
geom geometry(MultiPolygon, 4490) NULL,
CONSTRAINT enforce_dims_geom CHECK ((st_ndims(geom) = 2)),
CONSTRAINT enforce_geotype_geom CHECK (((geometrytype(geom) = 'MultiPolygon'::text) OR (geom IS NULL))),
CONSTRAINT enforce_srid_geom CHECK ((st_srid(geom) = 4490))
通過ST_SetSRID函數(shù)設(shè)置的字段為空間字段中會(huì)在表中有以下記錄,記錄中并不能找到我們?cè)O(shè)置的坐標(biāo)系,如:SRID=4490;的字樣,所以推測(cè)坐標(biāo)信息是存放在其它內(nèi)置的表中的,所以不管是插入數(shù)據(jù)前執(zhí)行ST_SetSRID函數(shù)還是插入后執(zhí)行該函數(shù),整個(gè)數(shù)據(jù)表所有數(shù)據(jù)條數(shù)都會(huì)被認(rèn)定為這一被設(shè)置的坐標(biāo)系。
geom geometry NULL,
pg配置的網(wǎng)頁管理工具上通過CREATE SCRIPT生成的字段則是如下,將類型和坐標(biāo)系分開了
geom geometry,
CONSTRAINT enforce_srid_geom CHECK (st_srid(geom) = 4490),
CONSTRAINT enforce_dims_geom CHECK (st_ndims(geom) = 2),
CONSTRAINT enforce_geotype_geom CHECK (geometrytype(geom) = 'MultiPolygon'::text OR geom IS NULL)
有個(gè)疑問,pg中關(guān)于表中某字段的空間坐標(biāo)系pg到底存放在哪里的,好像沒有地方可以直接看到。
shp2pgsql.exe工具如果通過-s參數(shù)指定了坐標(biāo)系的話,在生成的sql中會(huì)有如下信息帶在空間字段里的每一條數(shù)據(jù)中,
而實(shí)際查看庫中的數(shù)據(jù)并沒有SRID=4490;MULTIPOLYGON(((106.908851425664 30.517018528798,字樣,
所以通過postgis自帶工具導(dǎo)入數(shù)據(jù)時(shí)它并沒有使用-s參數(shù),
所以pg中空間表的坐標(biāo)系信息確實(shí)存放在與表本身無關(guān)的其它位置。

GIS引擎開發(fā)
最近自己用Mapserver包裝了一個(gè)GIS引擎作為Geoserver的替代方案,適合小微企業(yè)和個(gè)人用戶,下載地址:
解壓密碼:2234,后續(xù)我將按計(jì)劃進(jìn)行完善,力爭(zhēng)做到輕量、易用、穩(wěn)定、高性能、開源。
同時(shí)我將按低價(jià)提供服務(wù),并低價(jià)出售源代碼,以保證日常開銷。
參考: