Hi > well - the SRID code is the only thing that seems to be added between JTS 1.7 > and 1.8. > > some more observations: > > what Larry's DBQuery actually does is stripping MBR header and end marker > from the spatiallite blob and handing it over to JTS. as Michael correctly > discovered is the endianess byte used differently in there, so what actually > would need to be done is the WKB would have to be postprocessed before giving > it to JTS. but before we try that: > > i had a look at > > https://sourceforge.net/apps/mediawiki/jump-pilot/index.php?title=OpenJUMP_with_SpatialLite#Using_SpatiaLite_with_Spatialite_Reader_Plugin > sources and it seems to bring with a full blown BLOB parser. > > Jukka, Michael: could you check if this plugin suffers from the same problem? > i would guess not. if not, we could reuse the parser, single it out as a jar > etc. I recently patched Spatialite Plugin after Jukka'request, but it suffers from the same problem (parser just read the first few bytes then use JTS WKBReader).
I had a look in JTS WKBParser (which is short and easy to read). The key part is in readGeometry(), lines int byteOrder = byteOrderWKB == WKBConstants.wkbNDR ? ByteOrderValues.LITTLE_ENDIAN : ByteOrderValues.BIG_ENDIAN; dis.setOrder(byteOrder); Unfortunately, this method is private. We could suggest to Martin to change it to switch(byteOrderWKB) { case WKBConstants.wkbNDR: dis.setOrder(ByteOrderValues.LITTLE_ENDIAN); break; case WKBConstants.wkbXDR:dis.setOrder(ByteOrderValues.BIG_ENDIAN); break; case 0x69 : // keep previous byte order, this is a spatialite geometry break; default : throw Exception("This case is neither a pure wkb neither a spatialite wkb"); } Seems that it could tolerate spatialite geometry and be as strict as it is now for wkb. What do you think ? Michaël > > ..ede > > > On 21.04.2013 15:53, Michaël Michaud wrote: >> Hi, >> >> In JTS revision 637, Martin took care of the successive byte order >> >> "Fixed WKBReader to handle successive geometrys with different endianness" >> http://jts-topo-suite.svn.sourceforge.net/viewvc/jts-topo-suite/trunk/jts/java/src/com/vividsolutions/jts/io/WKBReader.java?r1=57&r2=637 >> >> Maybe there is also something with SRID handling, but I don't think so as it >> would make no difference between simple and multiple geometries. >> >> Michaël >> >>> Hi Ede, >>>> ok, just dug some more into "OpenGIS Simple Features Specification for SQL" >>>> http://portal.opengeospatial.org/files/?artifact_id=829 >>>> >>>> and as far as i read on page 3-24 and later, a little bit unclear, but it >>>> seems to me that endianess is not repeated (see the Polygon example with >>>> /two/ rings) but left away. for multi geometries the standard expects the >>>> sub geometries first value is the wkb type. >>> My interpretation of p 3-26 is that MultiPolygon has a byte order, a >>> wkbtype (6), a number of polygons, then an array of polygons, *each polygon >>> having in turn a byte order*, a wkbtype (3), a number of ring... >>> So yes, I think the byte order is repeated and sub-geometries do not starts >>> with geometry type. The example with the polygon made of two rings is >>> another thing as it is not a multi-geometry. >>> In spatialite, after the number of entities (polygons) in a collection >>> comes a byte mark (hex=69), the geometry type, the geometry class >>> specific... >>> >>> As a result, the byte number should be the same, and the only difference is >>> that each simple geometry starts with a byte order in wkb and with 0x69 in >>> spatialite, which could explain that JTS 1.12 did read spatialite geometry >>> if it just ignored this particular byte which is not very useful (one must >>> be particularly vicious to change byete order inside a single multigeometry >>> object ) >>> >>> Michaël >>>> all of this seems to be implemented in spatiallite as described below. so >>>> are we totally sure that JTS is not buggy in this regard? after all it >>>> reads like WKB analogue to WKT is supposed to be the cross platform >>>> implemented identically everywhere standard. >>>> >>>> ..ede >>>> >>>> PS: i'd really like to compare >>>> >>>> On 21.04.2013 14:14, edgar.sol...@web.de wrote: >>>>> regarding your interpretation below i just found the following >>>>> >>>>> http://www.gaia-gis.it/spatialite-2.1/SpatiaLite-manual.html#t3.2 >>>>> >>>>> which states: >>>>> >>>>> " >>>>> The Well-Known Binary (WKB) representation for geometric values is >>>>> defined by the OpenGIS specification. >>>>> " >>>>> >>>>> and >>>>> >>>>> " >>>>> Component representation is as follows: >>>>> >>>>> The byte order ... >>>>> The WKB type is represented as a four-bytes unsigned integer ... >>>>> SNIP >>>>> Collection type geometries [MultiPoint, MultiLineString, >>>>> MultiPolygon and GeometryCollections] value has: >>>>> the number of entities, represented as a four-bytes unsigned >>>>> integer. >>>>> a corresponding array of Points, LineStrings or Polygons as >>>>> needed >>>>> *note that each elementary entity has to be prefixed by its own >>>>> WKB type.* >>>>> >>>>> " >>>>> >>>>> both informations together suggest to me that >>>>> A) they claim to be standard conform >>>>> B) the mysterious bytevalue is in fact a WKB type representation for the >>>>> following WKB >>>>> >>>>> /additionally/ >>>>> >>>>> selecting geometries AsText() should result in WKTs, as far as i read >>>>> page 2-29 of >>>>> http://portal.opengeospatial.org/files/?artifact_id=829 >>>>> >>>>> maybe this helps.. ede >>>>> >>>>> On 15.04.2013 08:44, Michaël Michaud wrote: >>>>>> Hi, >>>>>> >>>>>> Just compared both strings to the spec, >>>>>> >>>>>> First string follows the WKB specification >>>>>> 01 endianess >>>>>> 06000000 MultiPolygon >>>>>> 02000000 Number of Polygons >>>>>> 01 endianess >>>>>> 03000000 Polygon >>>>>> 02000000 Two rings >>>>>> 04000000 Four points >>>>>> ... >>>>>> >>>>>> Second string follows the Spatialite specification >>>>>> http://www.gaia-gis.it/gaia-sins/BLOB-Geometry.html >>>>>> 01 endianess >>>>>> 06000000 MultiPolygon >>>>>> 02000000 Number of Polygons >>>>>> 69 Spatialite mark starting a new Geometry >>>>>> 03000000 Polygon >>>>>> 02000000 Two Rings >>>>>> 04000000 Four points >>>>>> >>>>>> In spatialite geometry description, endianess is not repeated for each >>>>>> component, >>>>>> instead, the 69 byte appears >>>>>> Probably the previous version of JTS could accomodate this because the >>>>>> byte >>>>>> order information is generally redundant, but a more strict parser will >>>>>> find >>>>>> a non authorized description for the Polygon as it does not start by the >>>>>> byte >>>>>> order. >>>>>> >>>>>> This means that the spatialite parser which just skipped the first >>>>>> bytes, then >>>>>> read the following byte stream as a wkb byte array with JTS must read >>>>>> each >>>>>> component as a Spatialite Geometry starting with 69. >>>>>> >>>>>> Michaël >>>>>> >>>>>> >>>>>> On Sun, Apr 14, 2013 at 3:39 PM, Rahkonen Jukka >>>>>> <jukka.rahko...@mmmtike.fi <mailto:jukka.rahko...@mmmtike.fi>> wrote: >>>>>> >>>>>> Hi, >>>>>> >>>>>> I made two tests: >>>>>> 1) With PostGIS 2.1 >>>>>> select encode(ST_AsBinary(ST_GeomFromText('MULTIPOLYGON(((0 0, 10 >>>>>> 20, 30 40, 0 0), (1 1, 2 2, 3 3, 1 1)), >>>>>> ((100 100, 110 110, 120 120, 100 100)))')), 'hex') >>>>>> Query gives the same WKB that you used in JTS bug #3610843, that is >>>>>> >>>>>> "0106000000020000000103000000020000000400000000000000000000000000000000000000000000000000244000000000000034400000000000003e4000000000000044400000000000000000000000000000000004000000000000000000f03f000000000000f03f0000000000000040000000000000004000000000000008400000000000000840000000000000f03f000000000000f03f01030000000100000004000000000000000000594000000000000059400000000000805b400000000000805b400000000000005e400000000000005e4000000000000059400000000000005940" >>>>>> >>>>>> 2) With Spatialite >>>>>> select >>>>>> GeomFromWKB(x'0106000000020000006903000000020000000400000000000000000000000000000000000000000000000000244000000000000034400000000000003E4000000000000044400000000000000000000000000000000004000000000000000000F03F000000000000F03F0000000000000040000000000000004000000000000008400000000000000840000000000000F03F000000000000F03F69030000000100000004000000000000000000594000000000000059400000000000805B400000000000805B400000000000005E400000000000005E4000000000000059400000000000005940') >>>>>> Query creates a multipolygon geometry. >>>>>> >>>>>> >>>>>> Jukka, these two WKB hex strings differ around the 20th character: >>>>>> >>>>>> 01060000000200000001030 >>>>>> 01060000000200000069030 >>>>>> >>>>>> The second one is the one I retrieved from spatialite. When I try to >>>>>> parse the second one with Postgis (1.5.3), I get an error: >>>>>> >>>>>> select >>>>>> ST_GeomFromWkb(decode('0106000000020000006903000000020000000400000000000000000000000000000000000000000000000000244000000000000034400000000000003E4000000000000044400000000000000000000000000000000004000000000000000000F03F000000000000F03F0000000000000040000000000000004000000000000008400000000000000840000000000000F03F000000000000F03F69030000000100000004000000000000000000594000000000000059400000000000805B400000000000805B400000000000005E400000000000005E4000000000000059400000000000005940', >>>>>> 'hex')); >>>>>> ERROR: invalid WKB type >>>>>> HINT: You must specify a valid OGC WKT geometry type such as POINT, >>>>>> LINESTRING or POLYGON >>>>>> >>>>>> I haven't manually verified the WKB, but it might be that spatialite is >>>>>> generating an invalid WKB, and JTS 1.12 was more forgiving about it than >>>>>> 1.13 is. >>>>>> >>>>>> -lreeder >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Therefore it looks like the WKB is ok. But I do not understand that >>>>>> if PostGIS gives exactly the same WKB, how it is possible that OpenJUMP >>>>>> works with PostGIS but not with Spatialite through DB Query plugin? >>>>>> >>>>>> -Jukka Rahkonen- >>>>>> >>>>>> >>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Precog is a next-generation analytics platform capable of advanced >>>>>>> analytics on semi-structured data. The platform includes APIs for >>>>>>> building >>>>>>> apps and a phenomenal toolset for data science. Developers can use >>>>>>> our toolset for easy data analysis & visualization. Get a free account! >>>>>>> http://www2.precog.com/precogplatform/slashdotnewsletter >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Jump-pilot-devel mailing list >>>>>>> Jump-pilot-devel@lists.sourceforge.net >>>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>>> ------------------------------------------------------------------------------ >>>>>> Precog is a next-generation analytics platform capable of advanced >>>>>> analytics on semi-structured data. The platform includes APIs for >>>>>> building >>>>>> apps and a phenomenal toolset for data science. Developers can use >>>>>> our toolset for easy data analysis & visualization. Get a free account! >>>>>> http://www2.precog.com/precogplatform/slashdotnewsletter >>>>>> >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Jump-pilot-devel mailing list >>>>>> Jump-pilot-devel@lists.sourceforge.net >>>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Precog is a next-generation analytics platform capable of advanced >>>>> analytics on semi-structured data. The platform includes APIs for building >>>>> apps and a phenomenal toolset for data science. Developers can use >>>>> our toolset for easy data analysis & visualization. Get a free account! >>>>> http://www2.precog.com/precogplatform/slashdotnewsletter >>>>> _______________________________________________ >>>>> Jump-pilot-devel mailing list >>>>> Jump-pilot-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>>> >>>> ------------------------------------------------------------------------------ >>>> Precog is a next-generation analytics platform capable of advanced >>>> analytics on semi-structured data. The platform includes APIs for building >>>> apps and a phenomenal toolset for data science. Developers can use >>>> our toolset for easy data analysis & visualization. Get a free account! >>>> http://www2.precog.com/precogplatform/slashdotnewsletter >>>> _______________________________________________ >>>> Jump-pilot-devel mailing list >>>> Jump-pilot-devel@lists.sourceforge.net >>>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >>>> >>>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Precog is a next-generation analytics platform capable of advanced >>> analytics on semi-structured data. The platform includes APIs for building >>> apps and a phenomenal toolset for data science. Developers can use >>> our toolset for easy data analysis & visualization. Get a free account! >>> http://www2.precog.com/precogplatform/slashdotnewsletter >>> >>> >>> _______________________________________________ >>> Jump-pilot-devel mailing list >>> Jump-pilot-devel@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >> >> >> ------------------------------------------------------------------------------ >> Precog is a next-generation analytics platform capable of advanced >> analytics on semi-structured data. The platform includes APIs for building >> apps and a phenomenal toolset for data science. Developers can use >> our toolset for easy data analysis & visualization. Get a free account! >> http://www2.precog.com/precogplatform/slashdotnewsletter >> >> >> >> _______________________________________________ >> Jump-pilot-devel mailing list >> Jump-pilot-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel >> > ------------------------------------------------------------------------------ > Precog is a next-generation analytics platform capable of advanced > analytics on semi-structured data. The platform includes APIs for building > apps and a phenomenal toolset for data science. Developers can use > our toolset for easy data analysis & visualization. Get a free account! > http://www2.precog.com/precogplatform/slashdotnewsletter > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > ------------------------------------------------------------------------------ Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis & visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel