Revision 15
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.lib/org.gvsig.lrs.lib.impl/src/main/java/org/gvsig/lrs/lib/impl/LrsCreateRouteAlgorithm.java | ||
---|---|---|
22 | 22 |
*/ |
23 | 23 |
package org.gvsig.lrs.lib.impl; |
24 | 24 |
|
25 |
import java.io.File; |
|
25 | 26 |
import java.util.ArrayList; |
26 | 27 |
import java.util.HashMap; |
27 | 28 |
import java.util.Iterator; |
28 | 29 |
import java.util.List; |
29 | 30 |
import java.util.Map; |
31 |
import java.util.Map.Entry; |
|
30 | 32 |
|
31 |
import org.slf4j.Logger; |
|
32 |
import org.slf4j.LoggerFactory; |
|
33 |
|
|
33 |
import org.gvsig.fmap.dal.DALLocator; |
|
34 |
import org.gvsig.fmap.dal.DataManager; |
|
35 |
import org.gvsig.fmap.dal.DataServerExplorer; |
|
36 |
import org.gvsig.fmap.dal.DataServerExplorerParameters; |
|
37 |
import org.gvsig.fmap.dal.DataStore; |
|
38 |
import org.gvsig.fmap.dal.DataStoreParameters; |
|
39 |
import org.gvsig.fmap.dal.DataTypes; |
|
34 | 40 |
import org.gvsig.fmap.dal.exception.DataException; |
41 |
import org.gvsig.fmap.dal.feature.EditableFeature; |
|
42 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
|
43 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
|
35 | 44 |
import org.gvsig.fmap.dal.feature.Feature; |
36 | 45 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
37 | 46 |
import org.gvsig.fmap.dal.feature.FeatureReference; |
38 | 47 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
48 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
|
39 | 49 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
40 | 50 |
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters; |
51 |
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters; |
|
41 | 52 |
import org.gvsig.fmap.geom.Geometry; |
42 | 53 |
import org.gvsig.fmap.geom.GeometryLocator; |
43 | 54 |
import org.gvsig.fmap.geom.GeometryManager; |
... | ... | |
49 | 60 |
import org.gvsig.fmap.geom.primitive.Envelope; |
50 | 61 |
import org.gvsig.fmap.geom.primitive.Line; |
51 | 62 |
import org.gvsig.fmap.geom.primitive.Point; |
63 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
52 | 64 |
import org.gvsig.lrs.lib.api.LrsAlgorithm; |
53 | 65 |
import org.gvsig.lrs.lib.api.LrsAlgorithmParams; |
54 | 66 |
import org.gvsig.lrs.lib.api.LrsCoordinatesPriority; |
... | ... | |
57 | 69 |
import org.gvsig.lrs.lib.api.exceptions.LrsCreateRouteException; |
58 | 70 |
import org.gvsig.lrs.lib.api.exceptions.LrsException; |
59 | 71 |
import org.gvsig.tools.ToolsLocator; |
72 |
import org.gvsig.tools.dataTypes.DataType; |
|
60 | 73 |
import org.gvsig.tools.exception.BaseException; |
61 | 74 |
import org.gvsig.tools.i18n.I18nManager; |
62 | 75 |
import org.gvsig.tools.service.Manager; |
63 | 76 |
import org.gvsig.tools.task.SimpleTaskStatus; |
64 | 77 |
import org.gvsig.tools.visitor.VisitCanceledException; |
65 | 78 |
import org.gvsig.tools.visitor.Visitor; |
79 |
import org.slf4j.Logger; |
|
80 |
import org.slf4j.LoggerFactory; |
|
66 | 81 |
|
67 | 82 |
/** |
68 | 83 |
* @author fdiaz |
... | ... | |
123 | 138 |
I18nManager i18nManager = ToolsLocator.getI18nManager(); |
124 | 139 |
taskStatus.message(i18nManager.getTranslation("grouping_features")); |
125 | 140 |
|
126 |
taskStatus.setRangeOfValues(0, 100000-1); |
|
141 |
try { |
|
142 |
final String routeFieldName=idRouteField.getName(); |
|
143 |
final String fromFieldName; |
|
144 |
final DataType fromDataType; |
|
145 |
final DataType toDataType; |
|
146 |
if (fromMeasureField!=null){ |
|
147 |
fromFieldName=fromMeasureField.getName(); |
|
148 |
fromDataType=fromMeasureField.getDataType(); |
|
149 |
}else{ |
|
150 |
fromFieldName=null; |
|
151 |
fromDataType=null; |
|
152 |
} |
|
153 |
final String toFieldName; |
|
154 |
if (toMeasureField!=null){ |
|
155 |
toFieldName=toMeasureField.getName(); |
|
156 |
toDataType=toMeasureField.getDataType(); |
|
157 |
}else{ |
|
158 |
toFieldName=null; |
|
159 |
toDataType=null; |
|
160 |
} |
|
127 | 161 |
|
128 |
for (int i = 0; i < 100000; i++) { |
|
129 |
logger.info(new StringBuilder().append(i).toString()); |
|
130 |
taskStatus.setCurValue(i); |
|
131 |
if (i == 99900) { |
|
132 |
try { |
|
133 |
int infinito = i / 0; |
|
134 |
} catch (Exception e) { |
|
135 |
taskStatus.abort(); |
|
136 |
throw new LrsCreateRouteException("Error creating routes", e); |
|
162 |
|
|
163 |
DataStore newDataStore=createNewDataStore(newFeatureStoreParameters,idRouteField); |
|
164 |
|
|
165 |
FeatureSet sourceFeatures; |
|
166 |
if (sourceFeatureStore.getFeatureSelection().getSize()>0){ |
|
167 |
sourceFeatures=sourceFeatureStore.getFeatureSelection(); |
|
168 |
}else{ |
|
169 |
sourceFeatures=sourceFeatureStore.getFeatureSet(); |
|
170 |
} |
|
171 |
|
|
172 |
final Map<String,List<MStructure>> featuresMap=new HashMap<String, List<MStructure>>(); |
|
173 |
sourceFeatures.accept(new Visitor() { |
|
174 |
|
|
175 |
public void visit(Object obj) throws VisitCanceledException, BaseException { |
|
176 |
Feature feature=(Feature)obj; |
|
177 |
String routeName=(String)feature.get(routeFieldName); |
|
178 |
Geometry originalGeometry=feature.getDefaultGeometry(); |
|
179 |
Object objFrom=null; |
|
180 |
Object objTo=null; |
|
181 |
if (fromFieldName!=null){ |
|
182 |
objFrom=feature.get(fromFieldName); |
|
183 |
} |
|
184 |
if (toFieldName!=null){ |
|
185 |
objTo=feature.get(toFieldName); |
|
186 |
} |
|
187 |
if (!featuresMap.containsKey(routeName)){ |
|
188 |
featuresMap.put(routeName, new ArrayList<MStructure>()); |
|
189 |
} |
|
190 |
List<MStructure> mList=featuresMap.get(routeName); |
|
191 |
MStructure mStructure=new MStructure(); |
|
192 |
mStructure.geometry=originalGeometry; |
|
193 |
mStructure.fromField=getDouble(objFrom,fromDataType); |
|
194 |
mStructure.toField=getDouble(objTo,toDataType); |
|
195 |
mList.add(mStructure); |
|
196 |
featuresMap.put(routeName, mList); |
|
137 | 197 |
} |
198 |
}); |
|
199 |
|
|
200 |
taskStatus.setRangeOfValues(0, featuresMap.size()-1); |
|
201 |
int taskCount=0; |
|
202 |
FeatureStore featureStore=(FeatureStore)newDataStore; |
|
203 |
featureStore.edit(FeatureStore.MODE_FULLEDIT); |
|
204 |
for(Entry<String, List<MStructure>> entry : featuresMap.entrySet()) { |
|
205 |
String routeName = entry.getKey(); |
|
206 |
List<MStructure> mList = entry.getValue(); |
|
207 |
|
|
208 |
EditableFeature newFeature = featureStore.createNewFeature(true); |
|
209 |
newFeature.set(routeFieldName, routeName); |
|
210 |
Geometry route = createGeometryRoute(mList); |
|
211 |
newFeature.setDefaultGeometry(route); |
|
212 |
featureStore.update(newFeature); |
|
213 |
|
|
214 |
taskStatus.setCurValue(taskCount); |
|
215 |
taskCount++; |
|
138 | 216 |
} |
217 |
featureStore.finishEditing(); |
|
218 |
|
|
219 |
} catch (Exception e1) { |
|
220 |
taskStatus.abort(); |
|
221 |
throw new LrsCreateRouteException("Error creating routes", e1); |
|
139 | 222 |
} |
140 | 223 |
|
141 | 224 |
taskStatus.terminate(); |
... | ... | |
181 | 264 |
// } |
182 | 265 |
} |
183 | 266 |
|
267 |
|
|
268 |
private DataStore createNewDataStore(NewFeatureStoreParameters newFeatureStoreParameters,FeatureAttributeDescriptor idRouteField) |
|
269 |
throws LrsCreateRouteException{ |
|
270 |
try { |
|
271 |
SHPNewStoreParameters shapeStoreParams = (SHPNewStoreParameters)newFeatureStoreParameters; |
|
272 |
File file=shapeStoreParams.getFile(); |
|
273 |
String filePath=file.getPath().substring(0, file.getPath().lastIndexOf(File.separator)); |
|
274 |
|
|
275 |
DataManager dataManager = DALLocator.getDataManager(); |
|
276 |
DataServerExplorerParameters serverParams = |
|
277 |
dataManager.createServerExplorerParameters("FilesystemExplorer"); |
|
278 |
serverParams.setDynValue("initialpath", filePath); |
|
279 |
DataServerExplorer serverExplorer = |
|
280 |
dataManager.openServerExplorer(serverParams.getExplorerName(), serverParams); |
|
281 |
|
|
282 |
EditableFeatureType featureType = (EditableFeatureType)shapeStoreParams.getDefaultFeatureType(); |
|
283 |
featureType.add(idRouteField.getName(), idRouteField.getType(), idRouteField.getSize()); |
|
284 |
EditableFeatureAttributeDescriptor geometryField = featureType.add("Geometry", DataTypes.GEOMETRY); |
|
285 |
GeometryType geometryType = GeometryLocator.getGeometryManager().getGeometryType(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2D); |
|
286 |
geometryField.setGeometryType(geometryType); |
|
287 |
|
|
288 |
featureType.setDefaultGeometryAttributeName("Geometry"); |
|
289 |
|
|
290 |
shapeStoreParams.setDefaultFeatureType(featureType); |
|
291 |
serverExplorer.add("Shape", shapeStoreParams, true); |
|
292 |
|
|
293 |
DataStore store = dataManager.createStore(shapeStoreParams); |
|
294 |
|
|
295 |
return store; |
|
296 |
|
|
297 |
} catch (Exception e) { |
|
298 |
throw new LrsCreateRouteException("Error creating new dataStore", e); |
|
299 |
} |
|
300 |
} |
|
301 |
|
|
302 |
private Geometry createGeometryRoute(List<MStructure> mList) throws CreateGeometryException{ |
|
303 |
GeometryManager geomanager= GeometryLocator.getGeometryManager(); |
|
304 |
//TODO Must be changed to Multiline and GEOM2DM |
|
305 |
MultiLine routeGeometry= (MultiLine)geomanager.create(Geometry.TYPES.MULTICURVE, Geometry.SUBTYPES.GEOM2D); |
|
306 |
for (MStructure mStructure:mList){ |
|
307 |
Geometry geometry=mStructure.geometry; |
|
308 |
if (geometry instanceof Line){ |
|
309 |
routeGeometry.addPrimitive((Line)geometry); |
|
310 |
} |
|
311 |
if (geometry instanceof MultiLine){ |
|
312 |
MultiLine multiLine =(MultiLine) geometry; |
|
313 |
for (int i=0;i<multiLine.getPrimitivesNumber();i++){ |
|
314 |
routeGeometry.addPrimitive(multiLine.getPrimitiveAt(i)); |
|
315 |
} |
|
316 |
} |
|
317 |
} |
|
318 |
return routeGeometry; |
|
319 |
} |
|
320 |
|
|
321 |
private Double getDouble(Object obj,DataType dataType){ |
|
322 |
Double result=Double.NaN; |
|
323 |
if (dataType.equals(DataTypes.DOUBLE)){ |
|
324 |
result=(Double)obj; |
|
325 |
}else { |
|
326 |
result=Double.valueOf(String.valueOf(obj)); |
|
327 |
} |
|
328 |
return result; |
|
329 |
} |
|
330 |
|
|
331 |
|
|
332 |
|
|
333 |
|
|
334 |
|
|
184 | 335 |
/** |
185 | 336 |
* @param route |
186 | 337 |
* @return |
... | ... | |
591 | 742 |
} |
592 | 743 |
|
593 | 744 |
} |
745 |
|
|
746 |
class MStructure{ |
|
747 |
Geometry geometry; |
|
748 |
Double fromField; |
|
749 |
Double toField; |
|
750 |
} |
|
751 |
|
|
752 |
|
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.lib/org.gvsig.lrs.lib.impl/pom.xml | ||
---|---|---|
18 | 18 |
<groupId>org.gvsig</groupId> |
19 | 19 |
<artifactId>org.gvsig.fmap.dal.api</artifactId> |
20 | 20 |
</dependency> |
21 |
<dependency> |
|
22 |
<groupId>org.gvsig</groupId> |
|
23 |
<artifactId>org.gvsig.fmap.dal.file.shp</artifactId> |
|
24 |
</dependency> |
|
21 | 25 |
</dependencies> |
22 | 26 |
</project> |
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsCreateRouteParamsController.java | ||
---|---|---|
45 | 45 |
import org.gvsig.fmap.dal.DALLocator; |
46 | 46 |
import org.gvsig.fmap.dal.DataManager; |
47 | 47 |
import org.gvsig.fmap.dal.DataParameters; |
48 |
import org.gvsig.fmap.dal.DataServerExplorer; |
|
49 |
import org.gvsig.fmap.dal.DataServerExplorerParameters; |
|
48 | 50 |
import org.gvsig.fmap.dal.DataStoreParameters; |
51 |
import org.gvsig.fmap.dal.NewDataStoreParameters; |
|
49 | 52 |
import org.gvsig.fmap.dal.exception.DataException; |
53 |
import org.gvsig.fmap.dal.exception.InitializeException; |
|
54 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
|
50 | 55 |
import org.gvsig.fmap.dal.exception.ReadException; |
51 | 56 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
52 | 57 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
... | ... | |
55 | 60 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
56 | 61 |
import org.gvsig.fmap.dal.feature.FeatureType; |
57 | 62 |
import org.gvsig.fmap.dal.feature.NewFeatureStoreParameters; |
63 |
import org.gvsig.fmap.dal.serverexplorer.filesystem.spi.FilesystemServerExplorerProvider; |
|
58 | 64 |
import org.gvsig.fmap.dal.store.shp.SHPNewStoreParameters; |
59 | 65 |
import org.gvsig.fmap.geom.DataTypes; |
60 | 66 |
import org.gvsig.fmap.geom.Geometry; |
... | ... | |
85 | 91 |
import org.gvsig.tools.i18n.I18nManager; |
86 | 92 |
import org.gvsig.tools.locator.LocatorException; |
87 | 93 |
import org.gvsig.tools.persistence.PersistentState; |
94 |
import org.gvsig.tools.persistence.case1.model.Projection; |
|
88 | 95 |
import org.gvsig.tools.persistence.exception.PersistenceException; |
89 | 96 |
import org.gvsig.tools.swing.api.ActionListenerSupport; |
90 | 97 |
import org.gvsig.tools.swing.api.ToolsSwingLocator; |
... | ... | |
342 | 349 |
logger.error("Error getting selected item from cmbInputLayer"); |
343 | 350 |
throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null); |
344 | 351 |
} |
345 |
FLyrVect fLyrVect = (FLyrVect) this.cmbIdRouteField.getSelectedItem(); |
|
352 |
FLyrVect fLyrVect = (FLyrVect) this.cmbInputLayer.getSelectedItem(); |
|
353 |
IProjection projection= fLyrVect.getProjection(); |
|
346 | 354 |
if (!(fLyrVect.getFeatureStore() instanceof FeatureStore)){ |
347 | 355 |
logger.error("Error getting selected item from cmbInputLayer"); |
348 | 356 |
throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null); |
... | ... | |
365 | 373 |
params.setIdRouteField(idRouteField); |
366 | 374 |
|
367 | 375 |
//OutputStore |
368 |
String outputLayerPath = this.txtOutputFile.getText(); |
|
369 |
if(StringUtils.isEmpty(outputLayerPath)){ |
|
376 |
String outputLayerPathFile = this.txtOutputFile.getText();
|
|
377 |
if(StringUtils.isEmpty(outputLayerPathFile)){
|
|
370 | 378 |
throw new LrsNeededParameterException("need_to_fill_the_target_path", null); |
371 | 379 |
} |
372 |
SHPNewStoreParameters sHPNewStoreParameters=new SHPNewStoreParameters(); |
|
373 |
sHPNewStoreParameters.setFile(outputLayerPath); |
|
374 |
params.setNewFeatureStoreParameters((NewFeatureStoreParameters)sHPNewStoreParameters); |
|
375 | 380 |
|
381 |
// SHPNewStoreParameters sHPNewStoreParameters=new SHPNewStoreParameters(); |
|
382 |
// sHPNewStoreParameters.setFile(outputLayerPath); |
|
383 |
// params.setNewFeatureStoreParameters((NewFeatureStoreParameters)sHPNewStoreParameters); |
|
384 |
try { |
|
385 |
NewFeatureStoreParameters newFeatureStoreParams=createFeatureStoreParams(outputLayerPathFile, projection); |
|
386 |
params.setNewFeatureStoreParameters(newFeatureStoreParams); |
|
387 |
} catch (Exception e) { |
|
388 |
throw new LrsNeededParameterException("error_creating_outputStore", e); |
|
389 |
} |
|
390 |
|
|
376 | 391 |
LrsSourceOfMeasures measureSources = (LrsSourceOfMeasures) this.cmbMeasureSource.getSelectedItem(); |
377 | 392 |
FeatureAttributeDescriptor fromMeasureField = (FeatureAttributeDescriptor) this.cmbFromMeasureField.getSelectedItem(); |
378 | 393 |
FeatureAttributeDescriptor toMeasureField = (FeatureAttributeDescriptor) this.cmbToMeasureField.getSelectedItem(); |
... | ... | |
517 | 532 |
case LENGTH: |
518 | 533 |
cmbFromMeasureField.setEnabled(false); |
519 | 534 |
cmbToMeasureField.setEnabled(false); |
535 |
chkIgnoreSpatialGaps.setEnabled(true); |
|
520 | 536 |
break; |
521 | 537 |
case ONE_FIELD: |
522 | 538 |
cmbFromMeasureField.setEnabled(true); |
523 | 539 |
cmbToMeasureField.setEnabled(false); |
540 |
chkIgnoreSpatialGaps.setEnabled(true); |
|
524 | 541 |
break; |
525 | 542 |
case TWO_FIELDS: |
526 | 543 |
cmbFromMeasureField.setEnabled(true); |
527 | 544 |
cmbToMeasureField.setEnabled(true); |
545 |
chkIgnoreSpatialGaps.setEnabled(false); |
|
528 | 546 |
break; |
529 | 547 |
default: |
530 | 548 |
break; |
... | ... | |
606 | 624 |
return correctCurveLayerFound; |
607 | 625 |
} |
608 | 626 |
|
627 |
private NewFeatureStoreParameters createFeatureStoreParams(String outputLayerPathFile,IProjection projection) throws Exception{ |
|
628 |
String filePath=""; |
|
629 |
if(outputLayerPathFile!=null){ |
|
630 |
filePath=outputLayerPathFile.substring(0,outputLayerPathFile.lastIndexOf(File.separator)); |
|
631 |
} |
|
632 |
DataManager dataManager = DALLocator.getDataManager(); |
|
633 |
DataServerExplorerParameters eparams = |
|
634 |
dataManager.createServerExplorerParameters("FilesystemExplorer"); |
|
635 |
eparams.setDynValue("initialpath", filePath); |
|
636 |
DataServerExplorer serverExplorer = |
|
637 |
dataManager.openServerExplorer(eparams.getExplorerName(), eparams); |
|
609 | 638 |
|
639 |
SHPNewStoreParameters sparams = (SHPNewStoreParameters)serverExplorer.getAddParameters("Shape"); |
|
640 |
sparams.setDynValue("shpfile",outputLayerPathFile); |
|
641 |
|
|
642 |
sparams.setCRS(projection); |
|
643 |
|
|
644 |
return sparams; |
|
645 |
} |
|
646 |
|
|
647 |
|
|
610 | 648 |
// private void test() { |
611 | 649 |
// WindowManager winManager = ToolsSwingLocator.getWindowManager(); |
612 | 650 |
// |
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.swing/org.gvsig.lrs.swing.impl/src/main/java/org/gvsig/lrs/swing/impl/JLrsCalibrateRouteParamsController.java | ||
---|---|---|
320 | 320 |
logger.error("Error getting selected item from cmbInputLayer"); |
321 | 321 |
throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null); |
322 | 322 |
} |
323 |
FLyrVect fLyrVect = (FLyrVect) this.cmbIdRouteField.getSelectedItem();
|
|
323 |
FLyrVect fLyrVect = (FLyrVect) this.cmbInputLayer.getSelectedItem();
|
|
324 | 324 |
if (!(fLyrVect.getFeatureStore() instanceof FeatureStore)){ |
325 | 325 |
logger.error("Error getting selected item from cmbInputLayer"); |
326 | 326 |
throw new LrsGettingParametersException("error_getting_selected_item_from_cmbInputLayer", null); |
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/config.xml | ||
---|---|---|
13 | 13 |
<plugin-config> |
14 | 14 |
<depends plugin-name="org.gvsig.app.mainplugin" /> |
15 | 15 |
<depends plugin-name="org.gvsig.app.document.table.app.mainplugin" /> |
16 |
<depends plugin-name="org.gvsig.shp.app.mainplugin" /> |
|
16 | 17 |
<resourceBundle name="text" /> |
17 | 18 |
<libraries library-dir="lib" /> |
18 | 19 |
<extensions> |
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text.properties | ||
---|---|---|
39 | 39 |
grouping_features=Agrupando elementos |
40 | 40 |
at_least_one_layer_needed=Es necesaria al menos una capa |
41 | 41 |
impossible_to_find_needed_layer=No se ha podido encontrar la capa necesaria |
42 |
error_creating_outputStore=Error creando el almac\u00E9n de salida |
|
42 | 43 |
|
43 |
|
|
44 | 44 |
#CALIBRATE ROUTE |
45 | 45 |
calibrate_point_layer=Capa de puntos de calibraci\u00f3n |
46 | 46 |
id_calibration_point_route_field=Identificador de ruta en la capa de puntos de calibraci\u00f3n |
org.gvsig.lrs/trunk/org.gvsig.lrs/org.gvsig.lrs.app/org.gvsig.lrs.app.mainplugin/src/main/resources-plugin/i18n/text_en.properties | ||
---|---|---|
39 | 39 |
grouping_features=Grouping features |
40 | 40 |
at_least_one_layer_needed=At least one layer is needed |
41 | 41 |
impossible_to_find_needed_layer=Impossible to find needed layer |
42 |
error_creating_outputStore=Error creating output store |
|
42 | 43 |
|
43 | 44 |
|
44 | 45 |
#CALIBRATE ROUTE |
Also available in: Unified diff