2015-10-26 2 views
1

J'ai une application qui exporte un point de carte ArcGIS. Points de réception dans un contrôleur Spring MVC.Multiple SimpleFeatureType dans ShapefileDataStore ou Type de liste dans les attributs

Mon pointeur a une liste d'attributs qui peuvent être variables. Les attributs sont une liste de chaînes avec deux valeurs, nom et valeur. Code:

public class PointDTO { 
    private String type; 
    private Double x; 
    private Double y; 
    private Integer wkid; 
    private List<String[]> atributtes = new ArrayList<String[]>(); 
    //Getters & Setters 
} 

Il voulait savoir si vous pouvez utiliser un type de liste ou quelque chose de semblable à cela dans le SimpleFeatureType: En ce moment, ce que je fais

SimpleFeatureType type = DataUtilities.createType ("Location", "the_geom: Point: srid = 25829" 
                 + "Type: String" 
                 + "X: double," + "And: double," 
                 + "Atributes: List"); 

est d'avoir un type de chaîne « Attribut » . Et je concatène tous les attributs mais a une longueur maximale de 250 caractères.

Une autre solution serait de déclarer plusieurs SimpleFeatureType mais je pense que vous ne pouvez pas utiliser le même ShapefileDataStore.

J'ai aussi des problèmes pour importer des mots avec des accents dans ArcgisExporer en ligne.

Répondre

1

Vous devriez pouvoir utiliser quelque chose comme ce qui suit pour créer vos FeatureTypes et fonctionnalités pour chacun de vos types. Ensuite, c'est un cas simple de générer un ShapefileDatastore pour écrire chaque ensemble.

package spike; 

import java.util.ArrayList; 
import java.util.List; 

import org.geotools.feature.simple.SimpleFeatureBuilder; 
import org.geotools.feature.simple.SimpleFeatureTypeBuilder; 
import org.geotools.geometry.jts.GeometryBuilder; 
import org.opengis.feature.simple.SimpleFeature; 
import org.opengis.feature.simple.SimpleFeatureType; 

import com.vividsolutions.jts.geom.Point; 

public class ShpFileBuilder { 
    static final GeometryBuilder GEOMBUILDER = new GeometryBuilder(); 

    public SimpleFeatureType buildType(PointDTO dto) { 
     SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder(); 
     builder.setName(dto.type); 
     builder.setNamespaceURI("http://www.geotools.org/"); 
     builder.setSRS("EPSG:25829"); 
     builder.add("the_geom", Point.class); 
     for (String[] att : dto.atributtes) { 
      builder.add(att[0], String.class); 
     } 
     SimpleFeatureType featureType = builder.buildFeatureType(); 
     return featureType; 

    } 

    public SimpleFeature buildFeature(PointDTO dto, SimpleFeatureType schema) { 
     SimpleFeatureBuilder builder = new SimpleFeatureBuilder(schema); 
     Point p = GEOMBUILDER.point(dto.x.doubleValue(), dto.y.doubleValue()); 
     builder.set("the_geom", p); 
     for (String[] att : dto.atributtes) { 
      builder.set(att[0], att[1]); 
     } 
     return builder.buildFeature(dto.wkid.toString()); 
    } 

    public class PointDTO { 
     private String type; 
     private Double x; 
     private Double y; 
     private Integer wkid; 
     private List<String[]> atributtes = new ArrayList<String[]>(); 
     // Getters & Setters 
    } 
}