Hi,

Renaming attributes to be compatible with shapefile specification is a 
common need.
I also had this need and decided to go through configuration files. With 
layers having
20 to 30 attributes each, if you have to rename attributes more than one 
or two times,
a graphical interface will not do it.

Currently, I just have a quick and dirty plugin, and I'm not completely 
satisfied with it
but I would be happy do discuss possible improvements. Current choices 
and limitations :
1 - not linked with drivers : layer names and attribute names are 
changed in the project
      -> not possible to remove geometry column
2 - renaming is not undoable
     (structure change is generally not undoable in OpenJUMP)
3 - I choose plain text file rather than xml to keep it as simple as 
possible

Notice : this is more a ETL capability. Wonder if it could be integrated 
to Sextante
modeler.

Michaël


Le 15/11/2016 à 21:49, Rahkonen Jukka (MML) a écrit :
> Good idea. How about having an option to rename the columns to be exported by 
> the same?  Would be handy for example when exporting columns with long names 
> into shapefiles when automatic truncation can create non-informative names.
>
> -Jukka Rahkonen-
>
> edgar soldin wrote:
>
>> maybe a panel to select the columns to be exported for the selected format 
>> would be A. reusable B. fitting for several formats (eg. csv, json).
> ..ede
>
>> On 15.11.2016 18:44, Giuseppe Aruta wrote:
>>> Hi everybody
>>> and thanks for the comments
>>>
>>> @Ede >can CSV writer ignore geoms if i want to write a plain data table?
>>> This is a good point. As CSV exporter also saves geometries in WKT.
>>> I did a couple of tests (exporting large shapefiles of Italian
>>> Regions/Provinces to csv), my LibreOffice speadsheet easly opened them
>>> (after a couple of quirks that the test is too long). Than I can
>>> delete the geometry columns and work with the other info
>> --------------------------------------------------
>>
>> Anyhow, going back to my modification. The problem cames out from the
>> following boolean
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *public static boolean isTable(Layer layer) { FeatureCollectionWrapper
>> featureCollection = layer
>> .getFeatureCollectionWrapper();        List featureList =
>> featureCollection.getFeatures();        Geometry nextGeo = null;        for
>> (@SuppressWarnings("unchecked")        Iterator<FeatureCollectionWrapper> i
>> = featureList.iterator(); i                .hasNext();) {
>> Feature feature = (Feature) i.next();            nextGeo =
>> feature.getGeometry();        }        if (!featureCollection.isEmpty() &&
>> nextGeo.isEmpty()) {            return true;        } else {
>> return false;        }    }*
>> It is rought and self explaining (I am not a good developer). The
>> feature collection is scanned. If all the geometries associated to all
>> features are empty, it gives back true().
>>
>> I wonder if I can limit all the trouble on this method, finding a
>> simpler and less invasive solution. Just a couple of idea:
>> It scan only over  the first 1000 of features or it does a random scan
>> over only 1000 features.
>>
>> There will be probably other simpler solutions. Any  idea is welcome.
>>
>>
>> @Michael. Thanks for the nice explanation. Very intuitive for the pictures.
>> Unfortunately it requires a hard job, more that the my (or our) target.
>>
>> Best regards
>>
>> Peppe
>>
>>
>>
>>
>> 2016-11-15 12:41 GMT+01:00 <edgar.sol...@web.de>:
>>
>>> Mike,
>>>
>>> i see your point. i'd vote to stick what we've got then and simply
>>> autocreate empty geometries as we do now. just curious, can CSV
>>> writer ignore geoms if i want to write a plain data table?
>>>
>>> ..ede
>>>
>>> On 15.11.2016 09:02, Michaël Michaud wrote:
>>>> Hi,
>>>>
>>>> If I had to refactor the layer hierarchy to include datasets without
>>> geometry, I would probably try something like that
>>>> (note that it would be a big refactoring, and I am not able to
>>>> evaluate
>>> the workload to achieve it)
>>>> Current layer hierarchy
>>>>
>>>> Current layer hierarchy
>>>>
>>>> Proposition to include non-geometric data (and to factorize some
>>> attributes)
>>>>
>>>> Proposed layer hierachy
>>>> Le 14/11/2016 à 14:29, Stefan Steiniger a écrit :
>>>>> Hi,
>>>>>
>>>>> i used empty geomcollection so far, to have something there... I am
>>>>> not
>>> sure how much work it would be to introduce a new table/data layer
>>> without a geometry - as i am not sure if OJ is designed for that.
>>> Simplest may be to copy and make the field invisible for now.
>>>>> Perhaps Michaël has a better idea about the possibility to throw
>>>>> out
>>> the geom.
>>>>>
>>>>>
>>>>> cheers,
>>>>>
>>>>> stefan
>>>>>
>>>>>
>>>>>
>>>>> ------ Originalnachricht ------
>>>>> *Von: *
>>>>> *Datum: *14.11.2016 9:45
>>>>> *An: *OpenJump develop and use;
>>>>> *Betreff:*Re: [JPP-Devel] SVN: [5185] core/trunk/src/com/
>>> vividsolutions/jump/workbench/ui/ LayerNameRenderer.java
>>>>> i guess the cleanest solution would be a new layer class eg.
>>>>> DataLayer,
>>> that simply does not allow adding/editing geometries or does not even
>>> have a geometry attribute.
>>>>> in the 2nd case you would probably need a new featurecollection w/o
>>>>> a
>>> geometry column as well and the whole thing would throw some
>>> exceptions here and there, as OJ expects geometries in
>>> featurecollections, but apart from that it would be clean and the
>>> renderer would not need to monitor geom changes at all.
>>>>> ..ede
>>>>>
>>>>> On 14.11.2016 10:39, Giuseppe Aruta wrote:
>>>>>> Thanks Michael Ede
>>>>>> Indeed I came across (as a side relative problem ) working on
>>> Saxtante.
>>>>>> Sextante allows to work on Table files while Oj not. We can take
>>> advance of
>>>>>> the Sextante table algorithms  allowing Sextante to decode the
>>>>>> vector layers, with all features with empty geometries (see  for
>>>>>> instance
>>> loading
>>>>>> .csv on auto mode) as tables (I already added added into Sextante
>>> binding a
>>>>>> Boolean method that allows to decode these files).
>>>>>> I wondered if users would also have benefit  to visualize that a
>>> table is
>>>>>> loaded into OJ workbench, with a table icon.
>>>>>> I will check other solutions. Thanks for the hint.
>>>>>> Peppe
>>>>>>
>>>>>> Il 13/Nov/2016 23:21, "Michaël Michaud"  ha
>>>>>> scritto:
>>>>>>
>>>>>>> Hi Peppe,
>>>>>>>
>>>>>>> Seel also my answer on 2016-10-29.
>>>>>>>
>>>>>>> TreeLayerNamePanel has a listener, but to avoid a
>>>>>>> featureCollection
>>> scan
>>>>>>> after each change
>>>>>>> you probably need to keep a cache in the Layer as suggested by
>>>>>>> Ede,
>>> and
>>>>>>> use the Layer's
>>>>>>> listener to update the cache every time a feature is added,
>>>>>>> removed
>>> or
>>>>>>> changed
>>>>>>>
>>>>>>> Michaël
>>>>>>>
>>>>>>>
>>>>>>> Le 13/11/2016 à 19:51, edgar.sol...@web.de a écrit :
>>>>>>>> thanks.. how about implementing the caching/listener approach if
>>>>>>>> you
>>>>>>> like to have icon? ..ede
>>>>>>>> On 13.11.2016 18:57, Giuseppe Aruta wrote:
>>>>>>>>> Ok Ede, I didn't  know it. I will revert the change.
>>>>>>>>> Thanks again
>>>>>>>>> Peppe
>>>>>>>>>
>>>>>>>>> Il 13/Nov/2016 18:48,  ha scritto:
>>>>>>>>>
>>>>>>>>>> Peppe,
>>>>>>>>>>
>>>>>>>>>> NACK.. this is going to get very slow for huge datasets
>>>>>>>>>> containing
>>>>>>> empty
>>>>>>>>>> geoms only, as it is run on every redraw of the layer tree.
>>>>>>>>>> please
>>>>>>> cache
>>>>>>>>>> the state and use a layer change listener or else users will
>>> complain
>>>>>>> about
>>>>>>>>>> a frozen OJ some time in the future and we will have a hard
>>>>>>>>>> time
>>> to
>>>>>>>>>> pinpoint the reason, again ;)
>>>>>>>>>>
>>>>>>>>>> ..ede
>>>>>>>>>>
>>>>>>>>>> On 13.11.2016 18:41, jump-pilot-...@lists.sourceforge.net wrote:
>>>>>>>>>>> Revision: 5185
>>>>>>>>>>>             http://sourceforge.net/p/jump-pilot/code/5185
>>>>>>>>>>> Author:   ma15569
>>>>>>>>>>> Date:     2016-11-13 17:41:37 +0000 (Sun, 13 Nov 2016)
>>>>>>>>>>> Log Message:
>>>>>>>>>>> -----------
>>>>>>>>>>> The layer tree shows a table icon for layers that have
>>>>>>>>>>> features
>>> with
>>>>>>>>>> empty geometries
>>>>>>>>>>> Modified Paths:
>>>>>>>>>>> --------------
>>>>>>>>>>>       core/trunk/src/com/vividsolutions/jump/workbench/
>>>>>>>>>> ui/LayerNameRenderer.java
>>>>>>>>>>> Modified: core/trunk/src/com/vividsolutions/jump/workbench/
>>>>>>>>>> ui/LayerNameRenderer.java
>>>>>>>>>>> ============================================================
>>> =======
>>>>>>>>>>> --- core/trunk/src/com/vividsolutions/jump/workbench/
>>>>>>> ui/LayerNameRenderer.java
>>>>>>>>>>         2016-11-13 17:21:20 UTC (rev 5184)
>>>>>>>>>>> +++ core/trunk/src/com/vividsolutions/jump/workbench/
>>>>>>> ui/LayerNameRenderer.java
>>>>>>>>>>         2016-11-13 17:41:37 UTC (rev 5185)
>>>>>>>>>>> @@ -36,6 +36,7 @@
>>>>>>>>>>>    import java.awt.Rectangle;
>>>>>>>>>>>    import java.io.File;
>>>>>>>>>>>    import java.util.Iterator;
>>>>>>>>>>> +import java.util.List;
>>>>>>>>>>>
>>>>>>>>>>>    import javax.swing.DefaultListCellRenderer;
>>>>>>>>>>>    import javax.swing.Icon;
>>>>>>>>>>> @@ -54,9 +55,11 @@
>>>>>>>>>>>    import org.openjump.core.rasterimage.RasterImageLayer;
>>>>>>>>>>>
>>>>>>>>>>>    import com.vividsolutions.jts.geom.Envelope;
>>>>>>>>>>> +import com.vividsolutions.jts.geom.Geometry;
>>>>>>>>>>>    import com.vividsolutions.jump.I18N;
>>>>>>>>>>>    import com.vividsolutions.jump.feature.Feature;
>>>>>>>>>>>    import com.vividsolutions.jump.feature.FeatureCollection;
>>>>>>>>>>> +import com.vividsolutions.jump.feature.
>>> FeatureCollectionWrapper;
>>>>>>>>>>>    import com.vividsolutions.jump.io.datasource.DataSourceQuery;
>>>>>>>>>>>    import com.vividsolutions.jump.util.StringUtil;
>>>>>>>>>>>    import com.vividsolutions.jump.workbench.JUMPWorkbench;
>>>>>>>>>>> @@ -118,6 +121,7 @@
>>>>>>>>>>>        private ImageIcon rasterIcon =
>>> IconLoader.icon("map_13.png");
>>>>>>>>>>>        private ImageIcon sextante_rasterIcon =
>>>>>>> IconLoader.icon("mapSv2_13.
>>>>>>>>>> png");
>>>>>>>>>>>        private ImageIcon sextante_rasterIcon2 =
>>>>>>>>>> IconLoader.icon("mapSv2_13bw.png");
>>>>>>>>>>> +    private ImageIcon table_Icon =
>>>>>>>>>>> + IconLoader.icon("Table.gif");
>>>>>>>>>>>        private final static String LAYER_NAME = I18N
>>>>>>>>>>>                .get("org.openjump.core.ui.plugin.layer.
>>>>>>>>>> LayerPropertiesPlugIn.Layer-Name");
>>>>>>>>>>>        private final static String FILE_NAME =
>>>>>>>>>> I18N.get("ui.MenuNames.FILE");
>>>>>>>>>>> @@ -379,6 +383,12 @@
>>>>>>>>>>>                        .getFeatureCollectionWrapper().size() >
>>>>>>>>>>> 1
>>> ?
>>>>>>>>>> multiRasterIcon
>>>>>>>>>>>                        : rasterIcon);
>>>>>>>>>>>                imageLabel.setVisible(true);
>>>>>>>>>>> +        } else if (showColorPanel && layerable instanceof Layer
>>>>>>>>>>> +            && isTable((Layer) layerable)) {
>>>>>>>>>>> +          //Show a table icon if the Layer has features with
>>> empty
>>>>>>>>>> geometries
>>>>>>>>>>> +        imageLabel.setIcon(table_Icon);
>>>>>>>>>>> +        imageLabel.setVisible(true);
>>>>>>>>>>> +
>>>>>>>>>>>            } else if (showColorPanel && layerable instanceof
>>> Layer) {
>>>>>>>>>>>                colorPanel.init((Layer) layerable, isSelected,
>>>>>>>>>>>                        list.getBackground(),
>>>>>>> list.getSelectionBackground())
>>>>>>>>>> ;
>>>>>>>>>>> @@ -1022,4 +1032,27 @@
>>>>>>>>>>>                    && bgc.equals(p.getBackground()) &&
>>> p.isOpaque();
>>>>>>>>>>>            return !colorMatchOrOpaque && super.isOpaque();
>>>>>>>>>>>        }
>>>>>>>>>>> +
>>>>>>>>>>> +    /*
>>>>>>>>>>> +     * [Giuseppe Aruta 11.2016] . True if all the layer
>>> geometries
>>>>>>> are
>>>>>>>>>> empty
>>>>>>>>>>> +     * (Geometrycollection empty). Workaround to decode
>>>>>>>>>>> + table
>>> files
>>>>>>>>>> (like .csv or .dbf)
>>>>>>>>>>> +     *  so that they are loaded in Sextante as table
>>>>>>>>>>> +      */
>>>>>>>>>>> +    public static boolean isTable(Layer layer) {
>>>>>>>>>>> +        FeatureCollectionWrapper featureCollection = layer
>>>>>>>>>>> +                .getFeatureCollectionWrapper();
>>>>>>>>>>> +        List featureList = featureCollection.getFeatures();
>>>>>>>>>>> +        Geometry nextGeo = null;
>>>>>>>>>>> +        for (@SuppressWarnings("unchecked")
>>>>>>>>>>> +        Iterator i =
>>>>>>> featureList.iterator();
>>>>>>>>>> i
>>>>>>>>>>> +                .hasNext();) {
>>>>>>>>>>> +            Feature feature = (Feature) i.next();
>>>>>>>>>>> +            nextGeo = feature.getGeometry();
>>>>>>>>>>> +        }
>>>>>>>>>>> +        if (!featureCollection.isEmpty() && nextGeo.isEmpty()) {
>>>>>>>>>>> +            return true;
>>>>>>>>>>> +        } else {
>>>>>>>>>>> +            return false;
>>>>>>>>>>> +        }
>>>>>>>>>>> +    }
>>>>>>>>>>>    }
>>>>>>>>>>> \ No newline at end of file
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> ------------------------------------------------------------
>>>>>>>>>> ------------------
>>>>>>>>>>> Developer Access Program for Intel Xeon Phi Processors Access
>>>>>>>>>>> to Intel Xeon Phi processor-based developer platforms.
>>>>>>>>>>> With one year of Intel Parallel Studio XE.
>>>>>>>>>>> Training and support from Colfax.
>>>>>>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>>>>>> _______________________________________________
>>>>>>>>>>> Jump-pilot-devel mailing list
>>>>>>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------
>>>>>>>>>> ------------------
>>>>>>>>>> Developer Access Program for Intel Xeon Phi Processors Access
>>>>>>>>>> to Intel Xeon Phi processor-based developer platforms.
>>>>>>>>>> With one year of Intel Parallel Studio XE.
>>>>>>>>>> Training and support from Colfax.
>>>>>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Jump-pilot-devel mailing list
>>>>>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ------------------------------------------------------------
>>>>>>> ------------------
>>>>>>>>> Developer Access Program for Intel Xeon Phi Processors Access
>>>>>>>>> to Intel Xeon Phi processor-based developer platforms.
>>>>>>>>> With one year of Intel Parallel Studio XE.
>>>>>>>>> Training and support from Colfax.
>>>>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Jump-pilot-devel mailing list
>>>>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>>>>
>>>>>>>> ------------------------------------------------------------
>>>>>>> ------------------
>>>>>>>> Developer Access Program for Intel Xeon Phi Processors Access to
>>>>>>>> Intel Xeon Phi processor-based developer platforms.
>>>>>>>> With one year of Intel Parallel Studio XE.
>>>>>>>> Training and support from Colfax.
>>>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>>> _______________________________________________
>>>>>>>> Jump-pilot-devel mailing list
>>>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>>>
>>>>>>>
>>>>>>> ------------------------------------------------------------
>>>>>>> ------------------
>>>>>>> Developer Access Program for Intel Xeon Phi Processors Access to
>>>>>>> Intel Xeon Phi processor-based developer platforms.
>>>>>>> With one year of Intel Parallel Studio XE.
>>>>>>> Training and support from Colfax.
>>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>> _______________________________________________
>>>>>>> Jump-pilot-devel mailing list
>>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>>
>>>>>>
>>>>>>
>>>>>> ------------------------------------------------------------
>>> ------------------
>>>>>> Developer Access Program for Intel Xeon Phi Processors Access to
>>>>>> Intel Xeon Phi processor-based developer platforms.
>>>>>> With one year of Intel Parallel Studio XE.
>>>>>> Training and support from Colfax.
>>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>>
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Jump-pilot-devel mailing list
>>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>>
>>>>> ------------------------------------------------------------
>>> ------------------
>>>>> Developer Access Program for Intel Xeon Phi Processors Access to
>>>>> Intel Xeon Phi processor-based developer platforms.
>>>>> With one year of Intel Parallel Studio XE.
>>>>> Training and support from Colfax.
>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>> _______________________________________________
>>>>> Jump-pilot-devel mailing list
>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>>
>>>>>
>>>>> ------------------------------------------------------------
>>> ------------------
>>>>> Developer Access Program for Intel Xeon Phi Processors Access to
>>>>> Intel Xeon Phi processor-based developer platforms.
>>>>> With one year of Intel Parallel Studio XE.
>>>>> Training and support from Colfax.
>>>>> Order your platform today. http://sdm.link/xeonphi
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Jump-pilot-devel mailing list
>>>>> Jump-pilot-devel@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>
>>>>
>>>> ------------------------------------------------------------
>>> ------------------
>>>>
>>>>
>>>> _______________________________________________
>>>> Jump-pilot-devel mailing list
>>>> Jump-pilot-devel@lists.sourceforge.net
>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>>
>>> ------------------------------------------------------------
>>> ------------------
>>> _______________________________________________
>>> Jump-pilot-devel mailing list
>>> Jump-pilot-devel@lists.sourceforge.net
>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>>
>>
>>
>> ----------------------------------------------------------------------
>> --------
>>
>>
>>
>> _______________________________________________
>> Jump-pilot-devel mailing list
>> Jump-pilot-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>>
> ------------------------------------------------------------------------------
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>
> ------------------------------------------------------------------------------
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>


------------------------------------------------------------------------------
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to