編譯原生pg
① 如何設置SIMATIC NET
通過CP1613 建立SIMATIC NET OPC 伺服器與PLC 的S7 連接 一.基本相關信息 1. SIMATIC NET PC 軟體簡介 SIMATIC NET 是西門子在工業控制層面上提供給您的一個開放的,多元的通訊系統。 它意味著您能將工業現場的PLC、主機、工作站和個人電腦聯網通訊,為了適應自動化 工程中的種類多樣性,SIMATIC NET 推出了多種不同的通訊網路以因地制宜,這些通 訊網路符合德國或國際標准,他們包括: 工業乙太網 AS-I PROFIBUS PROFIBUS-PA SIMATIC NET 系統包括: 傳輸介質,網路配件和相應的傳輸設備 協議和服務 連接PLC 和電腦到LAN 網上的通訊處理器(CP 模塊) 2. 用於ETHERNET 的先進PC 組態 先進PC 組態是隨SIMATIC NET V6.0 以上提供的。Advanced PC Configuration 代表 一個 PC 站的全新、簡單、一致和經濟的調試和診斷解決方案。它可以取代以前的 PC 組態工具COM L S7。通過使用NCM PC V5.1+SP2 或以上和STEP 7 V5.1+SP2 或更 高版本,一台PC 可以和在SIMATIC S7 中一樣進行組態,並通過網路下載. 這里提到兩種組態工具NCM PC,STEP 7,區別如下: NCM PC: NCM PC 是隨SIMATIC NET 軟體光碟提供,它可以創建PC 項目和打開STEP 7 項目。但NCM PC 組態軟體不能編輯STEP 7 中的S7 程序塊。 STEP 7: 完整版本STEP 7 軟體的安裝是包含NCM PC 的,在STEP 7 硬體組態環境中即 可配置PC 站。 3. 用於ETHERNET 的OPC 伺服器 SIMATIC NET OPC 伺服器隨 SIMATIC NET 軟體光碟提供,其名稱為 OPC.SimaticNET 。 OPC(OLE For Process Control,用於過程式控制制的OLE)的基本原理是,OPC 客戶 應用程序可以通過一個標准、開放的多供應商介面,與OPC 伺服器進行通訊。 OPC 伺服器提供: 數據訪問介面2.05 報警和事件介面1.02(單一事件) 在不同製造商自動化產品之間的標准化。 用於不同部件的相同的、用戶友好的用戶介面。 從工業網/廣域網中每個計算機的可訪問性。 經過客戶機介面(C++)的高性能數據存取。 經過自動化介面(VB)或包含OCX 數據控制,使用容易。 網際網路通訊可通過XML DA 介面實現。 變數(項目)的成組化;這樣可以在很短的時間內進行大容量的數據存取。 通過OPC 伺服器,以下通訊訪問選件可以用於Ethernet: S7 通訊 S5 兼容通訊(發送/接收) PROFInet 4. PC 機的軟體和硬體需求 軟體: SIMATIC NET PC SOFTWARE V6.0 SP5 或以上版本 NCM PC V5.1+SP2 或以上版本 STEP 7 V5.1+SP2 或以上版本 SOFTNET-IE S7 授權(CP1612 或普通網卡) S7-1613 授權(CP1613) 硬體: CP1613 或普通10/100 自適應乙太網卡 PC機操作系統:根據不同版本SIMATIC NET軟體來選擇,如WINDOWS2000; WINDOWSXP… 查閱 SIMATIC NET 軟體兼容性列表。
5. SIMATIC NET 軟體產品性能及使用注意事項 請點擊
查閱 SIMATIC NET 軟體系列產品的性能數據及使用注意事項
二.通過ETHERNET(CP1613)建立OPC 伺服器與S7 PLC 的S7 連接(基 於先進的PC 組態) 1. 例子中所用的軟體與硬體 SIMATIC NET PC SOFTWARE V6.2 SP1 S7 1613 授權 STEP 7 V5.3 SP1 CP1613 S7 300 CPU315-2DP,CP343-1(6GK7 343-1EX20-0XE0) 通訊協議 TCP/IP 2. OPC 伺服器與PLC S7 連接通訊的組態 A. S7 PLC 的組態 1) 打開SIMATIC Manager,通過FileNew 創建一個新項目,本例名稱為1613OPC 圖1: 創建新項目 2) 通過InsertStationSimatic Pc Station 插入一個SIMATIC 300 站 圖2:插入S7 300 Statiion 3) 雙擊Hardware 進入S7 300 硬體組態,在相應插槽插入與機架硬體匹配的模塊,並 對CP343-1 分配IP 地址等參數,建立乙太網。 圖3: 組態硬體 4) 設置完各硬體參數後,點擊存檔編譯按鈕,編譯無誤後即完成S7 300 硬體組態。 圖4:S7 300 組態的編譯存檔 5) S7300PLC 的下載 首先要選擇正確的下載路徑,即設置PG/PC 介面: 在「SIMATIC Manager」主菜單「Option」的下拉菜單中選擇「Set PG/PC Interface」, 或者打開操作系統的控制面板「StartControl Panel」,同樣打開「Set PG/PC Interface」 進行設置。如圖5,圖6。 圖5:在STEP7 中設置PG/PC 介面 圖6:控制面板PG/PC 介面設置 在PG/PC 介面設置中,根據所選的下載方式(MPI/Profibus/Ethernet)和PC 所使用的硬 件(PC 適配器/CP5613/CP5512 等)來設置正確的介面參數。詳細設置方法可參考西門子自 動化與驅動集團技術支持與服務網站網上課堂PLC 課程中的「如何使用PC Adapter CP5611 CP5511 CP5512 建立STEP7 與PLC 通訊」這篇文章。 打開www.ad.siemens.com.cn/service 主頁,進入專家奉獻的網上課堂即可下載。 圖7: Set PG/PC Interface 設置窗口 B. Simatic PC 站的組態 步驟一: 配置PC 站的硬體機架 當SIMATIC NET 軟體成功安裝後,在PC 機桌面上可看到Station Configurator 的快捷 圖標,同時在任務欄(Taskbar)中也會有Station Configuration Editor 的圖標。 圖8: Station Configurator 桌面快捷圖標 圖9:任務欄中的圖標 1) 通過點擊圖標打開Station Configuration Editor 配置窗口 圖10:Station Configuration Editor 配置窗口 2) 選擇一號插槽,點擊 Add 按鈕或滑鼠右鍵選擇添加,在添加組件窗口中選擇 OPC Server 點擊OK 即完成。 圖11:添加OPC Server 3) 同樣方法選擇三號插槽添加CP1613 圖12: 添加CP1613 插入CP1613 後,即彈出其屬性對話框。設置網卡參數,如IP 地址,子網掩碼等。 圖13: 網卡屬性即參數設置 4) 分配PC Station 名稱 點擊「Station Name」按鈕,指定PC 站的名稱,這里用默認的名稱。命名原則:這里的 PC 站名應與STEP7 硬體組態插入的PC Station 名稱一致。點擊「OK」確認即完成了PC 站的硬體組態。 圖14:命名PC 站名稱 註:Station Name 並不是特指PC 機本機的名稱 步驟二:配置控制台(Configuration Console)的使用與設置 1) 配置控制台(Configuration Console)是組態設置和診斷的核心工具,用於PC 硬體 組件和PC 應用程序的組態和診斷。 2) 正確完成 PC 站的硬體組態後,打開配置控制台(startsimaticsimaticnetConfiguration console),可以看到所用乙太網卡的模式已從 PG mode 切換到 Configuration mode,插槽號(Index)也自動指向3。如圖15。 圖15 配置控制台(Configuration Console) 註:對於Simatic Net V6.1 或V6.0 版本的軟體,你需要在上面窗口中,手動將CP1613 模塊 模式(Mode of the mole)從PG 模式切換到組態模式(Configured mode),並設置Index 號。然後再在Station Configuration Editor 中添加硬體。 3) 在Access Points 設定窗口中,將S7ONLINE 指向PC internal(local)。此設定是為 PC 站組態的下載做准備。 註:在控制面板(StartControl Panel)的「Set PG/PC Interface」中也可設置 圖16:PC Station 配置控制台Access Point 步驟三: 在STEP 7 中組態PC Station 1) 在STEP7 1613OPC 項目中,通過InsertStationSimatic Pc Station 插入一個PC 站。特別注意的是,要將PC Station 默認名稱「SIMATIC PC Station(1)」改為與 Station Configuration Editor 中所命名的Station Name 名稱相同,這里用默認名 「SIMATIC PC Station(1)」。雙擊Configuration 即可進入PC Station 組態界面。 圖17: STEP 7 中創建新項目與建立Simatic PC Station 2) 在硬體組態中,從硬體目錄窗口選擇與已安裝的Simatic net 軟體版本相符的硬體插 入到與在Station Configuration Editor 配置的 PC 硬體機架相對應的插槽中。 圖18: PC Station 硬體組態 3) 分配1613 乙太網絡參數 點擊CP1613 屬性對話框中Properties 按鈕打開乙太網介面參數設置對話框,按要求 設置乙太網卡的IP 地址和相應的子網掩碼。IP 地址應與實際硬體所設乙太網卡IP 地址一致。(與圖13 中IP 地址相同)並用New 按鈕建立一個ethernet 網路。 確認所有組態參數,完成網卡設置。 圖19: CP1613 參數設置 圖20:乙太網卡參數設置 4) 完成PC 站組件設置後,按下編譯存檔按鈕確定且存儲當前組態配置 圖21:組態的編譯存檔 5) 編譯無誤後,點擊「Configure Network」按鈕,進入NetPro 配置窗口。 圖22:選擇「Configure Network」按鈕 6) 在NetPro 網路配置中,用滑鼠選擇OPC Server 後在連接表第一行滑鼠右鍵插入 一個新的連接或通過「Insert>New Connection」也可建立一個新連接。 圖23:在網路配置(NetPro)中添加新連接 7) 如果在同一STEP 7 項目中,所要連接的PLC 站已經組態完成,即PLC 乙太網 通訊處理器(CP343-1 or CP443-1)網路已經使能,在選擇「Insert New Connection」後,連接會自動創建,需確認連接屬性即可。 圖24:S7 連接屬性設置及確認 8) 確認所有配置後,已建好的 S7 連接就會顯示在連接列表中。點擊編譯存檔按 鈕或選擇Network>Save and Compile,如得到No error 的編譯結果,則正確組 態完成。這里編譯結果信息非常重要,如果有警告信息(Warning)顯示在編 譯結果對話框中,這僅僅是一條信息。但如果有錯誤信息(error Message),說 明組態不正確,是不能下載到PC Station 中的。 圖25: 組態編譯存檔 圖26: 編譯結果 步驟四:組態下載 1) 完成PC 站組態後,即可在NetPro 窗口點擊功能按鈕欄中下載按鈕將組態下載到PC 站中。需注意的是,下載過程中會刪除已有相關組件的數據,新的組態數據將被下載 到PC 機。點擊OK 執行下載。 圖27:組態下載 2) 下載完成後,可以打開Station Configuration Editor 窗口檢查組件狀態。下圖為正確 狀態顯示畫面。OPC Server 插槽Conn 一欄一定要有連接圖標,此項說明連接激活。 (Simatic Net 軟體版本V6.1 或V6.0 版本無此狀態欄) 圖28: PC Station 運行狀態 步驟五:數據通訊的測試-OPC Scout OPC Scout 工具隨Simatic Net 軟體一起提供,當完成PC Station 組態下載後,可用此 工具進行OPC Server 和PLC 的數據通訊測試。 1) 打開OPC Scout, (Start>SIMATIC>SIMATICNet>OPC Scout),如圖21 雙擊「OPC SimaticNet」在隨之彈出的「ADD Group」對話框中輸入組名,本例命名為「1613」。 點擊OK 確認。 圖29: 在OPC Scout 中添加一個組「1613」 2) 雙擊已添加的連接組(1613),即彈出「OPC Navigator」對話框,此窗口中顯示在 Configuration Console 所激活的連接協議。雙擊「S7」,在PC Station 組態NetPro 中所建的連接名會被顯示(S7 connection_1)。雙擊此連接,即可出現有可能被訪 問的對象樹(objects tree),在PLC CPU 中已存在的DB 塊也會出現。雙擊任意所 需訪問的PLC 數據區都可建立標簽變數。這里以DB 區為例。 雙擊 DB 如果所顯示的 DB 塊有紅叉標記,這並無問題。只要再次雙擊「New Definition」,「Define New Item」對話框即被打開。可在此定義標簽變數與數據類 型。註:Datatype、Address、No.Value 參數必須定義,No.Value 是指數據長度。定 義完成後,點擊OK 確認。 圖30:定義條目及標簽變數 3) 在「Define New Item」中點擊確認後,新定義的條目即顯示在OPC Navigator 的 中間窗口。點擊「」就可將此條目移到 OPC-Navigator 的右側窗口,再點擊 OK 按鈕就可將此條目連接到OPC Server. 圖31: 建立定義條目與OPC Server 連接 4) 上一步確認後,所定義的條目(Item)即嵌入到OPC Scout 中。如果「Quality」 顯示「good」,則OPC Server 與PLC 的S7 連接已經建立,也就意味著可以對標簽變 量進行讀寫操作。 圖32:OPC Scout 與OPC Server 的連接 雙擊條目的「Value」欄,即可在「Write Value(s) to the Item(s)」窗口中對有關條目進行寫操作 圖33:寫操作 三. PC 站組態與OPC Server 通訊過程中常見問題的解釋 1. 在執行PC Station 組態下載過程中,可能會出現「Cannot reach station manager」的錯 誤信息提示,可能的原因如下: 1) Set PG/PC Interface 或Configuration Console 中,S7 Online Access Points 應指向 PC Internal(Local)。 2) 虛擬PC 站的名稱與STEP 7 或NCM PC 項目中建立PC 站的名稱不符。 3) 虛擬PC 站組件(CP 卡、OPC 或Application)插槽號與STEP 7 或NCM PC 項 目組態中的插槽號不同。 詳細說明可以訪問 www.ad.siemens.com.cn/service , 選擇技術資源中的產品支持 ID:12033912 2. OPC Scout 的OPC-Navigator 窗口中,紅色的叉的含義時什麼? Simatic Net 軟體的OPC 客戶端(OPC Scout)提供了使用OPC Navigator 來瀏覽OPC 服 務器的地址區域的選項。這里可以看到 OPC 伺服器中已有地址的已知變數。如果變數還 沒有定義,相對應的地址圖標就以紅色的叉標注。只要雙擊「New Definition」,「Define New Item」對話框即被打開。可在此定義標簽變數,當 OPC Server 再次連接時,這些變數即 被OPC 接收,紅叉即消失。所以紅叉並不是錯誤信息,僅是沒有定義OPC 變數的提示。 詳細說明可以訪問 www.ad.siemens.com.cn/service , 選擇技術資源中的產品支持 ID:8763769 3. SIMATIC NET 軟體兼容性列表 詳細說明可以訪問www.ad.siemens.com.cn/service , 選擇技術資源中的產品支持,在 英文界面的搜索引擎中,鍵入關鍵詞「Compatibility list」, 即可得到相關產品兼容性 的常見問題列表,您可點擊所需條目進入具體內容頁面下載文檔。 圖36: 兼容性查詢
② 如何編譯 cm12
CN:准備編譯
EN:Preparing System for Build
CN:通過APT-GET,安裝以下d軟體包
EN:Install the following items via apt-get.
Code:
sudo apt-get install bison build-essential curl flex git gnupg gperf libesd0-dev libncurses5-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 libxml2-utils lzop openjdk-6-jdk openjdk-6-jre pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
CN:如果是32位系統,清不要安裝g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
EN:As per the instructions on the wiki for building CM, if you use a 32bit system, do not install g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev.
CN:安裝最新版本JDK
EN:Install the latest version of Java's development kit using the following.
Code:
sudo apt-get install openjdk-7-jdk
CN:安裝ADT
EN:Install the Android Development Kit using the following.
Code:
sudo apt-get install android androidsdk-uiautomatorviewer android-right android-src-vendor android-emulator android-tools-adb android-headers android-tools-adbd androidsdk-ddms android-tools-fastboot androidsdk-hierarchyviewer android-tools-fsutils androidsdk-traceview
CN:執行以下指令
EN:Run the following in terminal.
Code:
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
CN:重啟系統,載入配置文件
EN:reboot your system or use the following in terminal to load the .profile file again.
Code:
. ~/.profile
CN: 獲取源碼
EN:Getting the source code.
CN:執行以下命令,獲取CM12的源碼
EN:Now we can get onto grabbing the source code of CM12.
Run the following in terminal.
Code:
mkdir ~/cm
cd ~/cm
repo init -u git://github.com/CyanogenMod/android.git -b cm-12.0
mkdir .repo/local_manifests
nano .repo/local_manifests/local_manifests.xml
CN: 當NANO打開之後,粘貼下面的內容,然後用ctrlx保存
When nano appears, paste the following into it and then exit using ctrl-x and choose to save.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<project name="CyanogenMod/android_device_oneplus_bacon" path="device/oneplus/bacon" remote="github" />
<project name="CyanogenMod/android_device_qcom_common" path="device/qcom/common" remote="github" />
<project name="CyanogenMod/android_device_oppo_msm8974-common" path="device/oppo/msm8974-common" remote="github" />
<project name="CyanogenMod/android_device_oppo_common" path="device/oppo/common" remote="github" revision="cm-12.0" />
<project name="CyanogenMod/android_kernel_oneplus_msm8974" path="kernel/oneplus/msm8974" remote="github" />
<project name="TheMuppets/proprietary_vendor_oppo" path="vendor/oppo" remote="github" />
<project name="TheMuppets/proprietary_vendor_oneplus" path="vendor/oneplus" remote="github" />
<project name="CyanogenMod/android_frameworks_opt_connectivity" path="frameworks/opt/connectivity" remote="github" revision="cm-11.0" />
</manifest>
CN: 執行以下代碼,繼續獲取代碼
EN:Continue getting the code using the following.
Code:
repo sync
cd vendor/cm
./get-prebuilts
cd ../..
CN: 編譯 CM12
EN:Building CM12
Run the following commands to build CyanogenMod.
Code:
. build/envsetup.sh
breakfast bacon
brunch bacon
CN: 成功編譯,從out/target/proct/bacon/ 獲取 cm-12-*-UNOFFICIAL-bacon.zip
EN:After successful build, you should be able to go about ing the built CyanogenMod and installing it into your phone. The CyanogenMod build is located in ~/cm/out/target/proct/bacon/ named something like cm-12-*-UNOFFICIAL-bacon.zip
You can install folllowing: http://forum.xda-developers.com/onep...s-one-t2940091
Re-building to update.
To re-build, you should just be able to run the following (Not yet tested myself, but makes logical sense).
Code:
make clobber
repo sync
cd vendor/cm
./get-prebuilts
cd ../..
. build/envsetup.sh
brunch bacon
Q&A
Q: Recieve error: fatal: plicate path device/qcom/sepolicy in ~/cm/.repo/manifest.xml
A: edit .repo/local_manifests/local_manifests.xml to remove the item which matches the item located in bold.
Q: How big is the repo?
A: 20GB just source code and 40GB when built. Therefore you should aim to have about 60GB free on your system.
③ 請問linux下,gcc編譯程序的過程(從讀取源文件到製作可執行程序中間所有過程,越詳細越好)
gcc -S *.c 預處理+反匯編
說起資料庫,大家耳熟能詳的商業資料庫產品當推Oracle、微軟的SqlServer和IBM的
DB2等,而開源資料庫中則有兩大產品MySQL和PostgreSQL。
PostgreSQL 是一種對象-關系型資料庫管理系統(ORDBMS),也是目前功能最強大、
特性最豐富和最復雜的自由軟體資料庫系統。它起源於伯克利(BSD)的資料庫研究計劃,
目前是最重要的開源資料庫產品開發項目之一,有著非常廣泛的用戶。
PostgreSQL 可以說是最富特色的自由資料庫管理系統,也有人認為可以是最強大的自由
軟體資料庫管理系統。PostgreSQL 是唯一支持事務、子查詢、多版本並行控制系統、數據完
整性檢查等特性的唯一的一種自由軟體的資料庫管理系統。能在多平台下---包括Linux、
FreeBSD和Windows等---運行,並且支持多語言的開發。
在兩大開源資料庫產品的對比中,一般認為MySQL速度更快,所以得到更為廣泛的使
用;而PostgreSQL性能更為先進,PostgreSQL 提供很多 MySQL 目前所不支持的特性,比
如觸發器、視圖、存儲過程等等,在記錄數超千萬之後性能表現尤其出色。
當前的最新版本是PostgreSQL 8.2.3,官方網站是:
www.postgresql.org
1.2 什麼是PostGIS
PostGIS在對象關系型資料庫PostgreSQL上增加了存儲管理空間數據的能力,相當於
Oracle的spatial部分。PostGIS最大的特點是符合並且實現了OpenGIS的一些規范,是最著
名的開源GIS資料庫。
當前的最新版本是PostGIS 1.2.1,官方網站是:
www.postgis.org
二 PostgreSQL和PostGIS的安裝
2.1 在windows下安裝。
新版本的PostgreSQL在其安裝程序中集成了PostGIS,只需要在安裝過程中選中
PostGIS和pgsql項就可以了。
2.2 在Debian下安裝PostGIS
# apt-get install postgresql-8.1 postgresql-8.1-postgis
當前Etch中的版本:PostgreSQL是8.1.7,而PostGIS是1.1.6,雖然不是最新的版本,
但已經足夠了。
還需要做的工作是:
1) 創建一個專門用於PostGIS的資料庫並為專用資料庫導入PostGIS支持:
# su – postgres
$ cd /usr/share/postgresql-8.1-postgis
$ createdb wen1
$ createlang plpgsql wen1
$ psql -d wen1 -f lwpostgis.sql
$ psql -d wen1 -f spatial_ref_sys.sql
2) 創建一個專門的用戶,並把相應的資料庫和數據表的屬主設置為該用戶:
# su – postgres
$ psql
$ create user wen1 password 『123456』;
$ alter database wen1 owner to wen1;
$ alter table spatial_ref_sys owner to wen1;
$ alter table geometry_columns owner to wen1 ;
3) 修改PostgreSQL配置文件以便可以遠程使用。
修改PostgreSQL的配置文件/etc/postgresql/8.1/main/Postgresql.conf,將其中的一句:
listen_address=』localhost』
前面的注釋去掉,並把』localhost』該為』*』。
修改Postgresql的配置文件/etc/postgresql/8.1/main/pg_hba.conf,在文件後面加一句:
host all all 192.168.0.0/24 password
這句的意思是:同網路中192.168.0.*的機器可以以密碼的形式使用所有的資料庫。更具
體的參數意義直接看該配置文件中的注釋就可以了。
這里一定要配置正確,否則無法在遠程連接PostgreSQL資料庫。
2.3 源碼安裝PostgreSQL和PostGIS
參閱以前寫的老文章。
三 PostGIS的使用
要使用PostGIS,需要兩方面的預備知識,一是要熟悉基本的SQL語法;二是熟悉
PostgreSQL資料庫的基本使用。
(一) 快速入門
我們使用前面創建的資料庫wen2,用戶為wen1,現在創建一個包含三個點的資料庫
test1:
首先在Etch下以wen1登陸,然後打開wen2資料庫:
$ psql -d wen2 ;
再在PostgreSQL的控制台下輸入以下命令:
wen2=> create table test1 (myID int4, pt geometry, myName
varchar );
wen2=> insert into test1 values (1, 'POINT(0 0)', 'beijing'
);
wen2=> insert into test1 values (2, 'POINT(31.5 60.87)',
'shanghai' );
wen2=> insert into test1 values (3, 'POINT(10.77 85.902)',
'tianjin' );
這樣我們利用PostGIS創建了一個包含三個點的GIS數據表。
為了能在QGIS中打開這一圖層,我們還需要為數據表創建一個主鍵:
wen2=>alter table test1 add primary key (myID);
可以看到PostGIS的使用其實就相當於使用一個經過擴展的SQL語法,上述語句熟悉
SQL語法的人一看都很熟悉,都是普通的SQL語句,不同的只不過是增加了PostGIS特殊的
geometry數據類型。
你可以再試試這些SQL語句:
select * from test1;
select myID,AsText(pt) from test1;
select Distance(pt, 'POINT(0 0)') from test1;
(二) PostGIS的Geometry數據類型
Geometry可以說是PostGIS最重要的一個概念,是「幾何體」的意思,由於PostGIS很
好地遵守OGC的」Simple Feature for Specification for
SQL」規范,目前支持的幾何體類型包
含其實例有:
POINT(1 1)
MULTIPOINT(1 1, 3 4, -1 3)
LINESTRING(1 1, 2 2, 3 4)
POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))
MULTIPOLYGON((0 0, 0 1, 1 1, 1 0, 0 0), (5 5, 5 6, 6 6, 6 5, 5
5))
MULTILINESTRING((1 1, 2 2, 3 4),(2 2, 3 3, 4 5))
而geometry具體表現又有兩種形式,一種叫做WKT(Well Known Text)形式,如上面的
例子。或者使用如下SQL語句瀏覽:
select AsText(pt) from test1;
另一種叫做「Canonical Form」形式,看上去是一串古怪的數字,其實是一種增強的十六
進制編碼,使用如下SQL語句就可以瀏覽了:
select pt from test1;
(三) 讀寫PostGIS數據
建設好PostGIS資料庫之後,我們現在需要進行讀寫GIS數據了,包括把GIS寫入到
PostGIS資料庫中以及在應用程序中使用PostGIS資料庫的數據。讀寫PostGIS目前主要有以
下四種方式:
3.1 使用psql語言
Psql語言是PostgreSQL內嵌的一個命令行工具,其語法基本上和標準的SQL語法是一
致的,可以使用Psql工具,結合標准SQL語法和一些PostGIS的擴展對PostGIS資料庫進行
讀寫操作。
具體例子如上面「快速入門」中的例子。
這種方式功能強大,但全部需要手工操作,煩瑣且繁重。
3.2 使用一些小工具
有兩個很有用的小的轉換工具,一是shp2pg;一是ogr2ogr
3.2.1 shp2pgsql和pgsql2shp
shp2pgsql和pgsql2shp是PostGIS自身攜帶的一對在Shape文件和PostGIS資料庫之間進
行轉換的工具,在Debian中安裝好PostGIS之後,這兩個程序已經位於可執行文件的搜索路
徑上,因此可以在系統中任何位置使用。
假如當前目錄下有完整的china.shp文件(應該有三個同名不同擴展名的文件),需要把其
中數據輸入到上述的wen2資料庫中的數據表china_postgis中,具體操作為(操作用戶為
wen1):
$ shp2pgsql china china_postgis > tmp.sql
$ psql -d wen2 -f roads.sql
這個工具很好用,缺點在於使用范圍有限,只針對Shape文件格式。
3.2.2 ogr2ogr
PostGIS本身的shp2pg工具只把shape文件轉換到PostGIS 資料庫中,那如何把其他的
GIS數據加入呢?比如說MapInfo的mid格式,ESRI的e00格式呢?這就要使用ogr這個工
具了。
Ogr目前是gdal的一個組成部分,那什麼是gdal呢?其官方主頁(http://www.gdal.org)上
如此介紹:
GDAL is a translator library for raster geospatial data formats
that is released under an X/MIT
style Open Source license by the Open Source Geospatial
Foundation. As a library, it presents a
single abstract data model to the calling application for all
supported formats. It also comes with a
variety of useful commandline utilties for data translation and
processing.
簡單地說,Gdal是一個各種Gis數據格式的轉換軟體庫,ogr則是轉換矢量GIS數據的
軟體庫。
目前ogr能夠支持的數據格式包括:
Arc/Info Binary Coverage、DWG、ESRI Personal
GeoDatabase、ArcSDE、ESRI
Shapefile、GML、GRASS、Mapinfo File、Microstation DGN、ODBC、Oracle
Spatial和
PostgreSQL等。應該說,這就基本包括了我們平常用到的所有矢量型GIS文件格式了。
Gdal支持的柵格數據格式參閱http: //www.gdal.org/formats_list.html
下面我們從源碼編譯安裝gdal---因為我在Debian下使用apt方式安裝的gdal並不支持
postgresql資料庫,其實更為簡便的方法也許是去gdal.org下載一個Fwtools的工具包,可以
直接運行不用繁瑣的編譯,既有Windows的,也有Linux下用的,只不過這個包有些大。
1) 下載最新的gdal-1.3.2
2) 解壓
3) ./configure --prefix=/opt/gdal
--with-pg=/opt/pg/bin/pg_config --without-ogdi
這里我習慣把軟體安裝在/opt目錄下。
--with-pg參數很重要,使ogr可以支持PostGIS,後面的參數是我的PostGIS安裝的地方。
我在這里編譯很多次失敗,經過仔細查找,發現問題出在ogdi上,所以暫時我只好使
它不支持ogdi。
4) make
5) make install
下面是使用過程,假設現在我要把一個rai.mid文件導入到資料庫data1中:
$ ogr2ogr –f Postgresql PG:dbname=data1 rai.mid
注意,f參數後面跟的是導入的數據類型,最後那個文件才是要導出的文件。PG後面說
明的是資料庫的名字,需要是已經創建好的資料庫,而數據表則由程序自動創建。還要特別
注意許可權問題,以上命令我是由postgres用戶執行的。
還有一個要注意的是主鍵問題。一般情況下,你使用shp2pg或者 ogr2ogr向postgis中
增加了Gis數據後,在GIS客戶端添加postgis圖層的時候,常常會因為數據表沒有定義主鍵
而出錯,解決的辦法是,在伺服器上使用psql或者其他sql工具,使用命令:
alter table table_name add primary key (column_name);
另外我們發現ogr竟然是不支持最常見的GIS格式e00格式,好象是因為版權方面的原
因吧。解決的方法就是去sf.net查找相關工具。我在上面就找到一個e002pg工具,支持將
e00文件導入到postGIS資料庫中。
3.3 在其他GIS軟體中讀寫PostGIS數據
比如在QGIS中,能夠打開PostGIS圖層,還有SPIT插件可以把Shape文件輸入到
PostGIS資料庫中。
其他GIS軟體如uDig,Grass等,甚至連ArcInfo都支持或部分支持讀寫PostGIS數據。
3.4 利用介面在應用程序中讀寫PostGIS數據
廣大的開源GIS程序員幾乎為每一種程序設計語言設計好了讀寫PostGIS的介面,如利
用PostgreSQL的JDBC庫,可以使用Java語言在程序中讀寫PostGIS數據;利用libpq庫,
可以使用C語言讀寫PostGIS數據。
(四) 使用PostGIS函數
4.1 PostGIS函數
要能熟練使用PostGIS,掌握PostGIS的所有函數是關鍵。通過掌握這些PostGIS函數,
我們能夠高效、穩定地處理各種地理數據。由於PostGIS的函數設計時都遵守OpenGIS規范,
我們也可以把這些PostGIS叫做OpenGIS函數。
4.2 PostGIS函數的分類
PostGIS函數大致可以分為以下四類
1) 欄位處理函數
這類函數當前一共有3個,分別是:
AddGeometryColumn(var1,var2,var3,var4,var5,var6):為已有的數據表增加一個地理幾何
數據欄位。Var1代表數據表的模式(schema)的名字,一般是public,也可以省略,則使用當
前的預設模式;var2是已有的數據表的名字;var3是新的地理數據欄位的名字;var4是
SRID值,不確定的話就取-1吧;var5是地理數據的類型,可以是POINT等;var6是指該幾
何數據是二維還是三維數據。
前面的SQL語句 create table test1 (myID int4, pt geometry, myName
varchar )更規范的寫
法為:
create table test1 (myID int4, myName varchar );
select AddGeometryColumn('test1','pt',-1,'GEOMETRY',2);
DropGeometryColumn函數顯然是刪除一個地理數據欄位的;
SetSRID函數顯然是設置SRID值的。
2) 幾何關系函數
這類函數目前共有10個,分別是:
Distance Equals Disjoint Intersects Touches Crosses Within
Overlaps Contains Relate
3) 幾何分析函數
這類函數目前共有12個,分別是:Centroid Area Lenth PointOnSurface Boundary
Buffer
ConvexHull Intersection SymDifference Difference GeomUnion
MemGeomUnion
4) 讀寫函數
這類函數很多,主要是用於在各種數據類型之間的轉換,尤其是在於Geometry數據類
型與其他如字元型等數據類型之間的轉換,函數名如AsText、GeomFromText等,其作用是
顯然的。
4.3 PostGIS函數使用示例。
假設在我們的wen2資料庫中,有兩張表,一張為guojia,是從「國家基礎地理數據」
網站下載的國界數據表,數據類型為LINE;二為shengqu_polygon,也從同一個網站下載,
地理數據類型為多邊形。
1) 查詢我國邊境線的長度:
wen1=> select sum(length(the_geom)) as lenth from guojie;
2) 查詢我國面積最大的省區名字:
wen1=> select name area(the_geom) as myarea
from shengqu_polygon
order by myarea DESC
LIMIT 1;
(五) 使用PostGIS擴展函數
除了上述遵循OpenGIS的函數之外,PostGIS還自行擴展了一些當前OpenGIS規范之外
的函數,主要包括以下幾類:
5.1 管理類函數
擴展的管理類函數主要包括一些軟體版本查詢函數,如
postgis_version()、postgis_geos_version()、postgis_proj_version()函數等,分別查詢當前的
PostGIS的版本及其使用的Geos和Proj庫的版本。
5.2 數據類型的輸入輸出函數
除了OpenGIS定義的地理數據類型之外,PostGIS還對數據類型進行了擴展,這種擴展
主要是兩方面的擴展,一是把二維的數據向三維和四維擴展;二就是在WKT和WKB數據
類型基礎上擴展出EWKT和EWKB數據類型。
PostGIS提供了在這些地理數據類型和常用數據類型如字元型、浮點型數據之間進行轉
換的函數。
5.3 量算函數
如length3d函數是對length2d函數的擴展。
5.4 幾何操作函數
如addBBox(geometry)函數給所給的幾何體加上一個邊框。
如simplify(geometry,tolerance)函數可以對折線和多邊形利用Douglas-Peuker演算法進行一
些節點進行刪除,從而使表現的圖形更簡單而清晰,在網路傳輸數據時具有更高的效率。
5.5 操作符號
5.6 其他擴展函數
(六) 建立PostGIS索引
當資料庫的記錄增大的時候,如果沒有建立索引的話,操作的效率就顯著下降。
POstGIS建議當記錄數超過幾千的時候就應該建立索引,而GIS資料庫一般都是海量數據,
所以對PostGIS而言,索引就非常重要。
Shapfile文件為ESRI公司的文件存儲格式,並且得到了業界廣泛的支持。Shapfile格式是一種簡單的,用非拓樸關系的形式存儲幾何位置和地
理特徵的屬性信息的格式。雖然GeoServer採用Shapfile文件可以快速的創建網上地圖服務,但它的缺點確很明顯:
1、Shapefile只支持一個圖層,在實際中沒有意義。
2、直接保用SHP文件不安全,Shapfile文件很容易被病毒或其他原因誤刪除。
3、GeoServer中用Shapfile文件作數據源的效率是很低的。
4、Shapfile中的漢字GeoServer不能解析,會出現亂碼。
5、資料庫可以方便的對地理信息進行查詢。
用PostGIS管理空間數據
PostGIS支持GIST空間索引(附錄1)、規范窗體,能很大的提高處理效率。
OGC格式只提供二維的幾何體,且相關聯的SRID從未深入的用於輸入輸出請求,PostGIS支持OpenGIS組織"Simple
Features for
SQL"規范指定的所有GIS對象和函數,並進行了擴展,格式是EWKB、EWKT,其中增加了對3DZ,3DM和4D
坐標系的支持(當然三維、四維數據的OGC標准還未完全制定),深入引進了SRID信息。
空間數據表結構:PostGIS中存在兩個必需的元數據表格, SPATIAL_REF_SYS(空間參考表格) 和
GEOMETRY_COLUMNS(幾何體屬性列),兩個表用於存儲空間資料庫使用的坐標系統數字ID和文本描述。
PostGIS的shp2pgsql命令可以將Shapfile直接導入到資料庫中也可以導出為SQL文件,推薦先導出為SQL文件再將此文件在SQL運行窗口中執行可將數據導入資料庫。
Shapfile到SQL語句:
shp2pgsql 路徑shp數據文件名 新建的數據表名 >
路徑SQL文件名.sql
Shapfile直接入庫:
shp2pgsql -c 路徑shp數據文件名 新建的數據表名 資料庫名|psql -d 資料庫名
舉例說明:
如將一Shapfile文件「c:road.shp」導入到數據表「road」中,資料庫為「sjzmap」。
1、運行「命令提示符」。
2、切換至PostgreSQL資料庫安裝目錄中的bin目錄下。
3、執行此目錄下的shp2pgsql命令:「shp2pgsql c:road.shp road >
c:road.sql」。
4、如將此文件直接導入資料庫(不推薦):「shp2pgsql -c c:road.shp road
sjzmap | psql -d sjzmap」。
5、使用pgAdmin3
選擇資料庫,再導入表。
⑤ 松下plc PG轉換是什麼意思啊,就是編輯程序的時候背景是灰色的
PG轉換通俗一點就是說讓編程軟體完成對程序的編譯。
⑥ pg格式文件用什麼打開
好像可以試用CAD程序可以打開
⑦ pgadmin4 編譯存儲過程
我知道利用c++語句編譯儲存
1)更改資料庫目錄下的postgresql.conf,加入如下紅色語句:
#shared_preload_libraries = '' # (change requires restart)(這個系統默認下是注釋掉的,在這句下面加入下面語句)
shared_preload_libraries = '$libdir/plugins/plugin_debugger'(這是新加入的)
2)重新啟動pg服務
3)在要進行調試的資料庫里執行pldbgapi.sql文件,這個文件在你pg安裝目錄的share/postgresql/contrib/下面
調試pg的function
1)打開pgadmin4,打開你要調試的資料庫,在你要調試的function上右擊,這時你會發現多了一項Debugging,占擊子項中的debug就可對function進行調試了。
⑧ 安裝postgersql時,最後出現stack builder 2.1.0,這是什麼
那個是堆棧生成器,你可要可不要,根據你自己的情況來定,具體如下
⑨ 為什麼linux不能安裝最新版本的postgresql呢 (postgresql-9.1.2.tar.gz)
可選擇源碼編譯安裝:
一、在root用戶下使用源碼編譯方式安裝PostgreSQL
1. 解壓
tar jxvf postgresql-9.1.2.tar.bz2
2. 檢查依賴軟體包
rpm -qa | grep readline
rpm -qa | grep zlib
rpm -qa | grep gcc
rpm -qa | grep make
3. 如果缺少依賴軟體包,安裝以下軟體包
gcc
make
zlib-devel
readline-devel
4. 配置PostgreSQL
cd postgresql-9.1.2
./configure --prefix=/usr/local/pgsql
5. 編譯並安裝PostgreSQL
make
make install
6. 創建組和用戶
groupadd postgres
useradd -g postgres postgres
passwd postgres
7. 創建資料庫庫文件存儲目錄、給postgres賦予許可權:
mkdir /usr/local/pgsql/data
cd /usr/local/pgsql
chown postgres.postgres data
touch /var/log/pgsql.log
chown postgres.postgres /var/log/pgsql.log
8. 初始化資料庫目錄(在postgres用戶下執行命令)
cd /usr/local/pgsql/
./bin/initdb -E UTF-8 -D /usr/local/pgsql/data --locale=zh_CN.UTF-8
⑩ 源碼編譯安裝postgresql後怎麼卸載
建議你裝個騰訊電腦管家。
管家的管理功能挺完善的。而且各項管理能力也都比較出眾。
如需卸載,可通過管家軟體管理平台完成相關管理:
打開騰訊電腦管家~~~~工具箱~~~~軟體卸載~~~~強力刪除
同時,垃圾清理還可以清除卸載殘留文件及注冊表信息:
打開騰訊電腦管家~~~~工具箱~~~~清理垃圾/注冊表垃圾