2012-05-04 2 views
-4

특정 도로를 강조하는 방법을 알고 싶습니다. 예를 들어, id = 1 인 노란색 도로를 색칠하고 싶습니다. Java를 사용하여지도를 표시하고 있습니다.방갈로의 도로지도를 표시하는 데 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