TIGER/Line リーダー

TIGER® は Topologically Integrated Geographic Encoding and Referencing の頭字語で、10 年ごとの国勢調査およびその他の米国統計局プロジェクトの地図作成要件をサポートするために米国統計局が開発したシステムおよびデジタル・データベースの名前です。
TIGER/Line ファイルは、米国全体を範囲とする、道路、鉄道、河川、湖沼、法的境界線、国勢調査境界など地理的特徴のデジタル・データベースです。このデータベースには、これらの機能、経度および緯度で表すロケーション、地勢の名前、地勢の種類、ほとんどの街路に対応する住所範囲、他の地勢に対する地理的関係、およびその他関連情報に関する情報が含まれています。TIGER/Line® ファイルは、統計局の TIGER データベースから作成された公共製品です。
このセクションで説明されているコードをすべて含む マップ・ビルダー のデモ用ソース・コードについては、 <installdir> /jviews-maps89/samples/mapbuilder/index.html をご覧ください。

IlvTigerDataSource クラス

IlvTigerDataSource クラスは、TIGER/Line ファイルを読む込むデータ・ソースです。このデータ・ソースは、ファイルから選択された特徴のみを読み込み、他は無視するようにフィルターがかけられています。これらの機能は、ストリングの配列としてコードに供給するか、または TigerFeaturesEN.txt ファイルで設定された IlvFeatureSelectorPanel から取得することができます。このファイルは、Census Feature Class Codes (CFCC) の一覧および該当する機能の説明を含んでいます。以下の行を使用してコードに CFCC を供給します。
try {
  IlvTigerDataSource source = new IlvTigerDataSource(filename);
  source.setManager(manager);
  source.setCFCCCodeList(new String[]{"A41"});
  source.start();
} catch (Exception e) {
  e.printStackTrace();
}
IlvFeatureSelectiorPanel から CFCC コードを取得するために、選択した機能で Tiger/Line データ・ソースを作成、インスタンス化、および開始する以下のコードを使用することができます。
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
final IlvFeatureSelectorPanel spanel = new IlvFeatureSelectorPanel(manager, "TigerFeaturesEN.txt");
JButton button = new JButton("OK");
button.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
  Vector src = new Vector();
  IlvFeatureSelectorPanel.Feature[] features = spanel.getSelectedFeatures();
  ArrayList cfccCodes = new ArrayList();
  if (features != null) {
    for (int j = 0; j < features.length; j++) {
      IlvFeatureSelectorPanel.Feature currentFeature = features[j];
     IlvFeatureSelectorPanel.Feature currentChild;
     int nChildren = currentFeature.getChildCount();
     if (nChildren != 0) {// major
        for (int i = 0; i < currentFeature.getChildCount(); i++) {
        currentChild = (IlvFeatureSelectorPanel.Feature) currentFeature.getChildAt(i);
        cfccCodes.add(currentChild.getMajorCode() + currentChild.getMinorCode());
       }
      } else {
       cfccCodes.add(currentFeature.getMajorCode() + currentFeature.getMinorCode());
       }
      }
     }
     String[] s = (String[])cfccCodes.toArray(new String[0]);
     try {
       source = new IlvTigerDataSource(filename);
       source.setManager(manager);
       source.setCFCCCodeList(s);
       source.start();        
     } catch (Exception e1) {
        e1.printStackTrace();     }
}});
panel.add(button, BorderLayout.SOUTH);
JScrollPane pane = new JScrollPane(spanel);
panel.add(pane, BorderLayout.CENTER);
JFrame f = new JFrame();
f.getContentPane().add(panel);
f.pack();
f.setVisible(true);

IlvTigerReader クラス

IlvTigerReader クラスは、TIGER/Line ファイルを読み取ります。独立して使用することができますが、通常は IlvTigerDataSource を使用して作成されます。メソッド recordMatches は、読み込む機能を選択するためにオーバーライドするか、または TIGER/Line リーダーで破棄することができます。
File file = new File(filename);
IlvTigerReader reader = 
  new IlvTigerReader(file.toURL().toExternalForm()) {
    public boolean recordMatches(IlvFeatureAttributeProperty properties) {
     if(properties == null)
       return false;
       return properties.getAttribute("CFCC").toString().equals("A41") ;
    }
  };
IlvMapFeature f = null;
IlvCoordinateSystem source = IlvGeographicCoordinateSystem.WGS84;
IlvCoordinateSystem dst = IlvGeographicCoordinateSystem.WGS84;
IlvCoordinateTransformation tr = IlvCoordinateTransformation.CreateTransformation(source, dst);
while ((f = reader.getNextFeature()) != null) {
  IlvGraphic g = reader.getDefaultFeatureRenderer().makeGraphic(f, tr);
  manager.addObject(g, false);
}    

CFCC コードの一覧

http://www.census.gov/geo/www/tiger を参照してください。