<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    sinoly

       :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      29 隨筆 :: 76 文章 :: 189 評論 :: 0 Trackbacks
    ???? 困擾了好幾天,一直在嘗試各種方法解決Geotools讀取shp格式對中文編碼的問題。可是昨天一個無意的舉動居然讓我發覺自己做了太多的無用之功。仔細的看了JavaDoc以及shapefile源代碼之后,可以可以明顯的看到ShapefileDataStore的構造函數已經發生了很大的變化:
    ????
    public?static?final?Charset?DEFAULT_STRING_CHARSET?=?Charset.forName("ISO-8859-1");

    ??? 這個是ShapefileDataStore對象中定義的字符編碼。也正是由于其使用ISO-8859-1編碼作為默認編碼,所以一直以來,解決geotools抑或geoserver的中文問題總是連綿不絕。
    ?? 來看看我在2.4中看到的ShapefileDataStore的新的構造函數(當然,貝塔和我聊天說過好像2.3也是作出了同樣修改的,可惜我沒下2.3的源碼,呵呵,但是2.2以前的版本這一塊貌似是不同的。權當其是2.4中的“新增”之處吧)
    ?1????public?ShapefileDataStore(URL?url,?boolean?useMemoryMappedBuffer)
    ?2????????throws?MalformedURLException
    ?3????{
    ?4????????this(url,?useMemoryMappedBuffer,?DEFAULT_STRING_CHARSET);
    ?5????}
    ?6
    ?7????public?ShapefileDataStore(URL?url,?boolean?useMemoryMappedBuffer,?Charset?dbfCharset)
    ?8????????throws?MalformedURLException
    ?9????{
    10????????readWriteLock?=?new?Lock();
    11????????namespace?=?null;
    12????????this.useMemoryMappedBuffer?=?true;
    13????????String?filename?=?null;
    14????????shpURL?=?ShapefileDataStoreFactory.toShpURL(url);
    15????????dbfURL?=?ShapefileDataStoreFactory.toDbfURL(url);
    16????????shxURL?=?ShapefileDataStoreFactory.toShxURL(url);
    17????????prjURL?=?ShapefileDataStoreFactory.toPrjURL(url);
    18????????xmlURL?=?ShapefileDataStoreFactory.toXmlURL(url);
    19????????this.dbfCharset?=?dbfCharset;
    20????}
    ?????
    ???



    ???? 列下使用Geotools 2.4操作shp格式的代碼如下:
    ??? 代碼1:
    ?1public?class?ReadShape??{
    ?2????public?static?void?main(String[]?args)?
    ?3????????throws?FileNotFoundException,MalformedURLException,IOException{
    ?4????????
    ?5????????File?shpFile=new?File("shp/市區地物_point.dbf");
    ?6????????ShapefileDataStore?shpDataStore=new?ShapefileDataStore(shpFile.toURL());
    ?7????????shpDataStore.setStringCharset(Charset.forName("GBK"));
    ?8????????FeatureSource?fs=shpDataStore.getFeatureSource();
    ?9????????FeatureCollection?collection?=?fs.getFeatures();
    10????????FeatureIterator?iterator?=?collection.features();
    11????????int?numOfAttr=0;
    12????????try?{
    13???????????while(?iterator.hasNext()?){
    14????????????????Feature?feature?=?iterator.next();
    15????????????????numOfAttr?=?feature.getNumberOfAttributes();
    16????????????????for(int?i=0;i<numOfAttr;i++){
    17????????????????????String?temp=feature.getAttribute(i).toString();
    18????????????????????System.out.print(temp+"\t");
    19????????????????}
    20????????????????
    21????????????????System.out.println();
    22???????????}
    23????????}
    24????????finally?{
    25???????????iterator.close();
    26????????}
    27????}
    28}
    ??? 代碼2:
    ?1public?class?ReadSHP??{
    ?2????public?static?void?main(String[]?args)?
    ?3????????throws?FileNotFoundException,MalformedURLException,IOException{
    ?4
    ?5????????//初始化FileChannel對象
    ?6????????FileChannel?in?=?new?FileInputStream("shp/市區地物_point.dbf").getChannel();
    ?7????????DbaseFileReader?dr=new?DbaseFileReader(in,?true,Charset.forName("UTF-8"));
    ?8????????DbaseFileHeader?dh?=?dr.getHeader();
    ?9????????int?fields?=?dh.getNumFields();
    10????????for(int?i=0;i<fields;i++){
    11????????????System.out.print(dh.getFieldName(i)+"?");//打印當前屬性名
    12????????}
    13????????System.out.print("\n");
    14????????while(dr.hasNext()){
    15????????????DbaseFileReader.Row?row?=?dr.readRow();
    16????????????for?(int?i=0;i<fields;i++){
    17????????????????????Object?data?=?row.read(i);
    18????????????????????if(dh.getFieldName(i).equals("NAME")){
    19????????????????????????????System.out.print(data);
    20????????????????????}else{
    21????????????????????????????System.out.print(data);
    22????????????????????}
    23????????????????????System.out.print("\t");
    24????????????}
    25????????????System.out.println();
    26????????}
    27????????dr.close();
    28????}
    29}
    ????
    ????兩段代碼都可以直接運行。當然,從個人角度來看,代碼2是我比較推薦的。不管是效率還是安全性,FileChannel對象比File對象應該還是強一些。
    ??? 算是又解決了一個問題。
    ??? 十一期間準備自己寫一個shp2svg和shp2sql的小程序。第一呢,geoserver生成的svg樣式也好,標注名稱也好都好像不太好(也許是我自己對geoserver不熟悉的原因);第二呢,嚴重懷疑postgis自帶的shp2pgsql這個程序對編碼的支持度。除非我的數據庫編碼是EUN_CN,否則導入的數據是肯定有問題。

    ??? 不在考慮那些讓我煩心的事情,也不想做一個“人無遠慮,必有近憂”的思想者。一心一意專注于自己的愛好。其他時間也許“身不由己”,但是十一長假還是可以做到的。準備回鄉下,到我的那間田間小屋去,斷網6天!
    ??

    posted on 2007-09-30 10:13 sinoly 閱讀(5893) 評論(8)  編輯  收藏 所屬分類: GEOTOOLS

    評論

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2007-09-30 13:52 千里冰封
    呵呵  回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2007-09-30 14:00 sinoly
    @千里冰封
    沒有看懂。。。“呵呵”代表什么意思
    :)  回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2008-07-30 12:29 路過
    希望多發些類似的文章。
      回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持)[未登錄] 2008-10-11 14:32 wawa
    你這邊講的好像都是對屬性數據的一些讀取操作,那對于圖形操作呢,能否講一講啊?  回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2010-06-18 00:42 回收軸承
    回復:《小心別被這般禮物雷到》



    回收軸承http://www.shouzhoucheng.com" target="_new" rel="nofollow">http://www.shouzhouchengcom,收購軸承http://www.shouzhoucheng.com,回收庫存積壓軸承http://www.shouzhoucheng.com,回收進口軸承http://www.shouzhoucheng.com,回收微型軸承http://www.shouzhoucheng.com,回收SKF軸承。聯系人:朱先生,手機:13406342244 ,期待與您的合作!  回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2010-06-21 00:10 回收軸承
    恢復一大隊薩達盛大大聲打打雙打啊上大大大大
    http:// oldbearing.blog.hexun.com/52094701_d.html

    http://zhuyuelei.blog.163.com/blog/static/28566049201052010281697/
    http://blog.sohu.com/people/f21926611!f/154918468.html
    http://blog.eastmoney.com/zhuyuelei/blog_180252633.html
      回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2010-06-21 23:58 回收軸承
    http://www.shouzhoucheng.com
    http://www.bearingbid.com/O/oview.asp?id=76f65cd23e06131860522a428e523dc2
    http://bbs.xabbs.com/viewthread.php?tid=319579&extra=
    http://www.chinawj.com.cn/member/tradeinfo/show.shtml?id=2914572
    http://braring.bokee.net/company/weblog_viewEntry/5360680.html
      回復  更多評論
      

    # re: 原來可以如此這般(GEOTOOLS 2.4對中文編碼的支持) 2012-10-10 17:22 pollux
    修改后有的是中文,有的是亂碼
    區縣名稱=嚀ㄏ?
    FEATID=2
    COUNT=0.0
    NAME=嚀ㄏ?
    區縣名稱=僭笙?
    FEATID=3
    COUNT=0.0
    NAME=僭笙?
    區縣名稱=嗄舷孛骰ㄇ?
    FEATID=4
    COUNT=0.0
    NAME=嗄舷孛骰ㄇ?
    區縣名稱=嗄舷鼗食喬?
    FEATID=5
    COUNT=0.0
    NAME=嗄舷鼗食喬?
    區縣名稱=嗄舷卮筧?
    FEATID=6
    COUNT=0.0
    NAME=嗄舷卮筧?
    區縣名稱=嗄舷?
    FEATID=7
    COUNT=0.0
    NAME=嗄舷?
    區縣名稱=窶窒?
    FEATID=8
    COUNT=0.0
    NAME=窶窒?
    區縣名稱=降は?
    FEATID=9
    COUNT=0.0
    NAME=降は?  回復  更多評論
      

    主站蜘蛛池模板: 国产亚洲精品第一综合| 亚洲av乱码中文一区二区三区 | 妞干网免费视频在线观看| 日产乱码一卡二卡三免费| 亚洲AV无码专区日韩| 久久国产亚洲精品麻豆| 亚洲欧洲精品视频在线观看| 亚洲一区二区观看播放| 免费视频成人国产精品网站| 一级有奶水毛片免费看| 久久WWW免费人成一看片| 国产美女a做受大片免费| 亚洲精品无码永久中文字幕| 亚洲国产高清美女在线观看| 朝桐光亚洲专区在线中文字幕| 男女一进一出抽搐免费视频 | 免费污视频在线观看| 国产成人A在线观看视频免费| 亚洲人成色777777老人头| 亚洲精品乱码久久久久久蜜桃图片| 黄色免费网址在线观看| 久久国产精品一区免费下载| 成年女人18级毛片毛片免费观看| 久久久久亚洲AV综合波多野结衣 | 亚洲女初尝黑人巨高清| 亚洲午夜电影在线观看| 无码精品人妻一区二区三区免费| 久久久久久国产精品免费无码| 国产精品无码素人福利免费| 国产亚洲av片在线观看16女人| 99久久国产亚洲综合精品| 中文字幕视频在线免费观看| 久久久久国色AV免费看图片| 亚洲午夜无码久久久久| 亚洲色欲啪啪久久WWW综合网| 国产一级一毛免费黄片| 岛国大片免费在线观看| 亚洲狠狠综合久久| 特级毛片免费观看视频| 国产免费AV片在线播放唯爱网| 国产成人亚洲精品狼色在线|