23 |
23 |
unsigned char* QgsFeatureRendererV2::_getPoint( QPointF& pt, QgsRenderContext& context, unsigned char* wkb )
|
24 |
24 |
{
|
25 |
25 |
wkb++; // jump over endian info
|
26 |
|
unsigned int wkbType = *(( int* ) wkb );
|
|
26 |
unsigned int wkbType;
|
|
27 |
memcpy( &wkbType, wkb, sizeof( wkbType ) );
|
27 |
28 |
wkb += sizeof( unsigned int );
|
28 |
29 |
|
29 |
|
double x = *(( double * ) wkb ); wkb += sizeof( double );
|
30 |
|
double y = *(( double * ) wkb ); wkb += sizeof( double );
|
|
30 |
double x;
|
|
31 |
memcpy( &x, wkb, sizeof( x ) );
|
|
32 |
wkb += sizeof( double );
|
|
33 |
double y;
|
|
34 |
memcpy( &y, wkb, sizeof( y ));
|
|
35 |
wkb += sizeof( double );
|
31 |
36 |
|
32 |
37 |
if ( wkbType == QGis::WKBPolygon25D )
|
33 |
38 |
wkb += sizeof( double );
|
... | ... | |
47 |
52 |
unsigned char* QgsFeatureRendererV2::_getLineString( QPolygonF& pts, QgsRenderContext& context, unsigned char* wkb )
|
48 |
53 |
{
|
49 |
54 |
wkb++; // jump over endian info
|
50 |
|
unsigned int wkbType = *(( int* ) wkb );
|
|
55 |
unsigned int wkbType;
|
|
56 |
memcpy( &wkbType, wkb, sizeof( wkbType ) );
|
51 |
57 |
wkb += sizeof( unsigned int );
|
52 |
|
unsigned int nPoints = *(( int* ) wkb );
|
|
58 |
unsigned int nPoints;
|
|
59 |
memcpy( &nPoints, wkb, sizeof( nPoints ) );
|
53 |
60 |
wkb += sizeof( unsigned int );
|
54 |
61 |
|
55 |
62 |
bool hasZValue = ( wkbType == QGis::WKBLineString25D );
|
... | ... | |
72 |
79 |
|
73 |
80 |
for ( unsigned int i = 0; i < nPoints; ++i )
|
74 |
81 |
{
|
75 |
|
x = *(( double * ) wkb );
|
|
82 |
memcpy( &x, wkb, sizeof( x ) );
|
76 |
83 |
wkb += sizeof( double );
|
77 |
|
y = *(( double * ) wkb );
|
|
84 |
memcpy( &y, wkb, sizeof( y ) );
|
78 |
85 |
wkb += sizeof( double );
|
79 |
86 |
|
80 |
87 |
if ( hasZValue ) // ignore Z value
|
... | ... | |
102 |
109 |
unsigned char* QgsFeatureRendererV2::_getPolygon( QPolygonF& pts, QList<QPolygonF>& holes, QgsRenderContext& context, unsigned char* wkb )
|
103 |
110 |
{
|
104 |
111 |
wkb++; // jump over endian info
|
105 |
|
unsigned int wkbType = *(( int* ) wkb );
|
|
112 |
unsigned int wkbType;
|
|
113 |
memcpy( &wkbType, wkb, sizeof( wkbType ) );
|
106 |
114 |
wkb += sizeof( unsigned int ); // jump over wkb type
|
107 |
|
unsigned int numRings = *(( int* ) wkb );
|
|
115 |
unsigned int numRings;
|
|
116 |
memcpy( &numRings, wkb, sizeof( numRings ) );
|
108 |
117 |
wkb += sizeof( unsigned int );
|
109 |
118 |
|
110 |
119 |
if ( numRings == 0 ) // sanity check for zero rings in polygon
|
... | ... | |
124 |
133 |
|
125 |
134 |
for ( unsigned int idx = 0; idx < numRings; idx++ )
|
126 |
135 |
{
|
127 |
|
unsigned int nPoints = *(( int* )wkb );
|
|
136 |
unsigned int nPoints;
|
|
137 |
memcpy( &nPoints, wkb, sizeof( nPoints ) );
|
128 |
138 |
wkb += sizeof( unsigned int );
|
129 |
139 |
|
130 |
140 |
QPolygonF poly( nPoints );
|
... | ... | |
132 |
142 |
// Extract the points from the WKB and store in a pair of vectors.
|
133 |
143 |
for ( unsigned int jdx = 0; jdx < nPoints; jdx++ )
|
134 |
144 |
{
|
135 |
|
x = *(( double * ) wkb ); wkb += sizeof( double );
|
136 |
|
y = *(( double * ) wkb ); wkb += sizeof( double );
|
|
145 |
memcpy( &x, wkb, sizeof( x ) );
|
|
146 |
wkb += sizeof( double );
|
|
147 |
memcpy( &y, wkb, sizeof( y ) );
|
|
148 |
wkb += sizeof( double );
|
137 |
149 |
|
138 |
150 |
poly[jdx] = QPointF( x, y );
|
139 |
151 |
|
... | ... | |
254 |
266 |
}
|
255 |
267 |
|
256 |
268 |
unsigned char* wkb = geom->asWkb();
|
257 |
|
unsigned int num = *(( int* )( wkb + 5 ) );
|
|
269 |
unsigned int num;
|
|
270 |
memcpy( &num, wkb + 5, sizeof( num ) );
|
258 |
271 |
unsigned char* ptr = wkb + 9;
|
259 |
272 |
QPointF pt;
|
260 |
273 |
|
... | ... | |
279 |
292 |
}
|
280 |
293 |
|
281 |
294 |
unsigned char* wkb = geom->asWkb();
|
282 |
|
unsigned int num = *(( int* )( wkb + 5 ) );
|
|
295 |
unsigned int num;
|
|
296 |
memcpy( &num, wkb + 5, sizeof( num ) );
|
283 |
297 |
unsigned char* ptr = wkb + 9;
|
284 |
298 |
QPolygonF pts;
|
285 |
299 |
|
... | ... | |
304 |
318 |
}
|
305 |
319 |
|
306 |
320 |
unsigned char* wkb = geom->asWkb();
|
307 |
|
unsigned int num = *(( int* )( wkb + 5 ) );
|
|
321 |
unsigned int num;
|
|
322 |
memcpy( &num, wkb + 5, sizeof( num ) );
|
308 |
323 |
unsigned char* ptr = wkb + 9;
|
309 |
324 |
QPolygonF pts;
|
310 |
325 |
QList<QPolygonF> holes;
|