gvSIG feature requests #4420

problem con tipos de PostGIS capas en gvSIG

Added by Piotr Pachół over 7 years ago. Updated 9 months ago.

Status:Outdated% Done:

0%

Priority:NormalSpent time:-
Assignee:Joaquín del Cerro Murciano
Category:Database
Target version:-
gvSIG version:2.3.1 Add-on resolve version:
Keywords: Add-on resolve build:
Has patch: Proyecto:
Add-on name:Unknown Hito:
Add-on version:

Description

Despues de anadir PostGIS capa que es de tipo "LINESTRING" en propiedades de la capa (pestana general) puedo ver que la capa es de tipo: Geometry:2D.
Deberia ser tipo MultiCurve:2D. Ademas en el TOC bajo de nombre de la capa hay tres simbolos de tipo marcador, linea y relleno. Deberia ser solamente tipo linea. El mismo problema es con PostGIS capas de tipo "POINT" y "POLYGON".

Adjunto zip fichero con PostGIS capa "kr__duplicate_line" en .sql
El resultado de expresion:
select distinct geometrytype(geom) from kr__duplicate_line;
es
"LINESTRING"
En este caso en gvSIG deberia ser tipo MultiCurve:2D y en el TOC deberia ser solamente simbolo de tipo linea.

duplicate_line.zip (3.23 KB) Piotr Pachół, 11/01/2016 11:08 PM

History

#1 Updated by Francisco Puga over 7 years ago

I think that gvSIG only handles "MULTI" geometries. Not sure at all, but i think that is the same for qgis.

Use POINT, MULTILINESTRING and MULTIPOLYGON as geometry types in your postgis tables to avoid problems.

#2 Updated by Piotr Pachół over 7 years ago

He hecho unos tests y puedo decir que gvSIG maneja los tipos: POINT, MULTIPOINT, LINESTRING, MULTILINESTRING, POLYGON y MULTIPOLYGON pero solamente si toda la tabla tiene definida precisamente la geometria en encabezamiento de la tabla, es decir por ejemplo:
CREATE TABLE line (
id character varying, geom geometry(Linestring,2180) );

En esta situacion el resultado de expresion: select type from geometry_columns where f_table_name='line'; es: LINESTRING

Lo que es el bug para mi es la situacion en que la tabla no tiene definida geometria en encabezamiento de la tabla, es decir por ejemplo:
CREATE TABLE line (
id character varying, geom geometry);

El resultado de expresion: select type from geometry_columns where f_table_name='line'; es: GEOMETRY
Pero todas geometrias insertadas en la tabla es de tipo LINESTRING.
En este caso gvSIG funciona mal - como he describido antes.
Qgis en este caso funciona muy bien.

#3 Updated by Álvaro Anguix almost 7 years ago

  • Category set to Database

#4 Updated by Joaquín del Cerro Murciano almost 7 years ago

  • Target version set to 2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220)
  • Assignee set to Joaquín del Cerro Murciano

#5 Updated by Joaquín del Cerro Murciano almost 7 years ago

En postgreSQL el tipo de una columna no viene dado por los datos que tenga esta.
Imaginemos que tengo una tabla tal que asi:

CREATE TABLE foo (
    id integer,
    dato varchar(80)
);


Y la relleno con los valores:
INSERT INTO foo VALUES (1, '10');
INSERT INTO foo VALUES (2, '123');
INSERT INTO foo VALUES (3, '87');
INSERT INTO foo VALUES (4, '341');
INSERT INTO foo VALUES (5, '1000');

El tipo de la columna "dato" es "varchar", aunque solo contenga enteros.
No se espera que de repente, por que solo contiene enteros el tipo pase a ser automaticamente "integer".

Si yo tengo una tabla:

CREATE TABLE foo (
    id integer,
    dato geometry(Point,4326)
);

Le estoy diciendo que el tipo de la columna "dato" es una geometria de tipo punto. Y solo podre meter geometrias de tipo punto en esa columna.

Ahora bien, si yo la tabla la creo como:

CREATE TABLE foo (
    id integer,
    dato geometry(geometry,4326)
);

Estare creando una tabla con un campo "dato" que es del tipo geometria "generico", es decir, lo estoy declarando como que puede contener cualquier tipo de geometria. Podre llenarla con:

INSERT INTO foo VALUES (1, ST_GeomFromText('POINT(10 10)'));
INSERT INTO foo VALUES (2, ST_GeomFromText('POINT(10 11)'));
INSERT INTO foo VALUES (3, ST_GeomFromText('POINT(10 12)'));
INSERT INTO foo VALUES (4, ST_GeomFromText('POINT(10 13)'));
INSERT INTO foo VALUES (5, ST_GeomFromText('POINT(10 14)'));


Pero por que todos los elementos de la columna "dato" sean de tipo "Point" el tipo de la columna no se convierte por automaticamente en "geometry(Point)" seguira siendo "geometry(geometry)", igual que no cambio automaticamente el "varchar" a "integer".

Si yo he declarado la columna de tipo "geometry(geometry)", o me he despistado o lo he hecho por que quiero poder almacenar cualquier tipo de geometria en ella.

Acudir a recorrernos todos los datos e intentar inferir el tipo de geometria que tienen los datos, ademas de poder ser lento, podria desvirtuar lo que el que creo la tabla queria.

Si lo que quieres decir es que el usuario que creo la tabla se despisto y no puso correctamente el tipo de datos de la columna "dato", el error es del usuario que creo la tabla, no de gvSIG.

A pesar de todo esto, podriamos intentar inferir el tipo de datos de la columna y llegar a la conclusion de que tenia que haberse creado como "geometry(Point)", y gvSIG decidir que el tipo es ese y se mostraria como punto en el TOC y en propiedades apareceria como Point 2D. Ahora bien, si el usuario lo creo como "geometry(geometry)" aproposito, con gvSIG nunca podra añadir una linea, "Line", ya que una vez gvSIG ha decidido que es un "Point" no va a dejarte meter lineas (u otro tipo de geometrias) a pesar que la tabla lo permite.

Lo que pienso podria ser util seria añadir al interface de usuario de añadir capa desde BBDD alguna opcion mas que permita seleccionar como se obtiene el tipo de la geometria. Que tenga opciones como:

  • Usar el declarado en la tabla (marcado por defecto).
  • Inferir a partir de los datos.
  • Forzar a un tipo en concreto (Point, Line, Polygon...)

Pero eso mas que un bug seria un fearure request.

#6 Updated by Álvaro Anguix almost 7 years ago

  • Target version deleted (2.4.0-2850-final (rev. org.gvsig.desktop-2.0.220))
  • Tracker changed from gvSIG bugs to gvSIG feature requests

#7 Updated by Álvaro Anguix 9 months ago

  • Status changed from New to Outdated

Also available in: Atom PDF