2015-01-05 2 views
1

Я использовал Netbeans и GeoTools для программирования графического интерфейса для отображения нескольких шейп-файлов в одном JmapFrame. Я использовал следующий код, но я не знаю, когда он выполняется, он отображает только один файл shapefile.Svp, кто-то может мне помочь, я жду ваших ответов.JMapframe отображает только один файл формы

import com.vividsolutions.jts.geom.Coordinate; 
 
import com.vividsolutions.jts.geom.Geometry; 
 
import java.io.File; 
 
import org.geotools.data.FeatureSource; 
 
import org.geotools.data.FileDataStore; 
 
import org.geotools.data.FileDataStoreFinder; 
 
import org.geotools.data.simple.SimpleFeatureCollection; 
 
import org.geotools.data.simple.SimpleFeatureIterator; 
 
import org.geotools.map.DefaultMapContext; 
 
import org.geotools.map.MapContext; 
 
import org.geotools.swing.JMapFrame; 
 
import org.geotools.swing.data.JFileDataStoreChooser; 
 
import org.opengis.feature.simple.SimpleFeature; 
 

 
/** 
 
* 
 
* @author Brahim 
 
*/ 
 
class ImportVecteur2 
 
{ 
 
private JMapFrame fenMap; 
 
private MapContext mapContext; 
 
ImportVecteur2(JMapFrame fenMap) 
 
{ 
 
//this.mapContext = mapContext; 
 
this.fenMap = fenMap; 
 
} 
 

 
    @SuppressWarnings("static-access") 
 
public void chercheAfficheVecteur() //throws Exception 
 
{ 
 
try 
 
{ 
 
File file = JFileDataStoreChooser.showOpenFile("shp", null); 
 
if (file == null) 
 
{ 
 
return; 
 
} 
 

 
FileDataStore store = FileDataStoreFinder.getDataStore(file); 
 
FeatureSource featureSource = store.getFeatureSource(); 
 
//get vertices of file 
 

 
      
 
    
 
    
 
// Create a map context and add our shapefile to it 
 
mapContext = new DefaultMapContext(); 
 

 
     
 
mapContext.addLayer(featureSource, null); 
 
// Now display the map 
 
fenMap.enableLayerTable(true); 
 
fenMap.setMapContext(mapContext); 
 
fenMap.setVisible(true); 
 
    }

ответ

0

Каждый раз, когда вы звоните chercheAfficheVecteur вы создаете новый MapContext так что предыдущий один выбрасывается и вместе с ним ваш предыдущий шейпфайл. Если изменить способ быть

public void chercheAfficheVecteur() { 
    try { 
     File file = JFileDataStoreChooser.showOpenFile("shp", null); 
     if (file == null) { 
     return; 
     } 

    FileDataStore store = FileDataStoreFinder.getDataStore(file); 
    FeatureSource featureSource = store.getFeatureSource(); 
    //get vertices of file 
    // Create a map context and add our shapefile to it 
    if(mapContext == null){ 
     mapContext = new DefaultMapContext(); 
     fenMap.setMapContext(mapContext); 
    } 
     //make it look prettier 
    Style style = SLD.createSimpleStyle(featureSource.getSchema());  
    mapContext.addLayer(featureSource, style); 

} 

и

ImportVecteur2(JMapFrame fenMap) 
{ 
//this.mapContext = mapContext; 
    this.fenMap = fenMap; 
    fenMap.enableLayerTable(true); 
    fenMap.setVisible(true); 
} 

Он должен работать лучше.

После дополнительных испытаний (то есть я действительно скомпилировал некоторый код) - MapContext устарел (и был на некоторое время), пожалуйста, используйте MapContent.

package org.geotools.tutorial.quickstart; 

import java.awt.Color; 
import java.awt.Dimension; 
import java.io.File; 
import java.io.IOException; 

import org.geotools.data.FeatureSource; 
import org.geotools.data.FileDataStore; 
import org.geotools.data.FileDataStoreFinder; 
import org.geotools.map.FeatureLayer; 
import org.geotools.map.Layer; 
import org.geotools.map.MapContent; 
import org.geotools.styling.SLD; 
import org.geotools.styling.Style; 
import org.geotools.swing.JMapFrame; 
import org.geotools.swing.data.JFileDataStoreChooser; 

public class Test { 
    private static final Color[] color = { Color.red, Color.blue, Color.green, 
      Color.MAGENTA }; 
    private static MapContent mapContext; 
    private static JMapFrame fenMap; 

    public static void main(String args[]) throws IOException { 
     Test me = new Test(); 
     me.run(); 
    } 

    public void run() throws IOException { 
     fenMap = new JMapFrame(); 
     mapContext = new MapContent(); 
     fenMap.setMapContent(mapContext); 
     fenMap.enableToolBar(true); 
     fenMap.setMinimumSize(new Dimension(300, 300)); 
     fenMap.setVisible(true); 
     int i = 0; 
     while (chercheAfficheVecteur(i)) { 
      i++; 
      i = i % color.length; 
     } 
    } 

    public boolean chercheAfficheVecteur(int next) throws IOException { 

     File file = JFileDataStoreChooser.showOpenFile("shp", null); 
     if (file == null) { 
      return false; 
     } 

     FileDataStore store = FileDataStoreFinder.getDataStore(file); 
     FeatureSource featureSource = store.getFeatureSource(); 
     // get vertices of file 
     // Create a map context and add our shapefile to it 
     if (mapContext == null) { 

     } 
     // make it look prettier 
     Style style = SLD.createSimpleStyle(featureSource.getSchema(), color[next]); 

     Layer layer = new FeatureLayer(featureSource, style); 
     mapContext.addLayer(layer); 
     return true; 
    } 
} 
+0

Благодарим за ответ, я хочу наложить шейп-файл в тот же Jframe, но каждый раз, когда я добавляю следующий шейп-файл, первый шейп-файл исчезает. – LB82

+0

большое спасибо мой друг. Теперь я хочу манипулировать слоями и их функциями (каждого шайф-файла). Пожалуйста, я жду вашего ответа. – LB82

+0

Если это решит вашу проблему, пожалуйста, поддержите и примите ответ. Тогда вам нужно задать новый вопрос. –

Смежные вопросы