Revision 293

View differences:

org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/pom.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3
	
4
    <modelVersion>4.0.0</modelVersion>
5
    <artifactId>org.gvsig.lidar.app</artifactId>
6
    <packaging>pom</packaging>
7
    <name>org.gvsig.lidar.app</name>
8
    <parent>
9
        <groupId>org.gvsig</groupId>
10
        <artifactId>org.gvsig.lidar</artifactId>
11
        <version>1.0.1-SNAPSHOT</version>
12
    </parent>
13

  
14
    <modules>
15
        <module>org.gvsig.lidar.app.mainplugin</module>
16
    </modules>
17
</project>
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/assembly/gvsig-plugin-package.xml
1
<!-- gvSIG. Desktop Geographic Information System. Copyright (C) 2007-2016 
2
	gvSIG Association. This program is free software; you can redistribute it 
3
	and/or modify it under the terms of the GNU General Public License as published 
4
	by the Free Software Foundation; either version 3 of the License, or (at 
5
	your option) any later version. This program is distributed in the hope that 
6
	it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty 
7
	of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General 
8
	Public License for more details. You should have received a copy of the GNU 
9
	General Public License along with this program; if not, write to the Free 
10
	Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 
11
	USA. For any additional information, do not hesitate to contact us at info 
12
	AT gvsig.com, or visit our website www.gvsig.com. -->
13
<assembly>
14
	<id>gvsig-plugin-package</id>
15
	<formats>
16
		<format>zip</format>
17
	</formats>
18
	<baseDirectory>${project.artifactId}</baseDirectory>
19
	<includeBaseDirectory>true</includeBaseDirectory>
20
	<files>
21
		<file>
22
			<source>target/${project.artifactId}-${project.version}.jar</source>
23
			<outputDirectory>lib</outputDirectory>
24
		</file>
25
		<file>
26
			<source>target/package.info</source>
27
		</file>
28
	</files>
29

  
30
	<fileSets>
31
		<fileSet>
32
			<directory>src/main/resources-plugin</directory>
33
			<outputDirectory>.</outputDirectory>
34
		</fileSet>
35
	</fileSets>
36

  
37

  
38
	<dependencySets>
39
		<dependencySet>
40
			<useProjectArtifact>false</useProjectArtifact>
41
			<useTransitiveDependencies>false</useTransitiveDependencies>
42
			<outputDirectory>lib</outputDirectory>
43
			<includes>
44
				<include>org.gvsig:org.gvsig.lidar.prov.common</include>
45
				<include>org.gvsig:org.gvsig.lidar.prov.whitebox</include>
46
				<include>org.gvsig:org.gvsig.lidar.prov.jgrass</include>
47
				<include>whitebox:whitebox-api:jar</include>
48
				<include>org.jgrasstools:jgt-jgrassgears</include>
49
				<include>net.java.dev.jna:jna</include>
50
				<include>org.opengis:geoapi</include>
51
			</includes>
52
		</dependencySet>
53

  
54
	</dependencySets>
55

  
56
</assembly>
57

  
58

  
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/prov/lidar/ExporttoLASProvider.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.exportto.swing.prov.lidar;
24

  
25
import java.io.File;
26
import java.util.ArrayList;
27
import java.util.List;
28

  
29
import org.cresques.cts.ICoordTrans;
30
import org.cresques.cts.IProjection;
31
import org.gvsig.exportto.ExporttoService;
32
import org.gvsig.exportto.swing.panel.SelectEnvelopeOptionPanel;
33
import org.gvsig.exportto.swing.prov.file.AbstractExporttoFileProvider;
34
import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
35
import org.gvsig.fmap.dal.exception.DataException;
36
import org.gvsig.fmap.dal.feature.FeatureStore;
37
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
38
import org.gvsig.fmap.geom.primitive.Envelope;
39
import org.gvsig.tools.service.spi.ProviderServices;
40
import org.slf4j.Logger;
41
import org.slf4j.LoggerFactory;
42
import org.gvsig.exportto.swing.prov.lidar.ExporttoLASService;
43

  
44
/**
45
 * Exporto provider which gets Exporto from a file.
46
 *
47
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
48
 */
