You should be able to supply a custom coordinate sequence factory as a hint;
but some patches may be required to have shapefile actually pick up and respect
your hint (you are the first person trying this out; so even though we have
planned for these ideas; the actual work waits until someone real has data to
work with).
Jody
On 25/08/2010, at 2:43 AM, Mark Payne wrote:
> Thanks Andrea and Jody for your advice on this. I had to put this work aside
> for a while and only just started looking at it again, but your input was
> much appreciated.
>
> I'm now working with some ZM shapefiles and have a related question which I
> fear may require rather more work on my part. Reading these in the standard
> way (getting a datastore using FileDataStoreFinder, using that to get a
> FeatureSource then a FeatureCollection and iterating over it) I get the Z
> ordinate if I call getCoordinates() on my geometries and look at the z member
> of each Coordinate.
>
> But what about the M ordinate? com.vividsolutions.jts.geom.Coordinate is 3D
> only, so even if the code that reads the shapefiles "knows" about the M
> values (which it must do in a sense if only to skip over the relevant bits of
> the file) it couldn't use this class to store them. The javadoc for
> CoordinateSequence says: "There are some cases in which you might want
> Geometries to store their points using something other than the JTS
> Coordinate class ... one that supports extra attributes like M-values. You
> can do this by implementing the CoordinateSequence and
> CoordinateSequenceFactory interfaces."
>
> They have an example of doing just that in
> com.vividsolutions.jtsexample.geom.ExtendedCoordinate, but clearly some extra
> work would be required to create a shapefile reader that could make use of
> such 4D coordinates. Any pointers as to what code I should use/ add to /
> modify to achieve this?
>
> Thanks
>
> Mark
>
>
>
> On 16/07/10 09:47, Andrea Aime wrote:
>> Mark Payne ha scritto:
>>> So far I tried the following:
>>>
>>> featureSource = ds.getFeatureSource(FEATURE_TYPE_NAME);
>>> DefaultQuery query = new DefaultQuery(DefaultQuery.ALL);
>>> Hints hints = new Hints(Hints.COORDINATE_DIMENSION, new Integer(3),
>>> Hints.FEATURE_2D, Boolean.FALSE);
>>> query.setHints(hints);
>>> featureCollection = featureSource.getFeatures(query);
>>>
>>> That was the kind of thing you were meaning? I tried the hints that seemed
>>> the most likely from the list that the Hints object provides. Unfortunately
>>> it doesn't seem to make a difference, I just get features with the X,Y
>>> components as before. Does anyone know if I'm on the right track, or do I
>>> need to provide a different CoordinateSequenceFactory as well?
>>
>> The code in the stable branches will pick up the 3rd dimension
>> only if the crs had 3 axis:
>>
>> @Override
>> public void encodeGeometryColumn(GeometryDescriptor gatt, int srid,
>> StringBuffer sql) {
>> CoordinateReferenceSystem crs = gatt.getCoordinateReferenceSystem();
>> int dimensions = crs == null ? 2 : crs.getCoordinateSystem()
>> .getDimension();
>> sql.append("encode(");
>> if (dimensions > 2) {
>> sql.append("asEWKB(");
>> encodeColumnName(gatt.getLocalName(), sql);
>> } else {
>> sql.append("asBinary(");
>> sql.append("force_2d(");
>> encodeColumnName(gatt.getLocalName(), sql);
>> sql.append(")");
>> }
>> sql.append(",'XDR'),'base64')");
>> }
>>
>> On trunk I've recently (two days ago?) made it use EWKB always,
>> which means it should pull all the ordinates, but even
>> that is not fully correct, as it does not respect the FORCE2D
>> hint.
>>
>> Actually, the SQLDialect methods should be modified so that they
>> get the hints otherwise it's not possible to implement things
>> properly.
>>
>> I don't have time to look into this, do you? A patch on the
>> code and an extension to the JDBC3DTest to check support for
>> FORCE2D would be most welcomed
>>
>> Cheers
>> Andrea
>>
>>
>>
>
>
> --
> Mark Payne
> Development Engineer
>
> Tel: +44 (0) 131 447 4200 Address: SeeByte Ltd.
> Support Tel: +44 (0) 131 510 4200 Level 7, Orchard Brae House
> USA Tel (UK Hours): +1 (619) 241 4393 30 Queensferry Road
> Fax: +44 (0) 131 447 4911 Edinburgh, EH4 2HS
> Web: http://www.seebyte.com Scotland, UK
>
> | This message is confidential and may be privileged. If it is
> | not for you please inform us then delete it. If the content is
> | not about the business of the company or its clients then the
> | message is neither from nor sanctioned by SeeByte Limited which is
> | a company registered in Scotland (reg. number SC194014) with its
> | registered office at the address stated above.
>
------------------------------------------------------------------------------
Sell apps to millions through the Intel(R) Atom(Tm) Developer Program
Be part of this innovative community and reach millions of netbook users
worldwide. Take advantage of special opportunities to increase revenue and
speed time-to-market. Join now, and jumpstart your future.
http://p.sf.net/sfu/intel-atom-d2d
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users