[Gvsig_desarrolladores] Editar tabla de un shape
Eduardo Cristóbal Enríquez
edu_ce_1988 en hotmail.com
Mie Mayo 26 16:05:18 CEST 2010
Hola Virginia, creo que estás programando en la versión 1.9, que es en la
que yo programo...aunque lamentablemente yo tampoco se modificar los
registros de un shape... si alguien lo sabe que conteste por favor.
Lo de crear la capa y lo de acceder a ella creo que lo has sacado de este
manual:
ftp://downloads.gvsig.org/gva/descargas/manuales/Crear_extensiones_en_gvSIG.pdf
al menos los métodos creo que hacen eso.
Yo de momento lo que hago es acceder a las tablas de un shape, en vez de con
un listener y queryByPoint hago la query sobre la capa que seleccione el
usuario:
FBitSet selection =
capaSeleccionada.queryByRect(capaSeleccionada.getFullExtent()); pero
únicamente accedo a los datos
A ver si alguien contesta y nos aclara la duda.
Un saludo.
Edu.
From: Virginia Portillo Ramos
Sent: Wednesday, May 26, 2010 10:32 AM
To: gvsig_desarrolladores en listserv.gva.es
Subject: Re: [Gvsig_desarrolladores] Editar tabla de un shape
Hola,
Te pongo el codigo que utilizo para crear el shape y el que he probado para
cambiar el registro de la tabla pero que no me funciona, creo que es por el
tipo de driver que no es de escritura pero no se como cambiar esto.
Creo capa :
ArrayList XY = new ArrayList();
XY.add("0"); 'ID
XY.add("200"); 'X
XY.add("200"); 'Y
XY.add("Valencia"); 'CIUDAD
XY.add("1");
XY.add("300");
XY.add("300");
XY.add("Madrid");
XY.add("2");
XY.add("400");
XY.add("400");
XY.add("Leon");
XY.add("3");
XY.add("500");
XY.add("500");
XY.add("Murcia");
// DRIVER DEFINITION (SHAPE TYPE AND FIELDS)
ConcreteMemoryDriver driver = new ConcreteMemoryDriver();
driver.setShapeType(FShape.POINT);
ArrayList arrayFields = new ArrayList();
arrayFields.add("ID");
arrayFields.add("CIUDAD");
Value[] auxRow = new Value[2];
driver.getTableModel().setColumnIdentifiers(arrayFields.toArray());
View v = (View)
PluginServices.getMDIManager().getActiveWindow();
MapControl mapCtrl = v.getMapControl();
Double x;
Double y;
FShape shp1 = null;
FShape shpT = null;
for (int j = 0;j<XY.size(); j+=4){
// ATRIBUTES
auxRow[0] =
ValueFactory.createValue(XY.get(j).toString());
auxRow[1] =
ValueFactory.createValue(XY.get(j+3).toString());
// GEOMETRY DEFINITION
x = Double.parseDouble(XY.get(j+1).toString());
y = Double.parseDouble(XY.get(j+2).toString());
shp1 = new FPoint2D(x,y);
driver.addShape(shp1, auxRow);
}
// CREATE AND ADD LAYER
FLayer lyr;
String layerName = "Ciudades";
lyr = LayerFactory.createLayer(layerName,driver,
mapCtrl.getProjection());
Modificar registro :
MapControl mapControl = null;
IWindow view =
PluginServices.getMDIManager().getActiveWindow();
if (!(view instanceof View))
return;
View vista=(View)view;
IProjectView model = vista.getModel();
MapContext mapa = model.getMapContext();
mapControl = vista.getMapControl();
double tol =
mapControl.getViewPort().toMapDistance(10);
FLayers lyrs =
mapControl.getMapContext().getLayers();
FLyrVect lyrCiudades =
(FLyrVect)lyrs.getLayer("Ciudades");
Double x;
Double y;
x = Double.parseDouble("200");
y = Double.parseDouble("200");
Point2D mapPoint =
mapControl.getViewPort().toMapPoint(0,0);
mapPoint.setLocation(x, y);
FBitSet fb = lyrCiudades.queryByPoint(mapPoint,
tol);
if (!fb.isEmpty()){
EditableAdapter vea = new EditableAdapter();
vea.setOriginalDataSource(lyrCiudades.getRecordset());
vea.setSelection(fb);
FBitSet fbs = vea.getSelection();
int ix = fbs.nextSetBit(0);
IRowEdited row = vea.getRow(ix);
Value[] values = row.getAttributes();
values[0] = ValueFactory.createValue("0");
values[1] =
ValueFactory.createValue("Bilbao");
IRow newRow = null;
if (row.getLinkedRow() instanceof IFeature)
{
IGeometry geometry =
((DefaultFeature)row.getLinkedRow()).getGeometry();
newRow = new DefaultFeature(geometry,
values,row.getID());
} else {
newRow = new DefaultRow(values,
row.getID());
}
if (vea instanceof IWriteable){
IWriteable w = (IWriteable) vea;
IWriter writer = w.getWriter();
if (writer == null){
}else{
vea.startEdition(EditionEvent.ALPHANUMERIC);
vea.modifyRow(ix, newRow, "Editar
valor", EditionEvent.ALPHANUMERIC);
vea.stopEdition(writer,EditionEvent.ALPHANUMERIC);
}
}
}
vista.repaintMap();
No se si lo estoy haciendo bien, no se si hay otra manera de crear la capa
para poder modificar los registros.
Muchas gracias de antemano.
Un saludo.
Virginia
> Date: Tue, 25 May 2010 14:35:51 -0700
> From: agirrearri en hotmail.com
> To: gvsig_desarrolladores en listserv.gva.es
> Subject: Re: [Gvsig_desarrolladores] Editar tabla de un shape
>
>
> Hola, como es el codigo? Porque yo hace poco he creado un shape desde
> código
> y si creas el featureStore ya lo tienes, tienes que crear un nuevo
> feature.
> Para meter un nuevo registro.
> Si puedes poner el codigo te puedo orientar donde editar la tabla.
>
> Atentamente, Eñaut
> --
> View this message in context:
> http://osgeo-org.1803224.n2.nabble.com/Editar-tabla-de-un-shape-tp5097908p5100585.html
> Sent from the gvSIG desarrolladores mailing list archive at Nabble.com.
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
¿Sabes que La Gente de Hoy tiene GUARDAESPALDAS contra el Spam?
_______________________________________________
gvSIG_desarrolladores mailing list
gvSIG_desarrolladores en listserv.gva.es
http://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
Más información sobre la lista de distribución gvSIG_desarrolladores