IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SIG : Système d'information Géographique Discussion :

[GEOTOOLS] Problème d'afiichage des points


Sujet :

SIG : Système d'information Géographique

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut [GEOTOOLS] Problème d'afiichage des points
    Bonjour ! je travail sur un projet de géolocalisation sur les données et la carte de mon pays, mais je rencontre quelques pb avec l'affichage des points. En fait j'ai pu récupérer sur le site de CARPE une carte (shp) des routes et un fichier texte des coordonnées (longitude, latitude) de certaines villes; j'ai suivi quelsques tuto de la doc officielle de Geotools (j'utilise la version 2.6-M1 et les codes des docs sont pour la version 2.5, mais je me débrouille) pour créer un shapefile à partir de ces coordonnées (issus d'un fichier texte ou csv). Lorsque j'affiche les routes et les la carte quej'ai crée dans QGIS, les deux couches se supperposent normalement comme il se doit; mais lorsque je le fait dans mon code, les points représentant les villes s'affiche carrément hors de la carte des routes. Je me demande si le problème peut être lié au "System Coordinate" utilisé par chacun des shapefiles?
    Voici le code que j'utilise pour créer le shape file:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    public static void main(String[] args) throws Exception {
    	File file = getCSVFile(args);
    	final SimpleFeatureType TYPE = DataUtilities.createType("Location", "location:Point,name:String"); // see createFeatureType();
    
    	FeatureCollection<SimpleFeatureType, SimpleFeature> collection = FeatureCollections.newCollection();
    	BufferedReader reader = new BufferedReader( new FileReader( file ));
    	try {
    		String line = reader.readLine();
    		System.out.println( "Header: "+ line );
    		GeometryFactory factory = JTSFactoryFinder.getGeometryFactory(null);
    		
    		for( line = reader.readLine(); line != null; line = reader.readLine()){
    			String split[] = line.split("\\,");
    			double longitude = Double.parseDouble( split[1] );
    			double latitude = Double.parseDouble( split[0] );
    			String name = split[2];
    			name = name.replace("é", "é");
    			Point point = factory.createPoint( new Coordinate(longitude,latitude));
                SimpleFeature feature = SimpleFeatureBuilder.build( TYPE, new Object[]{point, name}, null );
    
    			collection.add( feature );
    		}
    	}
    	finally {
    		reader.close();
    	}
    	File newFile = getNewShapeFile( file );
    	
    	DataStoreFactorySpi factory = new ShapefileDataStoreFactory();
    
    	Map<String,Serializable> create = new HashMap<String,Serializable>();
    	create.put("url", newFile.toURI().toURL() );
    	create.put("create spatial index",Boolean.TRUE);
    	
    	ShapefileDataStore newDataStore = (ShapefileDataStore) factory.createNewDataStore( create );
    	newDataStore.createSchema( TYPE );
    	newDataStore.forceSchemaCRS( DefaultGeographicCRS.WGS84 );
    	
    	Transaction transaction = new DefaultTransaction("create");
    	
    	String typeName = newDataStore.getTypeNames()[0];
    	FeatureStore<SimpleFeatureType, SimpleFeature> featureStore;
        featureStore = (FeatureStore<SimpleFeatureType, SimpleFeature>)
                    newDataStore.getFeatureSource( typeName );
        
    	featureStore.setTransaction(transaction);
    	try {			
    		featureStore.addFeatures(collection);
    		transaction.commit();
    	}
    	catch (Exception problem){
    		problem.printStackTrace();
    		transaction.rollback();
    	}
    	finally {
    		transaction.close();
    	}
        System.exit(0); // we are actually exiting because we will use a Swing JFileChooser
    }
    
    ...
    
    static SimpleFeatureType createFeatureType(){
        
        SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
        builder.setName( "Location" );
        builder.setCRS( DefaultGeographicCRS.WGS84 );
        
        //add attributes in order
        builder.add( "Location", Point.class );
        builder.length(15).add( "Name", String.class );
        
        //build the type
        final SimpleFeatureType LOCATION = builder.buildFeatureType();
        return LOCATION;
    }
    Et ic le code utilisé pour afficher les points sur le MapPane:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
        public void addLayer(){
            
            try{
                File file = promptShapeFile(new String[0]);
                if(file == null)
                    return;
                System.out.println("File loaded: "+file.getName()+" at location: "+file.getAbsolutePath());
                System.out.println("Building the new layer...");
                infoLabel.setText("Buildig the new layer...");
                shapeURL = file.toURI().toURL();
                store = new ShapefileDataStore(shapeURL);
                String name = store.getTypeNames()[0];
                source = store.getFeatureSource(name);
                System.out.println("System coordinates :"+
                        source.getSchema().getCoordinateReferenceSystem());
                StyleBuilder sb = new StyleBuilder();
    
                LineSymbolizer ls2 = sb.createLineSymbolizer(Color.ORANGE, 2);
                Style newStyle = sb.createStyle();
                newStyle.addFeatureTypeStyle(sb.createFeatureTypeStyle(ls2));
    
                /** Pour représenter mes points j'utilise plutot le style suivant:
                *
                *StyleBuilder sb = new StyleBuilder();
                *Style newStyle = sb.createStyle();          
                *System.out.println("System coordinates :"+
                *       collection.getSchema().getCoordinateReferenceSystem());
                *Mark circle = sb.createMark(StyleBuilder.MARK_CIRCLE, Color.BLUE);
                *Graphic graph2 = sb.createGraphic(null, circle, null, 1, 4, 0);
                *PointSymbolizer pointSymbolizer = sb.createPointSymbolizer(graph2);
                *newStyle.addFeatureTypeStyle(sb.createFeatureTypeStyle(pointSymbolizer));
                * 
                */
                MapLayer maplayer = new DefaultMapLayer(collection, newStyle);
    
                MapLayer maplayer = new DefaultMapLayer(source, newStyle);
                maplayer.setTitle(file.getName());
                maplayer.setVisible(true);
                maplayer.setQuery(Query.ALL);
                mapcontext.addLayer(maplayer);
                getLayersVector().addElement(maplayer);
                showedLayers = null;
                DefaultListModel model  = (DefaultListModel) layersDetails.getLayersList().getModel();
                model.addElement(new MyMapLayer(maplayer, true, mapcontext.getLayerCount()-1));
                // Refreshing the map viewer
                System.out.println("Refreshing the map viewer...");
                infoLabel.setText("Refreshing the map viewer...");
                StreamingRenderer render = new StreamingRenderer();
    
                mappane.setRenderer(render);
                mappane.setMapArea(mapcontext.getLayerBounds());
    
            }catch(Exception e){
                System.out.println("Cannot add the new layer to the map!");
                infoLabel.setText("Cannot add the new layer to the map!");
                e.printStackTrace();            
            }
            finally{
                infoLabel.setText("...");
            }
    
        }
    P.S: Je n'ai pas préférer me lancer dans GeoToolKit faute de docs; dc s'il ya une piste ce serait vraiment gentil de la rendre disponible.

    Merci d'avance!

  2. #2
    Membre confirmé
    Profil pro
    Etudiant
    Inscrit en
    Avril 2008
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Avril 2008
    Messages : 62
    Par défaut
    Personne ne semble avoir de réponse pour moi mais bon, j'abandonne. en fait je me suis débrouillé à bâtir mes cartes dans MapInfo et de les convertir en shp à l'aide du convertisseur universel. Mais maintenant j'ai un autre problème : j'aimerais pouvoir représenté les points sur ma carte avec une image ou une icone personnalisé (png,jpeg,giff,etc...), est-il possible de le faire en utilisant un objet Mark comme ici (pour représenter u point en étoile):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Mark mark = sb.createMark(StyleBuilder.MARK_STAR, Color.YELLOW,Color.WHITE,1);
    graph2 = sb.createGraphic(null, mark, null, 1, 20, 0);
    ou alors n'importe quel autre objet.
    Merci d'avance de votre aide!

Discussions similaires

  1. problème d'affichage d'une liste des points 3D
    Par highlight dans le forum OpenGL
    Réponses: 11
    Dernier message: 10/11/2011, 14h17
  2. Réponses: 2
    Dernier message: 18/07/2010, 19h09
  3. Réponses: 2
    Dernier message: 19/04/2010, 17h04
  4. Problème d'ordre des points dans un Tchart
    Par pasqual dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/06/2007, 12h04
  5. Problème de compréhension des ensembles
    Par Cornell dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2003, 22h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo