On Thu, Mar 14, 2013 at 3:03 PM, Luís de Sousa <[log in to unmask]>wrote:
> Just to complement this thread: with a POINT type layer the read
> method works perfectly, just tried that.
If you look at the ShapeFileImporter.java, you'll notice these lines:
46 // Shape types included in ESRI Shapefiles. Not all of these
are currently supported.
48 final static int NULL_SHAPE = 0;
49 final static int POINT = 1;
50 final static int POLYLINE = 3;
51 final static int POLYGON = 5;
52 final static int MULTIPOINT = 8;
53 final static int POINTZ = 11;
54 final static int POLYLINEZ = 13;
55 final static int POLYGONZ = 15;
56 final static int MULTIPOINTZ = 18;
57 final static int POINTM = 21;
58 final static int POLYLINEM = 23;
59 final static int POLYGONM = 25;
60 final static int MULTIPOINTM = 28;
61 final static int MULTIPATCH = 31;
65 public static boolean isSupported(int shapeType)
67 switch (shapeType)
69 case POINT:
70 return true;
71 case POLYLINE:
72 return true;
73 case POLYGON:
74 return true;
76 return false; // no other types are currently
So, from that you can infer that POINTZ types are not currently supported.
However, I don't imagine adding support for that would be too hard.
Presumably POINTZ types are just POINTs with an elevation, or Z, value. I
don't have the shape file spec handy, but hopefully it's just a matter of
modifying this part of the code:
442 Geometry geom = null;
444 if (recordType == POINT)
446 Coordinate pt = new
447 geom = geomFactory.createPoint(pt);
448 } else if (recordType == POLYLINE || recordType ==
450 // advance past four doubles: minX, minY, maxX,
451 byteBuf.position(byteBuf.position() + 32);
I'm *guessing* that the byteBuf will just contain another double for the Z
value, so splicing another if/else to check for "recordType == POINTZ" and
then read the three coordinates.
I'd experiment with this myself, but I not only don't have POINTZ data
handy, but I really do need to get cracking on this dissertation. If you
try this and it works, I'll fold the patch into GeoMason.