49
public class ExporttoLASProvider extends AbstractExporttoFileProvider
50
        implements ExporttoLASOptions {
51

  
52
    private static Logger logger = LoggerFactory.getLogger(
53
            ExporttoLASProvider.class);
54

  
55
    protected List<ExporttoSwingProviderPanel> panels = new ArrayList<ExporttoSwingProviderPanel>();
56
    
57
    private String storeName = null;
58
    protected SelectEnvelopeOptionPanel envelopePanel;
59
    
60
    public ExporttoLASProvider(ProviderServices providerServices,
61
            FeatureStore sourceStore, IProjection targetProjection) {
62
    	super(providerServices, sourceStore, targetProjection);
63
    	IProjection sourceProjection = getSourceSrs(sourceStore);
64
    	envelopePanel = new SelectEnvelopeOptionPanel(sourceProjection);
65
    }
66
    
67
    protected IProjection getSourceSrs(FeatureStore sourceStore) {
68
    	try {
69
    		return sourceStore.getDefaultFeatureType().getDefaultGeometryAttribute().getSRS();
70
    	} catch (Exception e) {}
71
    	return null;
72
    }
73

  
74
    public int getPanelCount() {
75
    	return super.getPanelCount()+1;
76
        //return this.panels.size();
77
    }
78

  
79
    public ExporttoSwingProviderPanel getPanelAt(int index) {
80
    	if (super.getPanelCount()>index) {
81
    		return super.getPanelAt(index);	
82
    	}
83
    	else {
84
    		return envelopePanel;
85
    	}
86
    }
87

  
88
    public FeatureStore getSource() {
89
        return this.featureStore;
90
    }
91

  
92
    public ExporttoService createExporttoService() {
93
        return new ExporttoLASService(this);
94
    }
95

  
96
    public FilesystemServerExplorerParameters getExplorerParameters() {
97
    	return null;
98
        // CMI return this.connectionPanel.getServerExplorerParameters();
99
    }
100

  
101

  
102

  
103
	public File getOutputFile() {
104
		return this.selectFileOptionPanel.getSelectedFile();
105
	}
106

  
107

  
108

  
109
	public IProjection getTargetProjection() {
110
		return this.projection;
111
	}
112

  
113

  
114
	public Envelope getFilterEnvelope() {
115
		return this.envelopePanel.getEnvelope();
116
	}    
117
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/prov/lidar/ExporttoLASOptions.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23

  
24
package org.gvsig.exportto.swing.prov.lidar;
25

  
26
import java.io.File;
27
import java.util.List;
28

  
29
import org.cresques.cts.IProjection;
30
import org.gvsig.fmap.dal.feature.FeatureStore;
31
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
32
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
33
import org.gvsig.fmap.geom.primitive.Envelope;
34
import org.gvsig.lidar.prov.LASDataStoreParameters;
35

  
36
/**
37
 *
38
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
39
 */
40
public interface ExporttoLASOptions  {
41

  
42
    public FilesystemServerExplorerParameters getExplorerParameters();
43
    
44
    public File getOutputFile();
45
    
46
    public FeatureStore getSource();
47
    
48
    public IProjection getTargetProjection();
49
    
50
    public Envelope getFilterEnvelope();
51
    
52
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/prov/lidar/ExporttoLASProviderLibrary.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.exportto.swing.prov.lidar;
24

  
25
import org.gvsig.exportto.swing.ExporttoSwingLibrary;
26
import org.gvsig.exportto.swing.spi.ExporttoSwingProviderLocator;
27
import org.gvsig.fmap.dal.DALLibrary;
28
import org.gvsig.tools.ToolsLocator;
29
import org.gvsig.tools.i18n.I18nManager;
30
import org.gvsig.tools.library.AbstractLibrary;
31
import org.gvsig.tools.library.LibraryException;
32
import org.gvsig.tools.service.spi.ProviderManager;
33

  
34
/**
35
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
36
 *
37
 */
38
public class ExporttoLASProviderLibrary extends AbstractLibrary {
39

  
40
    @Override
41
    public void doRegistration() {
42
        registerAsServiceOf(ExporttoSwingLibrary.class);
43
        require(DALLibrary.class);
44
        require(ExporttoSwingLibrary.class);
45
    }
46

  
47
    @Override
48
    protected void doInitialize() throws LibraryException {
49
        I18nManager i18nManager = ToolsLocator.getI18nManager();
50
        i18nManager.addResourceFamily(
51
                "org.gvsig.exportto.swing.prov.lidar",
52
                ExporttoLASProviderLibrary.class.getClassLoader(),
53
                ExporttoLASProviderLibrary.class.getClass().getName()
54
        );
55
    }
56

  
57
    @Override
58
    protected void doPostInitialize() throws LibraryException {
59
        ProviderManager providerManager = ExporttoSwingProviderLocator.getManager();
60
        providerManager.addProviderFactory(new ExporttoLASProviderFactory());
61
    }
62

  
63
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/prov/lidar/ExporttoLASService.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.exportto.swing.prov.lidar;
24

  
25
import java.io.File;
26
import java.util.Date;
27
import java.util.HashMap;
28
import java.util.List;
29

  
30
import org.cresques.cts.ICoordTrans;
31
import org.cresques.cts.IProjection;
32
import org.gvsig.exportto.ExporttoService;
33
import org.gvsig.exportto.ExporttoServiceException;
34
import org.gvsig.exportto.ExporttoServiceFinishAction;
35
import org.gvsig.fmap.dal.DALLocator;
36
import org.gvsig.fmap.dal.DataManager;
37
import org.gvsig.fmap.dal.DataStoreParameters;
38
import org.gvsig.fmap.dal.DataTypes;
39
import org.gvsig.fmap.dal.exception.DataException;
40
import org.gvsig.fmap.dal.feature.EditableFeature;
41
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor;
42
import org.gvsig.fmap.dal.feature.EditableFeatureType;
43
import org.gvsig.fmap.dal.feature.Feature;
44
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
45
import org.gvsig.fmap.dal.feature.FeatureReference;
46
import org.gvsig.fmap.dal.feature.FeatureSet;
47
import org.gvsig.fmap.dal.feature.FeatureStore;
48
import org.gvsig.fmap.dal.feature.FeatureType;
49
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorer;
50
import org.gvsig.fmap.dal.serverexplorer.filesystem.FilesystemServerExplorerParameters;
51
import org.gvsig.fmap.geom.Geometry;
52
import org.gvsig.fmap.geom.primitive.Envelope;
53
import org.gvsig.fmap.geom.type.GeometryType;
54
import org.gvsig.lidar.prov.LASDataStoreParameters;
55
import org.gvsig.lidar.prov.jgrasstools.JGrassLASDataStoreProvider;
56
import org.gvsig.lidar.prov.jgrasstools.JGrassLASWriter;
57
import org.gvsig.timesupport.Instant;
58
import org.gvsig.timesupport.Interval;
59
import org.gvsig.tools.dispose.DisposableIterator;
60
import org.gvsig.tools.dispose.DisposeUtils;
61
import org.gvsig.tools.dynobject.DynObject;
62
import org.gvsig.tools.evaluator.EvaluatorData;
63
import org.gvsig.tools.task.AbstractMonitorableTask;
64
import org.slf4j.Logger;
65
import org.slf4j.LoggerFactory;
66
import org.gvsig.exportto.swing.prov.lidar.ExporttoLASOptions;
67

  
68
/**
69
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
70
 *
71
 */
72
public class ExporttoLASService extends AbstractMonitorableTask implements
73
        ExporttoService {
74

  
75
    private static final Logger logger = LoggerFactory.getLogger(ExporttoLASService.class);
76

  
77
    public static final int CHECK_NONE = 0;
78
    public static final int CHECK_IF_CORRUPT = 1;
79
    public static final int CHECK_IF_VALID = 2;
80

  
81
    public static final int ACTION_SET_GEOMETRY_TO_NULL = 0;
82
    public static final int ACTION_SKIP_FEATURE = 1;
83
    public static final int ACTION_ABORT = 2;
84

  
85
    private ExporttoServiceFinishAction exporttoServiceFinishAction = null;
86
    private ExporttoLASOptions options;
87

  
88
    public ExporttoLASService(ExporttoLASOptions options) {
89
        this.options = options;
90
    }
91

  
92

  
93
    public void export(FeatureSet featureSet) throws ExporttoServiceException {
94
    	File outFile = this.options.getOutputFile();
95
        DisposableIterator it = null;
96
        try {
97
        	
98
        	
99
            // ======================================
100
            // Reprojection 
101
            FeatureAttributeDescriptor geo_att = this.options.getSource().getDefaultFeatureType().getDefaultGeometryAttribute();
102
            IProjection sourceProjection = null;
103
            ICoordTrans coord_trans = null;
104
            Geometry reproj_geom = null;
105
            Envelope filterEnvelope = this.options.getFilterEnvelope();
106
            
107
            if (geo_att != null) {
108
                sourceProjection = geo_att.getSRS();
109
                // FIXME: we should get the transformation from the options and not from the layer projection.
110
                // If the layer contains a CT, it has been set to convert from layer to view projection,
111
                // which is not necessarily the right one for the target export projection.
112
                // We will be able to improve these corner cases when the new CRS API is fully implemented
113
                if (sourceProjection != null && sourceProjection != this.options.getTargetProjection()) {
114
                    coord_trans = sourceProjection.getCT(this.options.getTargetProjection());
115
                }
116
            }
117
            
118
            // ============================================
119

  
120
            LASDataStoreParameters openParams = new LASDataStoreParameters(JGrassLASDataStoreProvider.NAME);
121
            openParams.setFile(outFile);
122
            openParams.setCRS(this.options.getTargetProjection());
123

  
124
            FeatureType sourceFeatureType = featureSet.getDefaultFeatureType();
125
            
126
            Envelope outEnvelope = null;
127
            if (coord_trans!=null) {
128
            	outEnvelope = this.options.getSource().getEnvelope().convert(coord_trans);
129
            }
130
            else {
131
            	outEnvelope = this.options.getSource().getEnvelope();
132
            }
133
            
134
            JGrassLASWriter writer = new JGrassLASWriter(openParams, sourceFeatureType, outEnvelope);            
135
            writer.open();
136
            
137
            int featureCount = 1;
138
            taskStatus.setRangeOfValues(0, featureSet.getSize());
139
            logger.debug("Inserting rows");
140
            taskStatus.message("Inserting rows");
141
            it = featureSet.fastIterator();
142
            while (it.hasNext()) {
143
                Feature feature = (Feature) it.next();
144
                this.taskStatus.setCurValue(featureCount);
145
                Geometry geometry = feature.getDefaultGeometry();
146
                if (filterEnvelope==null
147
                		|| filterEnvelope.intersects(geometry)) {
148
                	// ================================================
149
                	// Reprojection 
150
                	if (geometry != null && 
151
                			geo_att != null && coord_trans != null) {
152
                		CustomFeatureImpl customFeature = new CustomFeatureImpl(feature);
153
                		reproj_geom = geometry.cloneGeometry();
154
                		reproj_geom.reProject(coord_trans);
155
                		customFeature.setDefaultGeometry(reproj_geom);
156
                		feature = customFeature;
157
                	}
158
                	// ================================================
159
                    writer.write(feature);
160
                }
161

  
162
                if (this.taskStatus.isCancellationRequested()) {
163
                    return;
164
                }
165
                featureCount++;
166
            }
167
            writer.close();
168

  
169
            finishAction(this.options.getOutputFile().getName(), this.options.getOutputFile(), this.options.getTargetProjection());
170
            taskStatus.message("Exportation finished");
171

  
172
        } catch (Exception e) {
173
            logger.warn("Can't export data.", e);
174
            taskStatus.message("Problems exporting data");
175
            throw new ExporttoServiceException(e);
176

  
177
        } finally {
178
        	DisposeUtils.disposeQuietly(it);
179
        	DisposeUtils.disposeQuietly(featureSet);
180
            this.taskStatus.terminate();
181
            this.taskStatus.remove();
182
        }
183
    }
184
    
185
    protected void finishAction(String layerName, File out_file, IProjection proj)
186
    throws ExporttoServiceException {
187

  
188
        if (exporttoServiceFinishAction != null) {
189
            /*
190
             * Export is done. We notify with a SHPStoreParameters,
191
             * not with the NewSHPParameters we have used:
192
             */
193
        	DataStoreParameters las_params = null;
194
        	
195
            try {
196
            	las_params = DALLocator.getDataManager().createStoreParameters(JGrassLASDataStoreProvider.NAME);
197
            	las_params.setDynValue("file", out_file);
198
            	las_params.setDynValue("CRS", proj);
199

  
200
            	las_params.validate();
201
            } catch (Exception e) {
202
                throw new ExporttoServiceException(e);
203
            }
204
            exporttoServiceFinishAction.finished(layerName, las_params);
205
        }
206
    }
207

  
208
    public void setFinishAction(
209
            ExporttoServiceFinishAction exporttoServiceFinishAction) {
210
        this.exporttoServiceFinishAction = exporttoServiceFinishAction;
211
    }
212
    
213
    /**
214
     * Incomplete implementation of editable feature, only used to feed
215
     * reprojected features to the LAS Writer
216
     * 
217
     * @author cesar
218
     *
219
     */
220
    protected class CustomFeatureImpl implements Feature {
221
    	private Feature feature;
222
    	private Geometry theGeom;
223
    	private String defaultGeomName;
224
    	private int defaultGeomIndex;
225
    	
226
    	public CustomFeatureImpl(Feature feat) {
227
    		this.feature = feat;
228
    		this.defaultGeomName = feat.getType().getDefaultGeometryAttributeName();
229
    		this.defaultGeomIndex = feat.getType().getDefaultGeometryAttributeIndex();
230
    	}
231

  
232
		public FeatureReference getReference() {
233
			throw new UnsupportedOperationException();
234
		}
235

  
236
		public FeatureType getType() {
237
			return feature.getType();
238
		}
239

  
240
		public Feature getCopy() {
241
			CustomFeatureImpl copy = new CustomFeatureImpl(feature.getCopy());
242
			copy.setDefaultGeometry(theGeom);
243
			return copy;
244
		}
245

  
246
		public void validate(int mode) throws DataException {
247
			feature.validate(mode);
248
		}
249
		public EditableFeature getEditable() {
250
			return feature.getEditable();
251
		}
252
		public Object get(String name) {
253
			if (name.equals(defaultGeomName) && theGeom!=null) {
254
				return theGeom;
255
			}
256
			return feature.get(name);
257
		}
258
		public Object get(int index) {
259
			if (index==defaultGeomIndex && theGeom!=null) {
260
				return theGeom;
261
			}
262
			return feature.get(index);
263
		}
264
		public int getInt(String name) {
265
			return feature.getInt(name);
266
		}
267
		public int getInt(int index) {
268
			return feature.getInt(index);
269
		}
270
		public boolean getBoolean(String name) {
271
			return feature.getBoolean(name);
272
		}
273
		public boolean getBoolean(int index) {
274
			return feature.getBoolean(index);
275
		}
276
		public long getLong(String name) {
277
			return feature.getLong(name);
278
		}
279
		public long getLong(int index) {
280
			return feature.getLong(index);
281
		}
282
		public float getFloat(String name) {
283
			return feature.getFloat(name);
284
		}
285
		public float getFloat(int index) {
286
			return feature.getFloat(index);
287
		}
288
		public double getDouble(String name) {
289
			return feature.getDouble(name);
290
		}
291
		public double getDouble(int index) {
292
			return feature.getDouble(index);
293
		}
294
		public Date getDate(String name) {
295
			return feature.getDate(name);
296
		}
297
		public Date getDate(int index) {
298
			return feature.getDate(index);
299
		}
300
		public String getString(String name) {
301
			return feature.getString(name);
302
		}
303
		public String getString(int index) {
304
			return feature.getString(index);
305
		}
306
		public byte getByte(String name) {
307
			return feature.getByte(name);
308
		}
309
		public byte getByte(int index) {
310
			return feature.getByte(index);
311
		}
312
		public Geometry getGeometry(String name) {
313
			if (name.equals(this.defaultGeomName) && theGeom!=null) {
314
				return theGeom;
315
			}
316
			return feature.getGeometry(name);
317
		}
318
		public Geometry getGeometry(int index) {
319
			if (index==defaultGeomIndex && theGeom!=null) {
320
				return theGeom;
321
			}
322
			return feature.getGeometry(index);
323
		}
324
		public Object[] getArray(String name) {
325
			return feature.getArray(name);
326
		}
327
		public Object[] getArray(int index) {
328
			return feature.getArray(index);
329
		}
330
		public Feature getFeature(String name) {
331
			return feature.getFeature(name);
332
		}
333
		public Feature getFeature(int index) {
334
			return feature.getFeature(index);
335
		}
336
		public Envelope getDefaultEnvelope() {
337
			return feature.getDefaultEnvelope();
338
		}
339
		public Geometry getDefaultGeometry() {
340
			if (theGeom!=null) {
341
				return theGeom;
342
			}
343
			return feature.getDefaultGeometry();
344
		}
345
		public void setDefaultGeometry(Geometry geom) {
346
			this.theGeom = geom;
347
		}
348
		public List getGeometries() {
349
			throw new UnsupportedOperationException();
350
		}
351
		public IProjection getDefaultSRS() {
352
			return feature.getDefaultSRS();
353
		}
354
		public List getSRSs() {
355
			return feature.getSRSs();
356
		}
357
		public Instant getInstant(int index) {
358
			return feature.getInstant(index);
359
		}
360
		public Instant getInstant(String name) {
361
			return feature.getInstant(name);
362
		}
363
		public Interval getInterval(int index) {
364
			return feature.getInterval(index);
365
		}
366
		public Interval getInterval(String name) {
367
			return feature.getInterval(name);
368
		}
369
		public DynObject getAsDynObject() {
370
			return feature.getAsDynObject();
371
		}
372
		public EvaluatorData getEvaluatorData() {
373
			return feature.getEvaluatorData();
374
		}
375
		
376
		public FeatureStore getStore() {
377
			return feature.getStore();
378
		}
379
    }
380

  
381

  
382
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/prov/lidar/ExporttoLASProviderFactory.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.exportto.swing.prov.lidar;
24

  
25
import org.cresques.cts.IProjection;
26
import org.gvsig.exportto.swing.ExporttoSwingManager;
27
import org.gvsig.exportto.swing.spi.AbstractExporttoProviderFactory;
28
import org.gvsig.fmap.dal.feature.FeatureStore;
29
import org.gvsig.i18n.Messages;
30
import org.gvsig.tools.dynobject.DynObject;
31
import org.gvsig.tools.service.ServiceException;
32
import org.gvsig.tools.service.spi.Provider;
33
import org.gvsig.tools.service.spi.ProviderServices;
34

  
35
/**
36
 * Factory of file {@link ExportoProvider} objects.
37
 * 
38
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
39
 */
40
public class ExporttoLASProviderFactory extends
41
        AbstractExporttoProviderFactory {
42

  
43
    private static final String PROVIDER_NAME = "LAS";
44

  
45
    public ExporttoLASProviderFactory() {
46
        super(new int[]{
47
            ExporttoSwingManager.VECTORIAL_TABLE_WITHOUT_GEOMETRY,
48
            ExporttoSwingManager.VECTORIAL_TABLE_WITH_GEOMETRY});
49
    }
50

  
51
    public String getName() {
52
        return PROVIDER_NAME;
53
    }
54

  
55
    public String getDescription() {
56
        return Messages.getText("general_exporter_description",
57
                new String[]{"LAS file"});
58
    }
59

  
60
    public String getLabel() {
61
        return Messages.getText("general_exporter_label",
62
                new String[]{"LAS file"});
63
    }
64

  
65

  
66
    public Provider create(DynObject parameters, ProviderServices services) throws ServiceException {
67
        return new ExporttoLASProvider(services,
68
                (FeatureStore) parameters.getDynValue(PARAMETER_FEATURESTORE),
69
                (IProjection) parameters.getDynValue(PARAMETER_PROJECTION));
70
    }
71

  
72
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/panel/SelectEnvelopeOptionPanel.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.exportto.swing.panel;
24

  
25
import java.awt.BorderLayout;
26
import java.awt.Component;
27
import java.io.File;
28

  
29
import javax.swing.JComponent;
30
import javax.swing.JOptionPane;
31
import javax.swing.JPanel;
32

  
33
import org.cresques.cts.ICoordTrans;
34
import org.cresques.cts.IProjection;
35
import org.gvsig.app.ApplicationLocator;
36
import org.gvsig.app.project.documents.Document;
37
import org.gvsig.app.project.documents.view.BaseViewDocument;
38
import org.gvsig.exportto.swing.ExporttoSwingLocator;
39
import org.gvsig.exportto.swing.ExporttoSwingManager;
40
import org.gvsig.exportto.swing.spi.ExporttoPanelValidationException;
41
import org.gvsig.exportto.swing.spi.ExporttoSwingProviderPanel;
42
import org.gvsig.fmap.dal.exception.DataException;
43
import org.gvsig.fmap.dal.feature.FeatureStore;
44
import org.gvsig.fmap.geom.Geometry;
45
import org.gvsig.fmap.geom.GeometryLocator;
46
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
47
import org.gvsig.fmap.geom.primitive.Envelope;
48
import org.gvsig.fmap.mapcontext.MapContext;
49
import org.gvsig.gui.beans.coordinatespanel.CoordinatesPanel;
50
import org.gvsig.i18n.Messages;
51
import org.gvsig.tools.locator.LocatorException;
52

  
53
/**
54
 * @author gvSIG Team
55
 * @version $Id$
56
 * 
57
 */
58
public class SelectEnvelopeOptionPanel extends JPanel implements ExporttoSwingProviderPanel {
59
	private static final long serialVersionUID = -729071840887099236L;
60

  
61
	private JPanel optionsPanel;
62

  
63
    private static final ExporttoSwingManager EXPORTTO_SWING_MANAGER =
64
        ExporttoSwingLocator.getSwingManager();
65

  
66
    private SelectEnvelopePanel panel;
67

  
68
    /**
69
     * @param dataSourceSRS Data source SRS, used to transform the View
70
     * envelope to the data source projection, if View and data source
71
     * use different projection
72
     */
73
    public SelectEnvelopeOptionPanel(IProjection dataSourceSRS) {
74
        this(dataSourceSRS, null);
75
    }
76

  
77
    /**
78
     * @param dataSourceSRS Data source SRS, used to transform the View
79
     * envelope to the data source projection, if View and data source
80
     * use different projection
81
     */
82
    public SelectEnvelopeOptionPanel(IProjection dataSourceSRS, JPanel optionsPanel) {
83
        super();
84
        this.setLayout(new BorderLayout());
85
        Document d = ApplicationLocator.getManager().getActiveDocument();
86
        if (d instanceof BaseViewDocument) {
87
        	BaseViewDocument view = (BaseViewDocument) d;
88
        	MapContext mc = view.getMapContext();
89
        	ICoordTrans viewTolayerCT = getViewToSourceCoordTrans(dataSourceSRS, mc.getProjection());
90
        	panel = new SelectEnvelopePanel(view.getMapContext(), viewTolayerCT);
91
        }
92
        else {
93
        	panel = new SelectEnvelopePanel();
94
        }
95
        
96
        add(panel, BorderLayout.NORTH);
97
        if (optionsPanel != null) {
98
            optionsPanel.setBorder(javax.swing.BorderFactory
99
                .createCompoundBorder(javax.swing.BorderFactory
100
                    .createTitledBorder(Messages.getText("options")),
101
                    javax.swing.BorderFactory.createEmptyBorder(10, 5, 5, 5)));
102
            add(optionsPanel, BorderLayout.CENTER);
103
            this.optionsPanel = optionsPanel;
104
        }
105
    }
106
    
107
    protected ICoordTrans getViewToSourceCoordTrans(IProjection sourceSrs,
108
    		IProjection viewSrs) {
109
    	ICoordTrans trans = null;
110
    	try {
111
			/***
112
			 * We get the CT from the sourceSRS and then then inverted because
113
			 * data source to View transform is usually stored in the sourceSrs
114
			 * and not in the view SRS
115
			 */
116
			trans = sourceSrs.getCT(viewSrs).getInverted();
117
		} catch (Exception e) {}
118
    	return trans;
119
    }
120

  
121
    public String getPanelTitle() {
122
        return EXPORTTO_SWING_MANAGER.getTranslation("Filter_by_envelope");
123
    }
124

  
125
    public Envelope getEnvelope() {
126
    	
127
    	return panel.getEnvelope();
128
    }
129

  
130
    public void enterPanel() {
131
        // Default do nothing
132
    }
133
    
134
    public boolean isValidPanel() throws ExporttoPanelValidationException {
135
        return true;
136
    }
137

  
138
    /**
139
     * @return the optionsPanel
140
     */
141
    public JPanel getOptionsPanel() {
142
        return optionsPanel;
143
    }
144

  
145
    public JComponent asJComponent() {
146
        return this;
147
    }
148
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/exportto/swing/panel/SelectEnvelopePanel.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2016 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it under
7
 * the terms of the GNU General Public License as published by the Free Software
8
 * Foundation; either version 3 of the License, or (at your option) any later
9
 * version.
10
 *
11
 * This program is distributed in the hope that it will be useful, but WITHOUT
12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14
 * details.
15
 *
16
 * You should have received a copy of the GNU General Public License along with
17
 * this program; if not, write to the Free Software Foundation, Inc., 51
18
 * Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us at info AT
21
 * gvsig.com, or visit our website www.gvsig.com.
22
 */
23

  
24
package org.gvsig.exportto.swing.panel;
25

  
26
import java.awt.Color;
27
import java.awt.GridBagConstraints;
28
import java.awt.GridBagLayout;
29
import java.awt.Insets;
30

  
31
import javax.swing.BorderFactory;
32
import javax.swing.ButtonGroup;
33
import javax.swing.JPanel;
34
import javax.swing.JRadioButton;
35

  
36
import org.cresques.cts.ICoordTrans;
37
import org.gvsig.fmap.geom.Geometry;
38
import org.gvsig.fmap.geom.GeometryLocator;
39
import org.gvsig.fmap.geom.exception.CreateEnvelopeException;
40
import org.gvsig.fmap.geom.primitive.Envelope;
41
import org.gvsig.fmap.mapcontext.MapContext;
42
import org.gvsig.gui.beans.coordinatespanel.CoordinatesPanel;
43
import org.gvsig.tools.ToolsLocator;
44
import org.gvsig.tools.i18n.I18nManager;
45
import org.gvsig.tools.locator.LocatorException;
46

  
47
/**
48
 * A panel to select an envelope from different options:
49
 * - original data source envelope
50
 * - visible extent of the provided View (MapContext)
51
 * - user defined Envelope
52
 */
53
public class SelectEnvelopePanel extends JPanel {
54
	I18nManager trans = ToolsLocator.getI18nManager();
55

  
56
	private JRadioButton btnOriginalEnvelope = null;
57
	private JRadioButton btnViewEnvelope = null;
58
	private JRadioButton btnUserDefinedEnvelope = null;
59
	private ButtonGroup group = null;
60

  
61
	private CoordinatesPanel btnPnlDefinedEnvelope;
62

  
63
	private MapContext mapContext = null;
64
	private ICoordTrans viewTolayerCT = null;
65

  
66
	private static final long serialVersionUID = 4179360502906000062L;
67

  
68
	/**
69
	 * When using this constructor, the View extent will not be
70
	 * available.
71
	 */
72
	public SelectEnvelopePanel() {
73
		initComponents();
74
	}
75

  
76
    /**
77
     * Preferred constructor.
78
     * 
79
     * @param mapcontext The MapContext to get the View envelope
80
     * @param viewTolayerCT A coordinate transform to transform the
81
     * view envelope from view projection coordinates to layer
82
     * projection coordinates. Can be set to null if layer and view
83
     * have the same projection.
84
     */
85
	public SelectEnvelopePanel(MapContext mapContext, ICoordTrans viewTolayerCT) {
86
		this.mapContext = mapContext;
87
		this.viewTolayerCT = viewTolayerCT;
88
		initComponents();
89
	}
90
	
91
	private void initComponents() {
92
		this.setLayout(new GridBagLayout());
93
		group = new ButtonGroup();
94
		GridBagConstraints constraints = new GridBagConstraints();
95
		constraints.gridx = 0;
96
		constraints.gridy = 0;
97
		constraints.anchor = GridBagConstraints.WEST;
98
		constraints.fill = GridBagConstraints.HORIZONTAL;
99
		constraints.insets = new Insets(5, 5, 5, 5);
100
		this.add(getBtnOriginalEnvelope(), constraints);
101
		getBtnOriginalEnvelope().setSelected(true);
102
		if (mapContext!=null) {
103
			constraints.gridy++;
104
			this.add(getBtnViewEnvelope(), constraints);
105
		}
106
		constraints.gridy++;
107
		this.add(getBtnUserDefinedEnvelope(), constraints);
108
		constraints.gridy++;
109
		constraints.ipadx = 30;
110
		this.add(getPnlUserDefinedEnvelope(), constraints);
111
	}
112
	
113
	private JRadioButton getBtnOriginalEnvelope() {
114
		if (btnOriginalEnvelope==null) {
115
			String text = trans.getTranslation("Do_not_filter_by_envelope");
116
			btnOriginalEnvelope  = new JRadioButton(text);
117
			group.add(btnOriginalEnvelope);
118
		}
119
		return btnOriginalEnvelope;
120
	}
121
	
122
	private JRadioButton getBtnViewEnvelope() {
123
		if (btnViewEnvelope==null) {
124
			String text = trans.getTranslation("Use_View_envelope");
125
			btnViewEnvelope  = new JRadioButton(text);
126
			group.add(btnViewEnvelope);
127
		}
128
		return btnViewEnvelope;
129
	}
130
	
131
	private JRadioButton getBtnUserDefinedEnvelope() {
132
		if (btnUserDefinedEnvelope==null) {
133
			String text = trans.getTranslation("Use_custom_envelope_(coordinates_using_data_source_projection)");
134
			btnUserDefinedEnvelope  = new JRadioButton(text);
135
			group.add(btnUserDefinedEnvelope);
136
		}
137
		return btnUserDefinedEnvelope;
138
	}
139
	
140
	private CoordinatesPanel getPnlUserDefinedEnvelope() {
141
		if (btnPnlDefinedEnvelope==null) {
142
			btnPnlDefinedEnvelope = new CoordinatesPanel();
143
		}
144
		return btnPnlDefinedEnvelope;
145
	}
146
	
147
	
148
	public Envelope getEnvelope() {
149
		if (getBtnViewEnvelope().isSelected()) {
150
			if (this.mapContext!=null) {
151
				Envelope envelope = this.mapContext.getViewPort().getEnvelope();
152
				if (viewTolayerCT!=null) {
153
					envelope = envelope.convert(viewTolayerCT);
154
				}
155
				return envelope;
156
			}
157
		}
158
		else if (getBtnUserDefinedEnvelope().isSelected()){
159
	    	double minX = string2double(getPnlUserDefinedEnvelope().getValue11());
160
	    	double minY = string2double(getPnlUserDefinedEnvelope().getValue22());
161
	    	double maxX = string2double(getPnlUserDefinedEnvelope().getValue21());
162
	    	double maxY = string2double(getPnlUserDefinedEnvelope().getValue12());
163
	    	try {
164
				return GeometryLocator.getGeometryManager().createEnvelope(minX, minY, maxX, maxY, Geometry.SUBTYPES.GEOM2D);
165
			} catch (LocatorException e) {
166
				// TODO Auto-generated catch block
167
				e.printStackTrace();
168
			} catch (CreateEnvelopeException e) {
169
				// TODO Auto-generated catch block
170
				e.printStackTrace();
171
			}
172
		}
173
    	return null;
174
    }
175
	
176
    /**
177
     * Tries to parse a string as a double 
178
     * @return
179
     */
180
    public double string2double(String strDouble) {
181
    	try {
182
    		return Double.valueOf(strDouble).doubleValue();
183
    	}
184
    	catch (Exception e) {}
185
    	// assume comma was used as decimal separator
186
    	String replaced = strDouble.replaceAll(".", "");
187
    	replaced = replaced.replaceAll(",", ".");
188
    	try {
189
    		return Double.valueOf(strDouble).doubleValue();
190
    	}
191
    	catch (Exception e) {}
192
    	
193
    	// return 0.0 if no valid number could be decoded
194
    	return 0.0d;
195
    }
196
	
197
	
198

  
199
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/java/org/gvsig/lidar/app/mainplugin/LIDARExtension.java
1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright ? 2007-2016 gvSIG Association
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.lidar.app.mainplugin;
25

  
26
import org.gvsig.andami.plugins.Extension;
27

  
28
/**
29
 * @author <a href="mailto:cmartinez@scolab.es">Cesar Martinez Izquierdo</a>
30
 *
31
 */
32
public class LIDARExtension extends Extension {
33
    
34
    @Override
35
    public void execute(String arg0) {
36
    }
37

  
38
    @Override
39
    public void initialize() {
40
    }
41

  
42
    @Override
43
    public boolean isEnabled() {
44
        return false;
45
    }
46

  
47
    @Override
48
    public boolean isVisible() {
49
        return false;
50
    }
51

  
52
}
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources-plugin/README_en.txt
1
org.gvsig.lidar
2
===============
3

  
4
org.gvsig.lidar is a provider to read and write LAS files on gvSIG, as
5
defined by LAS specification:
6
https://www.asprs.org/committee-general/laser-las-file-format-exchange-activities.html
7

  
8
The plugin is designed to work on gvSIG 2.2 and 2.3. It requires gvSIG to be
9
executed with a Java JVM version 8.0 or higher, as the libraries it uses
10
require Java 8.0.
11

  
12
LAS files are dessigned to store clouds of 3D points captured using LIDAR
13
sensors. They have a set of mandatory fields and set of optional ones,
14
depending on the point data format specified on the LAS header.
15

  
16
The following mandatory fields are exposed as layer fields by the DAL
17
providers:
18
- CLASSIFICATION
19
- POINTX (x coordinate of the point)
20
- POINTY (y coordinate of the point)
21
- POINTZ (z coordinate of the point, useful to symbolize terrain elevation)
22
- INTENSITY
23
- RETURNNUM (return number)
24
- NUMBEROFRETURNS (number of returns)
25

  
26
The following optional fields are exposed as layer fields by the DAL
27
providers when available on the LAS file:
28
- COLOR (point color expressed as an RGB Java long)
29
- TIME (absolute capture time as a long integer, as generated by Data.getTime())
30
- WEEKTIME (relative capture time, expressed as GPS week time)
31

  
32
org.gvsig.lidar provides 2 different LAS drivers, based on 2 different
33
libraries:
34
- The JGrasstools-based provider is a read/write driver. It will use
35
  the C-based libLas library if available on the native library path,
36
  and it will use a pure Java implementation if libLAS is not available
37
  or not successfully loaded. Note that only the Java version has been
38
  tested.
39
- The Whitebox-based provider is a pure Java read-only driver. It currently
40
  performs better than the JGrasstools Java-based one.
41

  
42
Both drivers include 2 thinning (simplification) parameters, in order to
43
read a subset of the total available points on the LAS file:
44
- thinningDivisor: reads 1 of every n points (1/n), e.g. thinningDivisor=10
45
  loads 10% of total points
46
- thinningResolution: Loads n points per square map unit, e.g.
47
  thinningResolution=0.0001 loads 0.0001 points/m2 (assumming that the units
48
  of the projection of the example layer are metres), which is the same
49
  as 100 points/km2
50

  
51
Note that thinningDivisor is ignored when thinningResolution is > 0.
52
The thinning is useful to quickly render huge files on smaller scales.
53

  
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources-plugin/i18n/text.properties
1
Use_custom_envelope_\(coordinates_using_data_source_projection\)=Use custom envelope \(coordinates using data source projection\)
2
error_creating_properties_panel= Error creando panel de propiedades
3
error_getting_selected_layer_properties = Error al obtener las propiedades de la capas seleccionadas 
4
Do_not_filter_by_envelope=No filtrar por extensi?n geom?trica
5
Use_View_envelope=Usar extensi?n geom?trica de la Vista
6
Use_custom_envelope_\(coordinates_using_data_source_projection\)=Usar extensi?n personalizada \(coordenadas expresadas en la proyecci?n de la fuente de datos\)
7
Filter_by_envelope=Filtrar por extensi?n geom?trica
8
LAS file=Fichero LAS
9
thinningDivisor=Divisor de aclarado de datos
10
thinningResolution=Resoluci?n de aclarado de datos
11
LIDAR LAS file (jgrasstools)=Fichero LIDAR LAS (jgrasstools)
12
LIDAR LAS file (whitebox)=Fichero LIDAR LAS (whitebox)
13
Loads n points per square map unit (e.g. 0.0001 points/m2 on a projected layer or 100 points/km2)=Carga n puntos por unidad cuadrada del mapa (por ejemplo 0.0001 puntos/m2 en una capa proyectada o 100 puntos/km2)
14
Loads only 1 of every n points (1/n), e.g. thinningDivisor=10 loads 10% of total points=Carga ?nicamente 1 de cada n puntos (1/n), por ejemplo thinningDivisor=10 carga el 10% de los puntos totales
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties
1
error_creating_properties_panel=Error creating properties panel
2
error_getting_selected_layer_properties = Error getting selected layer properties
3
Do_not_filter_by_envelope=Do not filter by envelope
4
Use_View_envelope=Use View envelope
5
Use_custom_envelope_\(coordinates_using_data_source_projection\)=Use custom envelope \(coordinates expressed using data source projection\)
6
Filter_by_envelope=Filter by envelope
7
LAS file=LAS file
8
thinningDivisor=Thinning divisor
9
thinningResolution=Thinning resolution
10
LIDAR LAS file (jgrasstools)=LIDAR LAS file (jgrasstools)
11
LIDAR LAS file (whitebox)=LIDAR LAS file (whitebox)
12
Loads n points per square map unit (e.g. 0.0001 points/m2 on a projected layer or 100 points/km2)=Loads n points per square map unit (e.g. 0.0001 points/m2 on a projected layer or 100 points/km2)
13
Loads only 1 of every n points (1/n), e.g. thinningDivisor=10 loads 10% of total points=Loads only 1 of every n points (1/n), e.g. thinningDivisor=10 loads 10% of total points
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources-plugin/README_es.txt
1
org.gvsig.lidar
2
===============
3

  
4
org.gvsig.lidar es un proveedor de datos para leer y escribir ficheros LAS en
5
gvSIG, siguiendo la especificación de LAS:
6
https://www.asprs.org/committee-general/laser-las-file-format-exchange-activities.html
7

  
8
El plugin está diseñado para funciontar en gvSIG 2.2 y 2.3. Requiere que gvSIG
9
se ejecute con una máquina virtual Java versión 8.0 o superior, ya que las
10
librerías que utiliza requieren Java 8.0.
11

  
12
Los ficheros LAS están diseñados para almacenar nubes de puntos 3D capturados
13
usando sensores LIDAR. Poseen un conjunto de campos obligatorios (fijos) y
14
otros opcionales que dependen de formato de datos de punto que se especifique
15
en la cabecera del fichero LAS.
16

  
17
Los siguientes campos obligatorios se exponen como campos de capa por el
18
proveedor DAL:
19
- CLASSIFICATION (clasificación de coberturas del suelo)
20
- POINTX (coordenada x del punto)
21
- POINTY (coordenada y del punto)
22
- POINTZ (coordenada z del punto, útil para simbolizar elevaciones del terreno)
23
- INTENSITY (intensidad)
24
- RETURNNUM (número de retorno del punto)
25
- NUMBEROFRETURNS (número de retornos para este pulso láser)
26

  
27
Los siguientes campos opcionales se exponen como campos de capa por el
28
proveedor DAL cuando están disponibles en el fichero LAS:
29
- COLOR (color del punto, expresado como un entero "long" de Java que
30
  contiene el valor RGB)
31
- TIME (tiempo absoluto de captura, expresado tal como genera Data.getTime())
32
- WEEKTIME (tiempo relativo de captura, expresado como tiempo GPS semanal)
33

  
34
org.gvsig.lidar proporciona 2 drivers LAS diferentes, basados en 2 librerías
35
diferentes:
36
- El proveedor basado en JGrasstools es un proveedor de lectura/escritura.
37
  Utiliza la librería basada en C libLAS si está disponible en el "library
38
  path" nativo, y utiliza una implementación en Java puro si libLAS no está
39
  disponible o no se ha cargado correctamente. Nótese que sólo se ha probado
40
  la implementación basada en Java.
41
- El proveedor basado en Whitebox es un driver de sólo lectura basado en Java
42
  puro. Actualmente ofrece mejor rendimiento que la implementación Java de
43
  JGrasstools.
44

  
45
Ambos drivers incluyen 2 parámetros de "aclarado" (simplificación), que
46
permiten leer un subconjunto del total de puntos disponibles en el fichero
47
LAS:
48
- thinningDivisor: lee 1 de cada n puntos (1/), por ejemplo thinningDivisor=10
49
  carga el 10% del total de puntos disponibles
50
- thinningResolution: Carga aproximadamente n puntos por unidad cuadrada de
51
  la capa; por ejemplo, thinningResolution=0.0001 carga 0.0001 puntos/m2
52
  (asumiendo que las unidades de la proyección de la capa de ejemplo son
53
  metros), o lo que es lo mismo, 100 puntos/km2
54

  
55
Nótese que el parámetro thinningDivisor no tiene efecto cuando
56
el parámetro thinningResolution es > 0.
57

  
58
El aclarado permite dibujar rápidamente ficheros enormes a pequeñas escalas
59
(en las que no se requiere un nivel de detalle tan elevado como el que
60
provee el fichero).
61

  
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources-plugin/config.xml
1
<?xml version="1.0" encoding="ISO-8859-1"?>
2
<plugin-config>
3
    <depends plugin-name="org.gvsig.app.mainplugin" />
4
    <depends plugin-name="org.gvsig.exportto.app.mainplugin" />
5
	<libraries library-dir="lib"/>
6
	<resourceBundle name="text"/>
7
	<extensions>
8
		<extension class-name="org.gvsig.lidar.app.mainplugin.LIDARExtension"
9
			description=""
10
			active="true"
11
			priority="1">
12
		</extension>
13
	</extensions>
14
</plugin-config>
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/src/main/resources/META-INF/services/org.gvsig.tools.library.Library
1
org.gvsig.exportto.swing.prov.lidar.ExporttoLASProviderLibrary
org.gvsig.lidar/trunk/org.gvsig.lidar/org.gvsig.lidar.app/org.gvsig.lidar.app.mainplugin/pom.xml
1
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
2
    <modelVersion>4.0.0</modelVersion>
3
    <parent>
4
        <groupId>org.gvsig</groupId>
5
        <artifactId>org.gvsig.lidar.app</artifactId>
6
        <version>1.0.1-SNAPSHOT</version>
7
    </parent>
8
    <artifactId>org.gvsig.lidar.app.mainplugin</artifactId>
9

  
10
    <dependencies>
11
        <dependency>
12
            <groupId>org.gvsig</groupId>
13
            <artifactId>org.gvsig.lidar.prov.common</artifactId>
14
        </dependency>
15
        <dependency>
16
            <groupId>org.gvsig</groupId>
17
            <artifactId>org.gvsig.lidar.prov.whitebox</artifactId>
18
        </dependency>
19
        <dependency>
20
            <groupId>org.gvsig</groupId>
21
            <artifactId>org.gvsig.lidar.prov.jgrass</artifactId>
22
        </dependency>
23
        <dependency>
24
            <groupId>org.gvsig</groupId>
25
            <artifactId>org.gvsig.andami</artifactId>
26
            <scope>compile</scope>
27
        </dependency>
28
        <dependency>
29
            <groupId>org.gvsig</groupId>
30
            <artifactId>org.gvsig.i18n</artifactId>
31
            <scope>compile</scope>
32
        </dependency>
33
        <dependency>
34
            <groupId>org.gvsig</groupId>
35
            <artifactId>org.gvsig.tools.lib</artifactId>
36
            <scope>compile</scope>
37
        </dependency>
38
        <dependency>
39
            <groupId>org.gvsig</groupId>
40
            <artifactId>org.gvsig.app.mainplugin</artifactId>
41
            <scope>compile</scope>
42
        </dependency>
43
        <dependency>
44
            <groupId>whitebox</groupId>
45
            <artifactId>whitebox-api</artifactId>
46
            <scope>compile</scope>
47
        </dependency>
48
        <dependency>
49
            <groupId>org.jgrasstools</groupId>
50
            <artifactId>jgt-jgrassgears</artifactId>
51
            <scope>compile</scope>
52
        </dependency>
53
        <dependency>
54
            <groupId>net.java.dev.jna</groupId>
55
            <artifactId>jna</artifactId>
56
            <scope>compile</scope>
57
        </dependency>
58
        <dependency>
59
          <groupId>org.gvsig</groupId>
60
          <artifactId>org.gvsig.exportto.swing.api</artifactId>
61
          <scope>compile</scope>
62
        </dependency>
63
        <dependency>
64
          <groupId>org.gvsig</groupId>
65
          <artifactId>org.gvsig.exportto.swing.spi</artifactId>
66
          <scope>compile</scope>
67
        </dependency>
68
        <dependency>
69
          <groupId>org.gvsig</groupId>
70
          <artifactId>org.gvsig.exportto.swing.prov.file</artifactId>
71
          <scope>compile</scope>
72
        </dependency>
73
        <dependency>
74
          <groupId>org.gvsig</groupId>
75
          <artifactId>org.gvsig.tools.swing.api</artifactId>
76
          <scope>compile</scope>
77
        </dependency>
78
	<dependency>
79
		<groupId>org.opengis</groupId>
80
		<artifactId>geoapi</artifactId>
81
          	<scope>compile</scope>
82
	</dependency>
83

  
84
    </dependencies>
85
    <properties>
86
        <!-- Package info property values -->
87
        <!-- Default values in org.gvsig.desktop -->
88
        <gvsig.install.plugin.package>true</gvsig.install.plugin.package>
89
        <gvsig.install.plugin>true</gvsig.install.plugin>
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff