[Gvsig_desarrolladores] Obtener una feature concreta por posición

Joaquin Jose del Cerro Murciano jjdelcerro en gvsig.org
Dom Jun 5 11:51:04 CEST 2016


El 5 de junio de 2016, 10:53, Francisco Puga <fpuga en icarto.es> escribió:

> Hola Joaquín,
>
> Gracias por el post es muy ilustrativo.
>
> La aproximación que estoy tomando para hacer la migración es tratar de
> hacer una traducción 1 a 1, creando incluso clases auxiliares que me
> provean de un comportamiento similar a la v1.x. Una vez que consiga tenerlo
> funcionando mi idea es refactorizar hacia una estructura más acorde a la
> v2. Igual me equivoco pero hice una prueba rápida e intentar migrar
> directamente a una estructura como la v2 introduce demasiados bugs. De la
> otra forma puedo tenerlo funcionando relativamente rápido y en función del
> tiempo disponible priorizar tareas.
>
>
Desde el proyecto aconsejamos se siga una estructura de proyecto; pero en
principio, mientras no hayan otros condicionantes, es solo eso, un consejo
de buenas practicas. Eso si, la estructura de proyecto que aconsejamos
requiere un esfuerzo inicial en el analisis, asi como entender que es cada
pieza para poder dejar las cosas en su sitio. La experiencia es que a medio
plazo el codigo es mucho mas facil de mantener, pero en general para pasar
de gvSIG 1 a gvSIG 2 muy poco del codigo es reutilizable. La aproximacion
que propones no te la aconsejo. Hemos tenido muy males experiencias con
ella. No pienses que despues de que tengas tu proyecto funcionando en gvSIG
2 te va a ser mas facil migrar a la estructura de proyecto nuevo. No suele
ser asi, sigue siendo igual de dificil y ya has invertido un monton de
horas. Decide si vas o no a seguir la nueva estructura de proyecto y sigue
adelante con la decision que tomes sin pensar que luego ya lo cambiaras. Al
final el coste de cambiarlo es muy alto.

Sin pensarlo mucho, un cambio si que te aconsejo que te plantees. Sustituye
todos los accesos aleatorios a datos que tengas por secuenciales siempre
que se pueda. Esto no tiene nada que ver con la estructura del proyecto y
te iran mucho mejor las cosas.



> Tendría que revisar un poco el código pero por lo que explicas en el post
> entiendo que con FeaturePagingHelper me traigo a memoria un número de
> features igual al del tamaño de página y cuando pido una feature fuera de
> la página actual hago otra petición (a bd o lo que sea).
>

Correcto ,se mantiene en memoria una lista de tantas features como hayas
indicado en el tamaño de pagina, y cuando le pides una feature que se salga
de la pagina cargada, calcula en que pagina esta la que le has pedido y
carga esa pagina.  Deberas mantener un equilibrio en lo que es el tamaño de
pagina. Paginas muy grandes consumen mucha memoria y provocan parones
grandes cuando se provoca un fallo de pagina, con lo que el acceso no es
fluido. Paginas muy pequeñas, consumen poca memoria y se cargan muy rapido,
pero provocan muchos fallos de pagina, con lo que el recorrido es lento. Si
no recuerdo mal, el documento tabla tiene un tamaño de pagina de 100
features, por si te sirve para hacerte una idea.


> Lo que tengo dudas es en el acceso al FeatureSet. Cuando se hace la
> petición a la bd ¿cuando se crea el fastIterator?
>
> En el proveedor de PostgreSQL se crea el ResultSet de JDBC cuando se le
pide al FeatureSet el iterador. En general supongo que eso sera valido para
otros proveedores que extiendan del de JDBC como hace este.
Para los de fichero, cada cual hace lo que cree oportuno.

Cuidado con las ordenaciones y filtros en los proveedores de fichero, como
el shp. Cuando se hace una ordenacion, con la implementacion actual, se
cargan todos los datos en memoria. Y con un filtro, si esta en edicion, el
orden de las features devueltas no siempre puede ser el mismo.

Un saludo
Joaquin



> El 4 de junio de 2016, 15:10, Joaquin Jose del Cerro Murciano <
> jjdelcerro en gvsig.org> escribió:
>
>>
>>
>> El 4 de junio de 2016, 12:52, Francisco Puga <fpuga en icarto.es> escribió:
>>
>>> Hola,
>>>
>>> Estoy tratando de migrar código de la 1 a la 2. En la 1 era muy habitual
>>> acceder a una feature de la capa por posición con un código de este estilo:
>>>
>>> int pos = 0;
>>> FLyrVect lyr = null;
>>> IFeature feature = lyr.getSource().getFeature(pos);
>>>
>>> Cual sería la forma lógica de hacer esto en la 2. Ahora mismo estoy
>>> probando a acceder mediante un iterator inicializado a esa posición
>>> concreta, pero igual tiene más sentido con un FeatureQuery, ¿Podéis poner
>>> un ejemplo de como sería con el FeatureQuery?
>>>
>>> public static FeatureReference getFeature(FeatureStore fs , long
>>> feature) {
>>> FeatureReference ref = null;
>>> FeatureSet featSet = null;
>>> DisposableIterator fastIterator = null;
>>> try {
>>> featSet = fs.getFeatureSet();
>>> fastIterator = featSet.fastIterator(feature);
>>> Feature feat = (Feature) fastIterator.next();
>>> ref = feat.getReference();
>>> } catch (DataException e) {
>>> logger.error(e.getStackTrace(),e);
>>> } finally {
>>> DisposeUtils.dispose(fastIterator);
>>> DisposeUtils.dispose(featSet);
>>> }
>>> return ref;
>>> }
>>>
>>>
>> Hola Francisco,
>> en lugar de contestarte aquí he preferido crear un pequeño articulo en el
>> blog de gvSIG comentando sobre esto.
>>
>> Puedes encontrar el articulo en:
>>
>>
>> https://blog.gvsig.org/2016/06/04/accediendo-a-un-feature-por-posicion-en-gvsig-desktop-2-3-0/
>>
>> También te recomiendo que le eches un vistazo a:
>>
>>
>> https://blog.gvsig.org/2015/04/21/recomendaciones-y-trucos-para-desarrollar-con-gvsig-2-1-1-recorriendo-datos/
>>
>> Espero que te sirva,  y no dudéis en preguntar las dudas, trataremos de
>> contestar en cuanto podamos.
>>
>> Un saludo
>> Joaquin
>>
>>
>>
>>
>>
>>> Saludos. Gracias
>>>
>>> _______________________________________________
>>> gvSIG_desarrolladores mailing list
>>> gvSIG_desarrolladores en listserv.gva.es
>>> Para ver histórico de mensajes, editar sus preferencias de usuario o
>>> darse de baja en esta lista, acuda a la siguiente dirección:
>>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>>
>>>
>>
>>
>> --
>> --------------------------------------
>> Joaquin Jose del Cerro Murciano
>> Development and software arquitecture manager at gvSIG Team
>> jjdelcerro en gvsig.com
>> jjdelcerro en gvsig.org
>> gvSIG Association
>> www.gvsig.com
>> www.gvsig.org
>>
>> _______________________________________________
>> gvSIG_desarrolladores mailing list
>> gvSIG_desarrolladores en listserv.gva.es
>> Para ver histórico de mensajes, editar sus preferencias de usuario o
>> darse de baja en esta lista, acuda a la siguiente dirección:
>> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>>
>>
>
>
> --
> Francisco Puga
> iCarto | Innovación, Cooperación, Cartografía y Territorio S.L.
> http://www.icarto.es/
>
> c/ Rafael Alberti nº 13 – 1º D
> 15008 A Coruña
> Galicia (Spain)
> +34 881927808
>
> Este correo electrónico contiene información estrictamente confidencial y
> es de uso exclusivo del destinatario, quedando prohibida a cualquier otra
> persona su revelación, copia, distribución, o el ejercicio de cualquier
> acción relativa a su contenido. Si ha recibido este mensaje por error, por
> favor conteste a su remitente mediante correo electrónico y proceda a
> borrarlo de su sistema.
>
> Sus datos personales serán tratados de forma confidencial y no serán
> cedidos a terceros ajenos a ICARTO. En cualquier caso, podrá ejercer los
> derecho de oposición, acceso, rectificación y cancelación de acuerdo con lo
> establecido en la Ley Orgánica 15/99, de 13 de diciembre, de Protección de
> Datos de Carácter Personal dirigiéndose a Innovación, Cooperación,
> Cartografía e Territorio, SL. (ICARTO) en la dirección postal a C/ Rafael
> Alberti, nº 13, 1ºD, 15.008 – (A Coruña).
>
> _______________________________________________
> gvSIG_desarrolladores mailing list
> gvSIG_desarrolladores en listserv.gva.es
> Para ver histórico de mensajes, editar sus preferencias de usuario o darse
> de baja en esta lista, acuda a la siguiente dirección:
> https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores
>
>


-- 
--------------------------------------
Joaquin Jose del Cerro Murciano
Development and software arquitecture manager at gvSIG Team
jjdelcerro en gvsig.com
jjdelcerro en gvsig.org
gvSIG Association
www.gvsig.com
www.gvsig.org
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: http://listserv.gva.es/pipermail/gvsig_desarrolladores/attachments/20160605/f7e6ef4e/attachment.htm 


Más información sobre la lista de distribución gvSIG_desarrolladores