1. 程式人生 > >終於搞定GeoTools對PostGis的操作

終於搞定GeoTools對PostGis的操作

      唉,這幾天撒事情都沒有做,就搞定了GeoTools的一些bug的刪除。2.3版本問題比較多,上次在GT上和Richard聊天,他也對GeoTools目前的狀況表示很是不滿,但是為了PostGis的推廣更順利(畢竟,大多數使用Postgis的兄臺還是在geotools平臺上),很多時候很多事情都不是我們能決定的。。。所以只能自己動手去將GeoTools在文件中沒有說清楚的,或者無法編譯的程式根據新的API從新做一次。
     這幾天搞定了GeoTools的PostgisDataStore操作。包含連線、讀取、新建、插入等等。其實很多功能比如新建和插入都可以用SQL語句去完成,不過這樣做對postgis即將推出的空間索引還是有很大影響的。所以我們沒有使用SQL去完成這些工作。
    /**//*
* POSTGEO
*/

package com.geotools.test;

/** *//**
*
* CopyRight (C) All rights reserved.
* <p>
*
* WuHan Inpoint Information Technology Development,Inc.
* <p>
*
* Author sinoly
* <p>
* Project Name: PostGeo
*
*
@version 1.0 2006-11-13
*
* <p>
* Base on : JDK1.5
* <p>
*
*/

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.NoSuchElementException;

import org.apache.log4j.Logger;
import org.geotools.data.FeatureReader;
import org.geotools.data.FeatureResults;
import org.geotools.data.FeatureSource;
import org.geotools.data.FeatureStore;
import org.geotools.data.FeatureWriter;
import org.geotools.data.postgis.PostgisDataStore;
import org.geotools.data.postgis.PostgisDataStoreFactory;
import org.geotools.factory.FactoryRegistryException;
import org.geotools.feature.AttributeType;
import org.geotools.feature.AttributeTypeFactory;
import org.geotools.feature.Feature;
import org.geotools.feature.FeatureType;
import org.geotools.feature.FeatureTypeFactory;
import org.geotools.feature.IllegalAttributeException;
import org.geotools.feature.SchemaException;
import org.geotools.geometry.Geometry;

import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;

