0

GDAL/OGR を使用して、.mif/.tab ファイルからデータベースにデータを書き込むプロジェクトを作成しようとしています。そうです:

SimpleFeatureBuilder featureBuilder = new SimpleFeatureBuilder(dbFeatureType);
SimpleFeatureCollection collection = FeatureCollections.newCollection();
while (mifReader.hasNext()){      
  in = (SimpleFeatureImpl) mifReader.next();
  SimpleFeature dbFeature = featureBuilder.buildFeature(null);
  for(AttributeDescriptor ad : adList){
    String name = ad.getLocalName();
    Object attrValue;
    attrValue = in.getAttribute(name);
    if(attrValue instanceof String){
      String string3 = new String((attrValue.toString()).getBytes("ISO-8859-1"), "cp1251");
      if(name.trim().equalsIgnoreCase(kadname.trim())){
        dbFeature.setAttribute("kadnum", string3);
      }
    }
    if (attrValue instanceof Geometry){
        idn++;
        com.vividsolutions.jts.geom.Geometry geom = (Geometry) in.getAttribute(name);
        dbFeature.setAttribute("id", idn);
        System.out.println("after insrt="+idn);
        dbFeature.setAttribute("deleted", deleted);
        dbFeature.setAttribute("the_geom", geom);
        dbFeature.setAttribute("status_id", status_id);

    }
    collection.add(dbFeature);
    }
}

.mid ファイルからの単純なデータ:

__id_|___kadnum_____

  3,"66:2:00:88 951"
  4,"66:2:00:88 952"
  5,"66:2:00:88 954"

そして、dbで私はこれを取得します:

ここに画像の説明を入力

私のデータは2〜4行です。インクリメント変数idnを取得し、それを属性に入れていることがわかりますidkadnumfrom .mid を取得し、それを attribute に入れますkadnum
その問題はありませんが、bd では行が間違った順序で取得されます。つまり、属性を持つ要素kadnum=66:2:00:88 951は db の 2 行目にありますが、4 行目にあります。
コレクション内のアイテムの順序を逆に変更するということです。その正しい解決策は?そして、これを行う方法は?または、GDALは自分でそれを行うことができますか?

アップデート

私は持っている:

 SimplePropertyImpl in =(SimpleFeatureImpl) mifReader.next();

私は試します:

in.getProperty("id").getName() ;

そして、PropertyName を取得しません。文字列を取得します。私は何を間違っていますか?

4

1 に答える 1

1

に従ってデータベースの行を並べ替えますidか?

select * from <yourtable> order by id asc;

FeatureCollectionコード内で並べ替えたい場合は、 SimpleFeatureCollection.sortSortByを調べてください。私は次のようなものを期待します

collection.sort( new SortBy() 
                 { 
                     @Override PropertyName getPropertyName() { return YourPropertyNameImpl( "id" ); } 
                     @Override SortOrder getSortOrder() { return SortOrder.ASCENDING; }
                 }

あなたを正しい方向へと導きます。

乾杯、

于 2012-10-24T07:02:00.490 に答える