2012-05-04 28 views
-4

我想知道如何突出顯示任何特定的道路。例如,我想爲id = 1的道路黃色着色。我正在使用Java來顯示地圖。我正在使用地理工具來顯示班加羅爾的路線圖

+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是類型爲Color的java.awt包 – sandeep

相關問題