publicclass GetPostgisData {
   
private staticfinal Logger LOGGER = Logger.getLogger("org.geotools.postgis");

   
static PostgisDataStore pgDatastore;
   
static PostgisDataStoreFactory factory=new PostgisDataStoreFactory();
   
static FeatureSource fsBC;
    @SuppressWarnings(
"unchecked")
   
private staticvoid ConnPostGis(String dbtype,String URL,int port,String database,
        String user,String password)
{
        Map params
=new HashMap();
        params.put(
"dbtype", "postgis");
        params.put(
"host", URL);
        params.put(
"port", new Integer(port));
        params.put(
"database", database);
        params.put(
"user", user);
        params.put(
"passwd", password);       
       
try{
            pgDatastore
=(PostgisDataStore) factory.createDataStore( params );
           
if(pgDatastore!=null){
                System.out.println(
"系統連線到位於:"+URL+"的空間資料庫"+database+"成功!");
            }
else{
                System.out.println(
"系統連線到位於:"+URL+"的空間資料庫"+database+"失敗!請檢查相關引數");
            }

        }
catch (IOException e) {
            e.printStackTrace();
            System.out.println(
"系統連線到位於:"+URL+"的空間資料庫"+database+"失敗!請檢查相關引數");
        }

    }


   
//讀取指定型別名的地理特徵
public staticvoid getFeatureSource(String sourceName){
       
try{
            fsBC
= pgDatastore.getFeatureSource(sourceName);
           
//System.out.println(fsBC.getFeatures().size());
        }
catch (IOException e) {
            e.printStackTrace();
        }
       
    }

   
//取得POSTGIS中所有的地理圖層
public staticvoid getAllLayers(){
       
try{
            String[] typeName
= pgDatastore.getTypeNames();
           
for(int i=0;i<typeName.length;i++){
                System.out.println(typeName[i]);
            }

        }
catch (IOException e) {
            e.printStackTrace();
        }

    }

   
//獲取圖層地理元素屬性(Feature Attribute)
public staticvoid getAttribute(){
        FeatureType ftBC
=fsBC.getSchema();
        System.out.println(ftBC.getAttributeCount());
       
for (int i =0; i < ftBC.getAttributeCount(); i++) {
            AttributeType at
= ftBC.getAttributeType( i );
           
//判斷屬性型別是否為可分配的幾何物件
if (!Geometry.class.isAssignableFrom(at.getType()))
                System.out.print(at.getType()
+"\t");
        }

        System.out.println();
       
for (int i =0; i < ftBC.getAttributeCount(); i++) {
            AttributeType at
= ftBC.getAttributeType( i );
           
if (!Geometry.class.isAssignableFrom(at.getType()))
                System.out.print(at.getName()
+"\t");
        }

    }

   
   
//從資料容器中讀取所有的特徵屬性
    @SuppressWarnings("deprecation")
   
public staticvoid PostGisReading(){
       
try{
            FeatureResults fsRU
= fsBC.getFeatures();
            FeatureReader reader
= fsRU.reader();
           
while (reader.hasNext()) {
                Feature feature;
               
try{
                    feature
= reader.next();
                    System.out.print(feature.getID()
+"\t");
                   
for (int i =0; i < feature.getNumberOfAttributes(); i++) {
                        Object attribute
= feature.getAttribute( i );
                       
if (!(attribute instanceof Geometry))
                            System.out.print(attribute
+"\t");
                    }

                    System.out.println();
                }
catch (NoSuchElementException e) {
                    e.printStackTrace();
                }
catch (IllegalAttributeException e) {
                    e.printStackTrace();
                }

            }

            reader.close();
        }
catch (IOException e1) {
            e1.printStackTrace();
        }

    }

   
   
//新增特徵值到新的特徵物件中。等同於新建一個postgis資料表並向其中插入資料
    @SuppressWarnings("deprecation")
   
public staticvoid createFeatures(){
       
try{
            AttributeType geom
= AttributeTypeFactory.newAttributeType("the_geom",LineString.class);
            AttributeType name
= AttributeTypeFactory.newAttributeType("name",String.class);
            FeatureType ftRoad
= FeatureTypeFactory.newFeatureType
                                (
new AttributeType[] {geom,name}, "tem_road");
            WKTReader wktReader
=new WKTReader();
           
try{
                LineString geometry
= (LineString) wktReader.read("LINESTRING (0 0, 10 10)");
                String roadName
="武絡路";
                pgDatastore.createSchema(ftRoad);
                FeatureWriter aWriter
= pgDatastore.getFeatureWriter("tem_road",
                        ((FeatureStore) pgDatastore.getFeatureSource(
"tem_road")).getTransaction());
               
/** *//**如有批量匯入資料要求,可使用 org.geotools.data.FeatureStore */
                Feature aNewFeature
= aWriter.next();
                aNewFeature.setAttribute(
"the_geom",geometry);
                aNewFeature.setAttribute(
"name", roadName);
                aWriter.write();
                aWriter.close();
            }
catch (ParseException e) {
                e.printStackTrace();
            }
catch (IllegalAttributeException e) {
                e.printStackTrace();

相關推薦

終於GeoToolsPostGis操作

      唉,這幾天撒事情都沒有做,就搞定了GeoTools的一些bug的刪除。2.3版本問題比較多,上次在GT上和Richard聊天,他也對GeoTools目前的狀況表示很是不滿,但是為了PostGis的推廣更順利(畢竟,大多數使用Postgis的兄臺還是在geotools平臺上),很多時候很多事情都不是

歷經萬難,終於Android下的使用FFMPEG成功H.264視訊流解碼

[email protected] 1 WINCE AD/PWM驅動 2 HID 多點觸控驅動 3 ANDROID SIP電話 4 ANDROID SPEEX語音編解碼、迴音消除 歡迎專案合作~

利用python+seleniumUI自動化登錄獲取cookie後再去測試接口,今天終於

zsh use avatar get 獲取 mod .text 獲取cookie mob #coding=utf-8from selenium import webdriverfrom selenium.common.exceptions import NoSuchElem

開源作品ThinkJDBC—一行代碼數據庫操作

和數 自增屬性 示例 blog title IE 賦值 執行 所有 1 簡介 ThinkJD,又名ThinkJDBC,一個簡潔而強大的開源JDBC操作庫。你可以使用Java像ThinkPHP框架的M方法一樣,一行代碼搞定數據庫操作。ThinkJD會自動管理數據庫連接,使用完

今天終於了Qt+gsoap2.8的編譯了.

相關文章 第一步,下載gsoap2.8                    地址:https://sourceforge.net/projects/gsoap2/files/                    學習資料:https://ww

終於Linux的NAT即時生效問題

                引:超長的前言Linux的NAT不能及時生效,因為它是基於ip_conntrack的,如果在NAT的iptables規則新增之前,此流的資料包已經綁定了一個ip_conntrack,那麼該NAT規則就不會生效,直到此ip_conntrack過期,如果一直有資料在魯莽地嘗試傳輸,

開發自己的IDE(十),我終於了智慧提示了哇哈哈

    今天我終於實現了偉大的智慧提示了,真是渾身上下都在發光啊。這次智慧提示的程式碼可以在Vczh Library+ 3.0的頁面上看到。我使用了上一篇文章所提到的技術,在使用者輸入文字的時候,通過迅速獲得“當前編輯語句”的語法樹,再加上舊的“當前編輯語句”的作用域物件,來判斷使用者究竟處於整份

在Word2016公式編輯器中一招等號齊問題

微軟OFFICE套裝中的公式編輯器歷來為人所詬病,但有時還不得不用它來編輯文件。 有時在Word中我們會遇到多行等式對不齊的情況,這讓人非常抓狂: 而我們希望是: ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪s0stbtct=x0=α(xt−ct−L)+(1−α)(st−1

usb wifi移植終於

1.選的wifi晶片是rtl8188cus 2.選的開發包是0001-RTL8188C_8192C_USB_linux_v4.0.2_9000.20130911.zip 3.編譯8192cu.ko 4.編譯iwconfig工具 5.編譯wpa工具 6.移植到板上 1>

終於了kali linux的網絡卡驅動問題

上一篇說我下了個1.0版本,結果放在VMware裡顯示grub無法安裝導致系統無法被引導,可能是因為低版本有專門為虛擬機器開發的VMware kali,而kali的官網上寫的是到kali2.0已結把虛擬機器版本結合到了

Linux下tomcat設定jsp連線mysql 的問題忙了幾天,終於

OS: Ubuntu6.06Tomcat: Tomcat 5.0.30Mysql: MySQL5.0.22mysql-connector: mysql-connector-java-3.1.14本來安裝完JDBC驅動mysql-connector-java後應該可以正常連線m

ubuntu字型終於

    終於可以擺脫難看的楷體,用simsun字型上88了。    方法如下:    從C://windows/FONTS/下把windows的字型拷貝到/usr/share/fonts/TTF/下    進入該目錄    執行    sudo mkfontdir    su

經過兩個多月的攻關,終於了live555多執行緒並穩定壓測通過

live555已經發展了十幾年了,不得不欽佩作者堅持不懈的奉獻和國外的開源生態環境,live555可以說是大部分的安防從業者的入門之選,尤其是在嵌入式或者Linux系統上,其應用還是蠻廣泛的,主要是其相容性和穩定性; 但是隨著live555十幾年的不斷迭代

終於了回家車票

port win64 false 示意圖 pro connect -c pen ext 快要春節了,老板發話:‘提前完成工作可以提前回家‘;於是老貓每天加班加點趕進度,估計提前1周回家;正當老貓沈浸在幸福之時,老板過來關心問我:‘老貓,車票買了嗎,買不到晚幾天走吧,那會好買

我的畢設終於了!題為:利用Python開發一款遊戲!

    現在來看一下實現的過程。 外形 俄羅斯方塊整個介面分為兩部分,一部分是左邊的遊戲區域,另一部分是右邊的顯示區域,顯示得分、速度、下一個方塊樣式等。這裡就不放截圖了,看上圖就可以。 遊戲區域跟貪吃蛇一樣,是由一個個小方格組成的,為了看得直觀,

用WM_CONCAT查詢資料的時候超過10條報不存在的lob值, 弄了一上午終於了!

我原先的sql:         SELECT ut.userid       AS USERID,                ut.operatorname AS USERNAME,                ut.operatorid   AS OPERATOR

輕鬆記憶體

記憶體對齊   一、概念         對齊跟資料在記憶體中的位置有關。如果一個變數的記憶體地址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設一個整型變數的地址為0x00000004,那它就是自然對齊的。       二、為什麼要位元組對齊  

終於無參“動態呼叫WebService方法”,其實很簡單,大家還是要有信心,還是要有琢磨的精神。

終於搞定“動態呼叫WebService方法”: 我在學習 動態呼叫WebService方法時看到很多網友在呼叫函式(其實往往是“無參”函式)時得到一個錯誤: 未將物件引用設定到物件的例項。 這個錯誤很常見,貌似不好處理,沒明白的人不知所云,所以這裡提醒我們自己:凡是

終於使用node.js +redis 作為服務端,提供圖片上傳儲存服務

系統不提供業務層面上的邏輯,只負責儲存和結構關係。業務相關的資料,全部通過引數化傳入。 upload.js 檔案程式碼: //自定義引數區 var basePath='e:/';//上傳的根路徑 var tempPath='c:/'; var redis_ip='127.0

終於Paypal了

PayPay API PayPal提供了多個API介面供開發者使用。在使用API之前,你必須先申請一個高階個人賬戶或者企業賬戶,同時你必須獲取API 憑證供每次呼叫API 時使用。一旦你獲取了API憑證,您就可以呼叫相關的API介面了。目前,我們提供兩種API介面方式,NVP和SOAP。一般來說我們推薦您使