Hi Larry,
My mistake,
I thought that Integers were encoded into 'N' and Double into 'F'
But 'F' are just read by OpenJUMP, not written.
Sorry for the noise,
Michaël
Hi Michaël,
I'm not sure what you are seeing, but I tested both Sky and OJ
before the mod, and they both preserved an N 16.5 format when saving
selected datasets.
regards,
Larry
On Fri, Mar 1, 2013 at 3:41 PM, Michaël Michaud
<michael.mich...@free.fr <mailto:michael.mich...@free.fr>> wrote:
Hi Larry,
Thanks a lot for your patch.
It took me time to understand how it works.
I noticed that the overrideWithExistingCompatibleDbfFieldDef is used
for AttributeType.INTEGER and AttributeType.DOUBLE
but for DOUBLE, I could not find a case where the overriding method
can change the dbf field.
It seems to me that currently, the original number of decimal of a
double
will never be preserved (i mean in OpenJUMP code) ?
What do you think ?
Michaël
A more general solution than my last post is:
if (columnType == AttributeType.INTEGER) {
fields[f] = new DbfFieldDef(columnName, 'N', 11,
0); //LDB: previously 16
DbfFieldDef fromFile =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
if (fromFile.fieldnumdec == 0)
fields[f] = fromFile;
f++;
} else if (columnType == AttributeType.DOUBLE) {
fields[f] = new DbfFieldDef(columnName, 'N', 33, 16);
DbfFieldDef fromFile =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
if (fromFile.fieldnumdec > 0)
fields[f] = fromFile;
f++;
Larry
On Fri, Mar 1, 2013 at 10:38 AM, Larry Becker
<becker.la...@gmail.com <mailto:becker.la...@gmail.com>> wrote:
I have a fix that works in SkyJUMP and should work in
OpenJUMP. It isn't elegant but it works by avoiding calling
overrideWithExistingCompatibleDbfFieldDef when a type change
is detected. There may be a more direct solution, but I
didn't find one.
The patch file for SkyJUMP is:
### Eclipse Workspace Patch 1.0
#P SkyJumpSVN
Index: com/vividsolutions/jump/io/ShapefileWriter.java
===================================================================
--- com/vividsolutions/jump/io/ShapefileWriter.java (revision 2)
+++ com/vividsolutions/jump/io/ShapefileWriter.java (working
copy)
@@ -407,11 +407,13 @@
if (columnType == AttributeType.INTEGER) {
fields[f] = new DbfFieldDef(columnName, 'N',
11, 0); //LDB: previously 16
- fields[f] =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
+ if ((fieldMap != null) &&
!fieldMap.toString().endsWith("N 33.16}"))
+ fields[f] =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
f++;
} else if (columnType == AttributeType.DOUBLE) {
fields[f] = new DbfFieldDef(columnName, 'N',
33, 16);
- fields[f] =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
+ if ((fieldMap != null) &&
!fieldMap.toString().endsWith("N 11.0}"))
+ fields[f] =
overrideWithExistingCompatibleDbfFieldDef(fields[f], fieldMap);
f++;
} else if (columnType == AttributeType.STRING) {
int maxlength =
findMaxStringLength(featureCollection, t);
Larry
On Fri, Mar 1, 2013 at 9:09 AM, Larry Becker
<becker.la...@gmail.com <mailto:becker.la...@gmail.com>> wrote:
I can reproduce it in SkyJUMP.
I think this is thte result of using
overrideWithExistingCompatibleDbfFieldDef in
ShapeWriter. My rational behind this method introduced
a few years ago (July 2010) is that the size of the
numbers entered during an edit session should not
automatically lead to a reduction of precision in the
shapefile. This was the case before this procedure was
introduced. I had shapefiles for which there were
published data standards, but SkyJUMP would change the
number of digits each time I saved the file. The change
achieved its goal, but it may not work correctly for this
particular case due to the type change.
I agree with Jukka. It may be an unusual case, but the
reliability of shapefile IO is crucial to the JUMP
family. This must be fixed. I will work on it too.
BTW, the result is the same if you Save Dataset As
instead of Save Selected Datasets.
Larry
On Thu, Feb 28, 2013 at 7:00 AM, Rahkonen Jukka
<jukka.rahko...@mmmtike.fi
<mailto:jukka.rahko...@mmmtike.fi>> wrote:
Hi,
This is bad. I have tested only with r3277 but not
with any older versions. I can reproduce this:
- Start OJ
- Create a layer, add attribute "attr" of type DOUBLE
- Make a point, set attr=1.0
- Save as a shapefile
- Delete layer, read in the saved shapefile,
everything OK
- Edit schema, change "attr" into type INTEGER
- Do "Save selected dataset"
- Shapefile is now corrupted
OJ cannot open this saved shapefile. The error is
java.io.EOFException
at java.io.DataInputStream.readFully(Unknown
Source)
at java.io.DataInputStream.readFully(Unknown
Source)
at
com.vividsolutions.jump.io.EndianDataInputStream.readByteLEnum(EndianDataInputStream.java
:75)
at
org.geotools.dbffile.DbfFile.GetDbfRec(DbfFile.java:230)
at
com.vividsolutions.jump.io.ShapefileReader.read(ShapefileReader.java:179)
at
com.vividsolutions.jump.io.datasource.DelegatingCompressedFileHandler.read(DelegatingComp
ressedFileHandler.java:80)
at
com.vividsolutions.jump.io.datasource.ReaderWriterFileDataSource$1.executeQuery(ReaderWri
terFileDataSource.java:61)
at
org.openjump.core.ui.io.file.DataSourceFileLayerLoader.open(DataSourceFileLayerLoader.jav
a:107)
at
org.openjump.core.ui.plugin.file.open.OpenFileWizard.run(OpenFileWizard.java:131)
at
org.openjump.core.ui.plugin.AbstractWizardPlugin.run(AbstractWizardPlugin.java:73)
at
com.vividsolutions.jump.workbench.ui.task.TaskMonitorManager$TaskWrapper.run(TaskMonitorM
anager.java:152)
at java.lang.Thread.run(Unknown Source)
GDAL cannot open this shapefile either. It suggests
that there is something wrong with the .dbf file.
From ogrinfo:
Layer name: spoil
Geometry: Point
Feature Count: 1
Extent: (280.000000, 127.000000) - (280.000000,
127.000000)
Layer SRS WKT:
(unknown)
attr: Real (33.16)
ERROR 1: fread(34) failed on DBF file.
-Jukka Rahkonen-
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
<mailto:Jump-pilot-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
<mailto:Jump-pilot-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
<mailto:Jump-pilot-devel@lists.sourceforge.net>
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel