Skip to content

Commit c17d85f

Browse files
authoredDec 12, 2017
Merge pull request #5846 from nyalldawson/spatialite
Spatialite geometry conversion fixes
2 parents 3da5ab6 + 891d954 commit c17d85f

File tree

1 file changed

+18
-163
lines changed

1 file changed

+18
-163
lines changed
 

‎src/providers/spatialite/qgsspatialiteprovider.cpp

Lines changed: 18 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,6 +1200,10 @@ int QgsSpatiaLiteProvider::computeSizeFromGeosWKB2D( const unsigned char *blob,
12001200
p_in += points * ( 2 * sizeof( double ) );
12011201
}
12021202
break;
1203+
1204+
case QgsWkbTypes::UnknownGeometry:
1205+
case QgsWkbTypes::NullGeometry:
1206+
break;
12031207
}
12041208
}
12051209

@@ -1382,6 +1386,10 @@ int QgsSpatiaLiteProvider::computeSizeFromGeosWKB3D( const unsigned char *blob,
13821386
p_in += points * ( 3 * sizeof( double ) );
13831387
}
13841388
break;
1389+
1390+
case QgsWkbTypes::UnknownGeometry:
1391+
case QgsWkbTypes::NullGeometry:
1392+
break;
13851393
}
13861394
}
13871395

@@ -1479,6 +1487,10 @@ int QgsSpatiaLiteProvider::computeSizeFromMultiWKB3D( const unsigned char *p_in,
14791487
}
14801488
}
14811489
break;
1490+
1491+
case QgsWkbTypes::UnknownGeometry:
1492+
case QgsWkbTypes::NullGeometry:
1493+
break;
14821494
}
14831495
}
14841496

@@ -2389,169 +2401,8 @@ void QgsSpatiaLiteProvider::convertFromGeosWKB3D( const unsigned char *blob,
23892401
}
23902402
break;
23912403

