Sigh, yes, the JTS handling of Z values is a bit weak right now. Hoping to
improve this in redesign of the API - but it will break lots of things
unfortunately.
In absence of better metadata about the coordinate dimension the method of
checking for Z = NaN is about all that can be done right now, . Be aware
however that Geometry.getCoordinates() is a bit inefficient for complex
geometries, since it has to create one big array to hold all Coordinate
values, and then traverse the geometry copying the references. Using a
CoordinateFilter would be more efficient.
On Monday, August 19, 2013 5:16:59 AM UTC-7, Nicolas Fortin (OrbisGIS)
wrote:
>
> I'm sorry, it's my mistake, Geometry.getDimension does not return 2 or 3.
> It is related to geometry type, not coordinates. The only way I found to
> test if a Geometry contain a Z coordinate somewhere is through the
> following function:
>
> /**
> * @param coordinates Coordinate array
> * @return True if the array is empty or contain only 2d coordinates.
> */
> private static boolean is2d(Coordinate[] coordinates) {
> if(coordinates==null) {
> return true;
> }
> for(Coordinate coordinate : coordinates) {
> if(!Double.isNaN(coordinate.z)) {
> return false;
> }
> }
> return true;
> }
>
> Then the constructor become this
>
> new WKBWriter(is2d(geometry.getCoordinates()) ? 2 : 3, geom3d.getSRID() !=
> 0)
>
> Le lundi 19 août 2013 13:43:42 UTC+2, Noel Grandin a écrit :
>>
>>
>> On 2013-08-19 11:49, Nicolas Fortin (OrbisGIS) wrote:
>>
>>
>> > The first fix, isGeometry function, a mix was done on Geometry
>>> > object/class:
>>> >
>>> >
>>> https://github.com/nicolas-f/h2database/commit/ac5fab9fffbf5cfd63f7e67e8ce4fa90da727dbc
>>>
>>> >
>>> This commit makes no sense at all.
>>> - you have created a unnecessary recursive call in DataType#isGeometry
>>> - you have broken the case where the geometry stuff is not on the
>>> classpath
>>> - you have removed a test case from TestSpatial for no reason that I can
>>> see.
>>>
>>>
>> This is not recursive, it uses the other function that test class, not
>> object.
>> the second function test if static geometry constant is null.
>> The random test case is covered by Thomas MVMap unit test in a cleaner
>> way (without random, and way more faster)
>>
>> Ah, now that's more useful as a commit message.
>> OK, applied.
>>
>>
>>
>>> > Second fix, WKB export, SRID and Z was missing:
>>> >
>>> >
>>> https://github.com/nicolas-f/h2database/commit/f8df369622defb0413aa15b8e78ee35b0d461ca8
>>>
>>>
>>> This fix assumes that Geometry will always be 3D, which means that we
>>> will no longer support 2D geometry, which does not seem like a good idea
>>> to me.
>>>
>>>
>> You are right, we can replace the constructor by this:
>> new WKBWriter(geometry.getDimension(), geometry.getSRID() != 0)
>>
>> Applied.
>>
>>
>>
>>> >
>>> > Third fix, ValueGeometry.equals, GeometryCollection throws an error
>>> > when equals is used, using a work around through binary comparison:
>>> >
>>> >
>>> https://github.com/nicolas-f/h2database/commit/57d141acb4a97b960f704860994a283b33e69d40
>>>
>>>
>>> This commit also makes no sense. Why is the Geometry class throwing an
>>> IllegalArgumentException? We need more explanation here.
>>>
>>
>> Geometry compute the intersection matrix (more robust to rounding
>> errors), this cannot be done with GeometryCollection, then it throws an
>> exception. Test all geometries inside the collection separatly may be
>> another solution.
>>
>>
>> Hmm, this looks like it actually needs a fix to be applied in the JTS
>> library.
>> I think you should liase with the JTS people and get them to fix their
>> equals method.
>>
>>
>>
>>>
>>> >
>>> > Fourth fix, update OSGi bundle manifest in order to optionally import
>>> > JTS and export some other package of h2 to be able to write a table
>>> > engine in a remote OSGi bundle.
>>> >
>>> >
>>> https://github.com/nicolas-f/h2database/commit/0042bf99cc677515cee6b91d4b8723e3330507bd
>>>
>>>
>>> I'm going to leave this for Thomas to comment on.
>>> Historically we have been very loathe to expose more of H2's internals
>>> because we have no intention of making all of this stuff part of our
>>> "supported API".
>>>
>>>
>> There is the TableEngine in the api package, however it has dependency on
>> other (hidden) packages.
>>
>>
>> This patch exports a huge chunk of our internal stuff, way more than the
>> basic TableEngine API, so I'm going to leave it up to Thomas to make the
>> call.
>>
>>
>>
>>
>>
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/h2-database.
For more options, visit https://groups.google.com/groups/opt_out.