2012-05-04 3 views
-4

特定の道路を強調する方法を知りたいと思います。たとえば、id = 1の道路の黄色に色付けしたいとします。私はマップを表示するためにJavaを使用しています。私はBangaloreのロードマップを表示するためにGeotoolsを使用しています

+4

あなたの努力は? –

+1

あなたはコードを掲載していないので、あなたはどの程度進んでいるのか分かりません。私は「14行目、このステートメントを挿入してください:」のような答えを提供したいと思いますが、それは起こっていません。 – f1sh

+0

私はGeoToolsを初めて使用しています。私は形状ファイルを読み込んで画面にマップを表示するプログラムを持っています – sandeep

答えて

2

ID = 1の道路をハイライトする方法を見つけました。私が従った手順は次のとおりです。

//create a filter object 
Filter filter; 

//create a datastore object from .shp file 

FileDataStore store= FileDataStoreFinder.getDataStore(file); 
SimpleFeatureSource featureSource=store.getFeatureSource(); 

//I am using CQL query to select the road that is ID=1 
filter=CQL.toFilter("ID=1"); 

//create a SimpleFeatureCollection object for the filtered features 
SimpleFeatureCollection fc=featureSource.getFeatures(filter); 


//create a feature iterator to traverse through the selected features 
SimpleFeatureIterator iter=fc.features(); 

//create a Set object to store the featureIdentifiers. 
Set<FeatureId> IDs=new HashSet<FeatureId>(); 

//add the selected features to IDs 
try{ 

    while(iter.hasNext()){ 

     SimpleFeature f=iter.next(); 

     IDs.add(f.getIdentifier()); 

     System.out.println(" "+f.getIdentifier()); 

    } 
} 
finally{ 

    iter.close(); 

} 


//create style object to store style of selected features 
Style style=createSelectedStyle(IDs); 

MapContext map=new DefaultMapContext(); 

//show the map 
map.addLayer(featureSource,style); 
JMapFrame.showMap(map); 


//defining the createSelectedStyle method 

private Style createSelectedStyle(Set<FeatureId> IDs) { 
    Rule selectedRule = createRule(SELECTED_COLOUR, SELECTED_COLOUR); 
    selectedRule.setFilter(ff.id(IDs)); 

    Rule otherRule = createRule(LINE_COLOUR, FILL_COLOUR); 
    otherRule.setElseFilter(true); 

    FeatureTypeStyle fts = sf.createFeatureTypeStyle(); 
    fts.rules().add(selectedRule); 
    fts.rules().add(otherRule); 

    Style style2 = sf.createStyle(); 
    style2.featureTypeStyles().add(fts); 

    return style2; 
} 

//defining the createRule method 

private Rule createRule(Color outlineColor, Color fillColor) { 
    Symbolizer symbolizer = null; 
    Fill fill = null;//not required if working with line 
    Stroke stroke = sf.createStroke(ff.literal(outlineColor), ff.literal(LINE_WIDTH)); 

    symbolizer = sf.createLineSymbolizer(stroke, "the_geom"); 

    Rule rule = sf.createRule(); 
    rule.symbolizers().add(symbolizer); 
    return rule; 
} 
+0

ここでは定数SELECTED_COLOR、LINE_COLOUR、FILL_COLOURはjava.awtパッケージのColorタイプです – sandeep

関連する問題