2392-
case QgsWkbTypes::GeometryCollection:
2393-
entities = gaiaImport32( p_in, little_endian, endian_arch );
2394-
p_in += 4;
2395-
gaiaExport32( p_out, entities, 1, endian_arch );
2396-
p_out += 4;
2397-
for ( ie = 0; ie < entities; ie++ )
2398-
{
2399-
QgsWkbTypes::Type type2 = static_cast< QgsWkbTypes::Type >( gaiaImport32( p_in + 1, little_endian, endian_arch ) );
2400-
p_in += 5;
2401-
*p_out++ = 0x01;
2402-
switch ( QgsWkbTypes::geometryType( type2 ) )
2403-
{
2404-
case QgsWkbTypes::PointGeometry:
2405-
switch ( nDims )
2406-
{
2407-
case GAIA_XY_Z_M:
2408-
gaiaExport32( p_out, GAIA_POINTZM, 1, endian_arch );
2409-
break;
2410-
case GAIA_XY_Z:
2411-
gaiaExport32( p_out, GAIA_POINTZ, 1, endian_arch );
2412-
break;
2413-
case GAIA_XY_M:
2414-
gaiaExport32( p_out, GAIA_POINTM, 1, endian_arch );
2415-
break;
2416-
default:
2417-
gaiaExport32( p_out, GAIA_POINT, 1, endian_arch );
2418-
break;
2419-
}
2420-
break;
2421-
case QgsWkbTypes::LineGeometry:
2422-
switch ( nDims )
2423-
{
2424-
case GAIA_XY_Z_M:
2425-
gaiaExport32( p_out, GAIA_LINESTRINGZM, 1, endian_arch );
2426-
break;
2427-
case GAIA_XY_Z:
2428-
gaiaExport32( p_out, GAIA_LINESTRINGZ, 1, endian_arch );
2429-
break;
2430-
case GAIA_XY_M:
2431-
gaiaExport32( p_out, GAIA_LINESTRINGM, 1, endian_arch );
2432-
break;
2433-
default:
2434-
gaiaExport32( p_out, GAIA_LINESTRING, 1, endian_arch );
2435-
break;
2436-
}
2437-
break;
2438-
case QgsWkbTypes::PolygonGeometry:
2439-
switch ( nDims )
2440-
{
2441-
case GAIA_XY_Z_M:
2442-
gaiaExport32( p_out, GAIA_POLYGONZM, 1, endian_arch );
2443-
break;
2444-
case GAIA_XY_Z:
2445-
gaiaExport32( p_out, GAIA_POLYGONZ, 1, endian_arch );
2446-
break;
2447-
case GAIA_XY_M:
2448-
gaiaExport32( p_out, GAIA_POLYGONM, 1, endian_arch );
2449-
break;
2450-
default:
2451-
gaiaExport32( p_out, GAIA_POLYGON, 1, endian_arch );
2452-
break;
2453-
}
2454-
break;
2455-
}
2456-
p_out += 4;
2457-
switch ( QgsWkbTypes::geometryType( type2 ) )
2458-
{
2459-
// setting sub-Geometry values
2460-
case QgsWkbTypes::PointGeometry:
2461-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2462-
gaiaExport64( p_out, coord, 1, endian_arch ); // X
2463-
p_in += sizeof( double );
2464-
p_out += sizeof( double );
2465-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2466-
gaiaExport64( p_out, coord, 1, endian_arch ); // Y
2467-
p_in += sizeof( double );
2468-
p_out += sizeof( double );
2469-
if ( nDims == GAIA_XY_Z || nDims == GAIA_XY_Z_M )
2470-
{
2471-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2472-
gaiaExport64( p_out, coord, 1, endian_arch ); // Z
2473-
p_in += sizeof( double );
2474-
p_out += sizeof( double );
2475-
}
2476-
if ( nDims == GAIA_XY_M || nDims == GAIA_XY_Z_M )
2477-
{
2478-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2479-
gaiaExport64( p_out, coord, 1, endian_arch ); // M
2480-
p_in += sizeof( double );
2481-
p_out += sizeof( double );
2482-
}
2483-
break;
2484-
case QgsWkbTypes::LineGeometry:
2485-
points = gaiaImport32( p_in, little_endian, endian_arch );
2486-
p_in += 4;
2487-
gaiaExport32( p_out, points, 1, endian_arch );
2488-
p_out += 4;
2489-
for ( iv = 0; iv < points; iv++ )
2490-
{
2491-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2492-
gaiaExport64( p_out, coord, 1, endian_arch ); // X
2493-
p_in += sizeof( double );
2494-
p_out += sizeof( double );
2495-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2496-
gaiaExport64( p_out, coord, 1, endian_arch ); // Y
2497-
p_in += sizeof( double );
2498-
p_out += sizeof( double );
2499-
if ( nDims == GAIA_XY_Z || nDims == GAIA_XY_Z_M )
2500-
{
2501-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2502-
gaiaExport64( p_out, coord, 1, endian_arch ); // Z
2503-
p_in += sizeof( double );
2504-
p_out += sizeof( double );
2505-
}
2506-
if ( nDims == GAIA_XY_M || nDims == GAIA_XY_Z_M )
2507-
{
2508-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2509-
gaiaExport64( p_out, coord, 1, endian_arch ); // M
2510-
p_in += sizeof( double );
2511-
p_out += sizeof( double );
2512-
}
2513-
}
2514-
break;
2515-
case QgsWkbTypes::PolygonGeometry:
2516-
rings = gaiaImport32( p_in, little_endian, endian_arch );
2517-
p_in += 4;
2518-
gaiaExport32( p_out, rings, 1, endian_arch );
2519-
p_out += 4;
2520-
for ( ib = 0; ib < rings; ib++ )
2521-
{
2522-
points = gaiaImport32( p_in, little_endian, endian_arch );
2523-
p_in += 4;
2524-
gaiaExport32( p_out, points, 1, endian_arch );
2525-
p_out += 4;
2526-
for ( iv = 0; iv < points; iv++ )
2527-
{
2528-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2529-
gaiaExport64( p_out, coord, 1, endian_arch ); // X
2530-
p_in += sizeof( double );
2531-
p_out += sizeof( double );
2532-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2533-
gaiaExport64( p_out, coord, 1, endian_arch ); // Y
2534-
p_in += sizeof( double );
2535-
p_out += sizeof( double );
2536-
if ( nDims == GAIA_XY_Z || nDims == GAIA_XY_Z_M )
2537-
{
2538-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2539-
gaiaExport64( p_out, coord, 1, endian_arch ); // Z
2540-
p_in += sizeof( double );
2541-
p_out += sizeof( double );
2542-
}
2543-
if ( nDims == GAIA_XY_M || nDims == GAIA_XY_Z_M )
2544-
{
2545-
coord = gaiaImport64( p_in, little_endian, endian_arch );
2546-
gaiaExport64( p_out, coord, 1, endian_arch ); // M
2547-
p_in += sizeof( double );
2548-
p_out += sizeof( double );
2549-
}
2550-
}
2551-
}
2552-
break;
2553-
}
2554-
}
2404+
case QgsWkbTypes::UnknownGeometry:
2405+
case QgsWkbTypes::NullGeometry:
25552406
break;
25562407
}
25572408
}
@@ -2727,6 +2578,10 @@ void QgsSpatiaLiteProvider::convertFromGeosWKB3D( const unsigned char *blob,
27272578
}
27282579
}
27292580
break;
2581+
2582+
case QgsWkbTypes::UnknownGeometry:
2583+
case QgsWkbTypes::NullGeometry:
2584+
break;
27302585
}
27312586
}
27322587
}

0 commit comments

Comments
 (0)
Please sign in to comment.