0000: 2f 2a 0a 0a 20 67 67 5f 77 6b 62 2e 63 20 2d 2d /*.. gg_wkb.c --
0010: 20 47 61 69 61 20 63 6f 6d 6d 6f 6e 20 73 75 70 Gaia common sup
0020: 70 6f 72 74 20 66 6f 72 20 57 4b 42 20 65 6e 63 port for WKB enc
0030: 6f 64 65 64 20 67 65 6f 6d 65 74 72 69 65 73 0a oded geometries.
0040: 20 20 0a 20 76 65 72 73 69 6f 6e 20 35 2e 31 2e . version 5.1.
0050: 30 2c 20 32 30 32 33 20 41 75 67 75 73 74 20 34 0, 2023 August 4
0060: 0a 0a 20 41 75 74 68 6f 72 3a 20 53 61 6e 64 72 .. Author: Sandr
0070: 6f 20 46 75 72 69 65 72 69 20 61 2e 66 75 72 69 o Furieri a.furi
0080: 65 72 69 40 6c 71 74 2e 69 74 0a 0a 20 2d 2d 2d eri@lqt.it.. ---
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 0a 20 56 65 ----------. . Ve
00e0: 72 73 69 6f 6e 3a 20 4d 50 4c 20 31 2e 31 2f 47 rsion: MPL 1.1/G
00f0: 50 4c 20 32 2e 30 2f 4c 47 50 4c 20 32 2e 31 0a PL 2.0/LGPL 2.1.
0100: 20 0a 20 54 68 65 20 63 6f 6e 74 65 6e 74 73 20 . The contents
0110: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 61 72 65 of this file are
0120: 20 73 75 62 6a 65 63 74 20 74 6f 20 74 68 65 20 subject to the
0130: 4d 6f 7a 69 6c 6c 61 20 50 75 62 6c 69 63 20 4c Mozilla Public L
0140: 69 63 65 6e 73 65 20 56 65 72 73 69 6f 6e 0a 20 icense Version.
0150: 31 2e 31 20 28 74 68 65 20 22 4c 69 63 65 6e 73 1.1 (the "Licens
0160: 65 22 29 3b 20 79 6f 75 20 6d 61 79 20 6e 6f 74 e"); you may not
0170: 20 75 73 65 20 74 68 69 73 20 66 69 6c 65 20 65 use this file e
0180: 78 63 65 70 74 20 69 6e 20 63 6f 6d 70 6c 69 61 xcept in complia
0190: 6e 63 65 20 77 69 74 68 0a 20 74 68 65 20 4c 69 nce with. the Li
01a0: 63 65 6e 73 65 2e 20 59 6f 75 20 6d 61 79 20 6f cense. You may o
01b0: 62 74 61 69 6e 20 61 20 63 6f 70 79 20 6f 66 20 btain a copy of
01c0: 74 68 65 20 4c 69 63 65 6e 73 65 20 61 74 0a 20 the License at.
01d0: 68 74 74 70 3a 2f 2f 77 77 77 2e 6d 6f 7a 69 6c http://www.mozil
01e0: 6c 61 2e 6f 72 67 2f 4d 50 4c 2f 0a 20 0a 53 6f la.org/MPL/. .So
01f0: 66 74 77 61 72 65 20 64 69 73 74 72 69 62 75 74 ftware distribut
0200: 65 64 20 75 6e 64 65 72 20 74 68 65 20 4c 69 63 ed under the Lic
0210: 65 6e 73 65 20 69 73 20 64 69 73 74 72 69 62 75 ense is distribu
0220: 74 65 64 20 6f 6e 20 61 6e 20 22 41 53 20 49 53 ted on an "AS IS
0230: 22 20 62 61 73 69 73 2c 0a 57 49 54 48 4f 55 54 " basis,.WITHOUT
0240: 20 57 41 52 52 41 4e 54 59 20 4f 46 20 41 4e 59 WARRANTY OF ANY
0250: 20 4b 49 4e 44 2c 20 65 69 74 68 65 72 20 65 78 KIND, either ex
0260: 70 72 65 73 73 20 6f 72 20 69 6d 70 6c 69 65 64 press or implied
0270: 2e 20 53 65 65 20 74 68 65 20 4c 69 63 65 6e 73 . See the Licens
0280: 65 0a 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 e.for the specif
0290: 69 63 20 6c 61 6e 67 75 61 67 65 20 67 6f 76 65 ic language gove
02a0: 72 6e 69 6e 67 20 72 69 67 68 74 73 20 61 6e 64 rning rights and
02b0: 20 6c 69 6d 69 74 61 74 69 6f 6e 73 20 75 6e 64 limitations und
02c0: 65 72 20 74 68 65 0a 4c 69 63 65 6e 73 65 2e 0a er the.License..
02d0: 0a 54 68 65 20 4f 72 69 67 69 6e 61 6c 20 43 6f .The Original Co
02e0: 64 65 20 69 73 20 74 68 65 20 53 70 61 74 69 61 de is the Spatia
02f0: 4c 69 74 65 20 6c 69 62 72 61 72 79 0a 0a 54 68 Lite library..Th
0300: 65 20 49 6e 69 74 69 61 6c 20 44 65 76 65 6c 6f e Initial Develo
0310: 70 65 72 20 6f 66 20 74 68 65 20 4f 72 69 67 69 per of the Origi
0320: 6e 61 6c 20 43 6f 64 65 20 69 73 20 41 6c 65 73 nal Code is Ales
0330: 73 61 6e 64 72 6f 20 46 75 72 69 65 72 69 0a 20 sandro Furieri.
0340: 0a 50 6f 72 74 69 6f 6e 73 20 63 72 65 61 74 65 .Portions create
0350: 64 20 62 79 20 74 68 65 20 49 6e 69 74 69 61 6c d by the Initial
0360: 20 44 65 76 65 6c 6f 70 65 72 20 61 72 65 20 43 Developer are C
0370: 6f 70 79 72 69 67 68 74 20 28 43 29 20 32 30 30 opyright (C) 200
0380: 38 2d 32 30 32 33 0a 74 68 65 20 49 6e 69 74 69 8-2023.the Initi
0390: 61 6c 20 44 65 76 65 6c 6f 70 65 72 2e 20 41 6c al Developer. Al
03a0: 6c 20 52 69 67 68 74 73 20 52 65 73 65 72 76 65 l Rights Reserve
03b0: 64 2e 0a 0a 43 6f 6e 74 72 69 62 75 74 6f 72 28 d...Contributor(
03c0: 73 29 3a 0a 0a 41 6c 74 65 72 6e 61 74 69 76 65 s):..Alternative
03d0: 6c 79 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 ly, the contents
03e0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 6d 61 of this file ma
03f0: 79 20 62 65 20 75 73 65 64 20 75 6e 64 65 72 20 y be used under
0400: 74 68 65 20 74 65 72 6d 73 20 6f 66 0a 65 69 74 the terms of.eit
0410: 68 65 72 20 74 68 65 20 47 4e 55 20 47 65 6e 65 her the GNU Gene
0420: 72 61 6c 20 50 75 62 6c 69 63 20 4c 69 63 65 6e ral Public Licen
0430: 73 65 20 56 65 72 73 69 6f 6e 20 32 20 6f 72 20 se Version 2 or
0440: 6c 61 74 65 72 20 28 74 68 65 20 22 47 50 4c 22 later (the "GPL"
0450: 29 2c 20 6f 72 0a 74 68 65 20 47 4e 55 20 4c 65 ), or.the GNU Le
0460: 73 73 65 72 20 47 65 6e 65 72 61 6c 20 50 75 62 sser General Pub
0470: 6c 69 63 20 4c 69 63 65 6e 73 65 20 56 65 72 73 lic License Vers
0480: 69 6f 6e 20 32 2e 31 20 6f 72 20 6c 61 74 65 72 ion 2.1 or later
0490: 20 28 74 68 65 20 22 4c 47 50 4c 22 29 2c 0a 69 (the "LGPL"),.i
04a0: 6e 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 n which case the
04b0: 20 70 72 6f 76 69 73 69 6f 6e 73 20 6f 66 20 74 provisions of t
04c0: 68 65 20 47 50 4c 20 6f 72 20 74 68 65 20 4c 47 he GPL or the LG
04d0: 50 4c 20 61 72 65 20 61 70 70 6c 69 63 61 62 6c PL are applicabl
04e0: 65 20 69 6e 73 74 65 61 64 0a 6f 66 20 74 68 6f e instead.of tho
04f0: 73 65 20 61 62 6f 76 65 2e 20 49 66 20 79 6f 75 se above. If you
0500: 20 77 69 73 68 20 74 6f 20 61 6c 6c 6f 77 20 75 wish to allow u
0510: 73 65 20 6f 66 20 79 6f 75 72 20 76 65 72 73 69 se of your versi
0520: 6f 6e 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 on of this file
0530: 6f 6e 6c 79 0a 75 6e 64 65 72 20 74 68 65 20 74 only.under the t
0540: 65 72 6d 73 20 6f 66 20 65 69 74 68 65 72 20 74 erms of either t
0550: 68 65 20 47 50 4c 20 6f 72 20 74 68 65 20 4c 47 he GPL or the LG
0560: 50 4c 2c 20 61 6e 64 20 6e 6f 74 20 74 6f 20 61 PL, and not to a
0570: 6c 6c 6f 77 20 6f 74 68 65 72 73 20 74 6f 0a 75 llow others to.u
0580: 73 65 20 79 6f 75 72 20 76 65 72 73 69 6f 6e 20 se your version
0590: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 75 6e 64 of this file und
05a0: 65 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 er the terms of
05b0: 74 68 65 20 4d 50 4c 2c 20 69 6e 64 69 63 61 74 the MPL, indicat
05c0: 65 20 79 6f 75 72 0a 64 65 63 69 73 69 6f 6e 20 e your.decision
05d0: 62 79 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 by deleting the
05e0: 70 72 6f 76 69 73 69 6f 6e 73 20 61 62 6f 76 65 provisions above
05f0: 20 61 6e 64 20 72 65 70 6c 61 63 65 20 74 68 65 and replace the
0600: 6d 20 77 69 74 68 20 74 68 65 20 6e 6f 74 69 63 m with the notic
0610: 65 0a 61 6e 64 20 6f 74 68 65 72 20 70 72 6f 76 e.and other prov
0620: 69 73 69 6f 6e 73 20 72 65 71 75 69 72 65 64 20 isions required
0630: 62 79 20 74 68 65 20 47 50 4c 20 6f 72 20 74 68 by the GPL or th
0640: 65 20 4c 47 50 4c 2e 20 49 66 20 79 6f 75 20 64 e LGPL. If you d
0650: 6f 20 6e 6f 74 20 64 65 6c 65 74 65 0a 74 68 65 o not delete.the
0660: 20 70 72 6f 76 69 73 69 6f 6e 73 20 61 62 6f 76 provisions abov
0670: 65 2c 20 61 20 72 65 63 69 70 69 65 6e 74 20 6d e, a recipient m
0680: 61 79 20 75 73 65 20 79 6f 75 72 20 76 65 72 73 ay use your vers
0690: 69 6f 6e 20 6f 66 20 74 68 69 73 20 66 69 6c 65 ion of this file
06a0: 20 75 6e 64 65 72 0a 74 68 65 20 74 65 72 6d 73 under.the terms
06b0: 20 6f 66 20 61 6e 79 20 6f 6e 65 20 6f 66 20 74 of any one of t
06c0: 68 65 20 4d 50 4c 2c 20 74 68 65 20 47 50 4c 20 he MPL, the GPL
06d0: 6f 72 20 74 68 65 20 4c 47 50 4c 2e 0a 20 0a 2a or the LGPL.. .*
06e0: 2f 0a 0a 23 69 6e 63 6c 75 64 65 20 3c 73 79 73 /..#include <sys
06f0: 2f 74 79 70 65 73 2e 68 3e 0a 23 69 6e 63 6c 75 /types.h>.#inclu
0700: 64 65 20 3c 73 74 64 6c 69 62 2e 68 3e 0a 23 69 de <stdlib.h>.#i
0710: 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68 3e nclude <stdio.h>
0720: 0a 23 69 6e 63 6c 75 64 65 20 3c 66 6c 6f 61 74 .#include <float
0730: 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 .h>.#include <st
0740: 72 69 6e 67 2e 68 3e 0a 0a 23 69 66 20 64 65 66 ring.h>..#if def
0750: 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 26 26 20 ined(_WIN32) &&
0760: 21 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57 !defined(__MINGW
0770: 33 32 5f 5f 29 0a 23 69 6e 63 6c 75 64 65 20 22 32__).#include "
0780: 63 6f 6e 66 69 67 2d 6d 73 76 63 2e 68 22 0a 23 config-msvc.h".#
0790: 65 6c 73 65 0a 23 69 6e 63 6c 75 64 65 20 22 63 else.#include "c
07a0: 6f 6e 66 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a onfig.h".#endif.
07b0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 70 61 74 69 .#include <spati
07c0: 61 6c 69 74 65 2f 73 71 6c 69 74 65 2e 68 3e 0a alite/sqlite.h>.
07d0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 70 61 74 69 .#include <spati
07e0: 61 6c 69 74 65 2f 67 61 69 61 67 65 6f 2e 68 3e alite/gaiageo.h>
07f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 70 61 74 69 .#include <spati
0800: 61 6c 69 74 65 2f 67 65 6f 70 61 63 6b 61 67 65 alite/geopackage
0810: 2e 68 3e 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 .h>..static void
0820: 0a 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 20 28 .ParseWkbPoint (
0830: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
0840: 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 geo).{./* decode
0850: 73 20 61 20 50 4f 49 4e 54 20 66 72 6f 6d 20 57 s a POINT from W
0860: 4b 42 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 KB */. double
0870: 20 78 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 79 x;. double y
0880: 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 ;. if (geo->s
0890: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
08a0: 74 20 2b 20 31 36 29 0a 09 72 65 74 75 72 6e 3b t + 16)..return;
08b0: 0a 20 20 20 20 78 20 3d 20 67 61 69 61 49 6d 70 . x = gaiaImp
08c0: 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort64 (geo->blob
08d0: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
08e0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
08f0: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
0900: 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d 70 6f y = gaiaImpo
0910: 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt64 (geo->blob
0920: 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b + (geo->offset +
0930: 20 38 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 8), geo->endian
0940: 2c 0a 09 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 ,... geo->e
0950: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
0960: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 geo->offset +=
0970: 31 36 3b 0a 20 20 20 20 67 61 69 61 41 64 64 50 16;. gaiaAddP
0980: 6f 69 6e 74 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 ointToGeomColl (
0990: 67 65 6f 2c 20 78 2c 20 79 29 3b 0a 7d 0a 0a 73 geo, x, y);.}..s
09a0: 74 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 tatic void.Parse
09b0: 57 6b 62 50 6f 69 6e 74 5a 20 28 67 61 69 61 47 WkbPointZ (gaiaG
09c0: 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a eomCollPtr geo).
09d0: 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 50 {./* decodes a P
09e0: 4f 49 4e 54 5a 20 66 72 6f 6d 20 57 4b 42 20 2a OINTZ from WKB *
09f0: 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a /. double x;.
0a00: 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 double y;.
0a10: 20 20 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 double z;.
0a20: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
0a30: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 32 34 geo->offset + 24
0a40: 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 78 )..return;. x
0a50: 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
0a60: 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f (geo->blob + geo
0a70: 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 ->offset, geo->e
0a80: 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 ndian, geo->endi
0a90: 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 79 20 an_arch);. y
0aa0: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
0ab0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f geo->blob + (geo
0ac0: 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 2c 20 67 ->offset + 8), g
0ad0: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 20 20 eo->endian,...
0ae0: 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f geo->endian_
0af0: 61 72 63 68 29 3b 0a 20 20 20 20 7a 20 3d 20 67 arch);. z = g
0b00: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
0b10: 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f ->blob + (geo->o
0b20: 66 66 73 65 74 20 2b 20 31 36 29 2c 20 67 65 6f ffset + 16), geo
0b30: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 ->endian,...
0b40: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 geo->endian_ar
0b50: 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 ch);. geo->of
0b60: 66 73 65 74 20 2b 3d 20 32 34 3b 0a 20 20 20 20 fset += 24;.
0b70: 67 61 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 65 gaiaAddPointToGe
0b80: 6f 6d 43 6f 6c 6c 58 59 5a 20 28 67 65 6f 2c 20 omCollXYZ (geo,
0b90: 78 2c 20 79 2c 20 7a 29 3b 0a 7d 0a 0a 73 74 61 x, y, z);.}..sta
0ba0: 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b tic void.ParseWk
0bb0: 62 50 6f 69 6e 74 4d 20 28 67 61 69 61 47 65 6f bPointM (gaiaGeo
0bc0: 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a mCollPtr geo).{.
0bd0: 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 50 4f 49 /* decodes a POI
0be0: 4e 54 4d 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a NTM from WKB */.
0bf0: 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
0c00: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
0c10: 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 20 69 66 double m;. if
0c20: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
0c30: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 32 34 29 0a o->offset + 24).
0c40: 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 78 20 3d .return;. x =
0c50: 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 gaiaImport64 (g
0c60: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
0c70: 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 offset, geo->end
0c80: 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e ian, geo->endian
0c90: 5f 61 72 63 68 29 3b 0a 20 20 20 20 79 20 3d 20 _arch);. y =
0ca0: 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 gaiaImport64 (ge
0cb0: 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e o->blob + (geo->
0cc0: 6f 66 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f offset + 8), geo
0cd0: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 ->endian,...
0ce0: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 geo->endian_ar
0cf0: 63 68 29 3b 0a 20 20 20 20 6d 20 3d 20 67 61 69 ch);. m = gai
0d00: 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e aImport64 (geo->
0d10: 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 blob + (geo->off
0d20: 73 65 74 20 2b 20 31 36 29 2c 20 67 65 6f 2d 3e set + 16), geo->
0d30: 65 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 20 20 endian,...
0d40: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
0d50: 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 );. geo->offs
0d60: 65 74 20 2b 3d 20 32 34 3b 0a 20 20 20 20 67 61 et += 24;. ga
0d70: 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 65 6f 6d iaAddPointToGeom
0d80: 43 6f 6c 6c 58 59 4d 20 28 67 65 6f 2c 20 78 2c CollXYM (geo, x,
0d90: 20 79 2c 20 6d 29 3b 0a 7d 0a 0a 73 74 61 74 69 y, m);.}..stati
0da0: 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 50 c void.ParseWkbP
0db0: 6f 69 6e 74 5a 4d 20 28 67 61 69 61 47 65 6f 6d ointZM (gaiaGeom
0dc0: 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f CollPtr geo).{./
0dd0: 2a 20 64 65 63 6f 64 65 73 20 61 20 50 4f 49 4e * decodes a POIN
0de0: 54 5a 4d 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a TZM from WKB */.
0df0: 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
0e00: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
0e10: 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f double z;. do
0e20: 75 62 6c 65 20 6d 3b 0a 20 20 20 20 69 66 20 28 uble m;. if (
0e30: 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d geo->size < geo-
0e40: 3e 6f 66 66 73 65 74 20 2b 20 33 32 29 0a 09 72 >offset + 32)..r
0e50: 65 74 75 72 6e 3b 0a 20 20 20 20 78 20 3d 20 67 eturn;. x = g
0e60: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
0e70: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
0e80: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
0e90: 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 n, geo->endian_a
0ea0: 72 63 68 29 3b 0a 20 20 20 20 79 20 3d 20 67 61 rch);. y = ga
0eb0: 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d iaImport64 (geo-
0ec0: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
0ed0: 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f 2d 3e fset + 8), geo->
0ee0: 65 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 20 20 endian,...
0ef0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
0f00: 29 3b 0a 20 20 20 20 7a 20 3d 20 67 61 69 61 49 );. z = gaiaI
0f10: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
0f20: 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 ob + (geo->offse
0f30: 74 20 2b 20 31 36 29 2c 20 67 65 6f 2d 3e 65 6e t + 16), geo->en
0f40: 64 69 61 6e 2c 0a 09 09 20 20 20 20 20 20 67 65 dian,... ge
0f50: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
0f60: 0a 20 20 20 20 6d 20 3d 20 67 61 69 61 49 6d 70 . m = gaiaImp
0f70: 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort64 (geo->blob
0f80: 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 + (geo->offset
0f90: 2b 20 32 34 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 + 24), geo->endi
0fa0: 61 6e 2c 0a 09 09 20 20 20 20 20 20 67 65 6f 2d an,... geo-
0fb0: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 >endian_arch);.
0fc0: 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b geo->offset +
0fd0: 3d 20 33 32 3b 0a 20 20 20 20 67 61 69 61 41 64 = 32;. gaiaAd
0fe0: 64 50 6f 69 6e 74 54 6f 47 65 6f 6d 43 6f 6c 6c dPointToGeomColl
0ff0: 58 59 5a 4d 20 28 67 65 6f 2c 20 78 2c 20 79 2c XYZM (geo, x, y,
1000: 20 7a 2c 20 6d 29 3b 0a 7d 0a 0a 73 74 61 74 69 z, m);.}..stati
1010: 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 4c c void.ParseWkbL
1020: 69 6e 65 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c ine (gaiaGeomCol
1030: 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 lPtr geo).{./* d
1040: 65 63 6f 64 65 73 20 61 20 4c 49 4e 45 53 54 52 ecodes a LINESTR
1050: 49 4e 47 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a ING from WKB */.
1060: 20 20 20 20 69 6e 74 20 70 6f 69 6e 74 73 3b 0a int points;.
1070: 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 20 int iv;.
1080: 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f double x;. do
1090: 75 62 6c 65 20 79 3b 0a 20 20 20 20 67 61 69 61 uble y;. gaia
10a0: 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 6c 69 LinestringPtr li
10b0: 6e 65 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d ne;. if (geo-
10c0: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
10d0: 73 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e set + 4)..return
10e0: 3b 0a 20 20 20 20 70 6f 69 6e 74 73 20 3d 0a 09 ;. points =..
10f0: 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 gaiaImport32 (ge
1100: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
1110: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
1120: 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f an, geo->endian_
1130: 61 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e arch);. geo->
1140: 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 offset += 4;.
1150: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
1160: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 geo->offset + (
1170: 31 36 20 2a 20 70 6f 69 6e 74 73 29 29 0a 09 72 16 * points))..r
1180: 65 74 75 72 6e 3b 0a 20 20 20 20 6c 69 6e 65 20 eturn;. line
1190: 3d 20 67 61 69 61 41 64 64 4c 69 6e 65 73 74 72 = gaiaAddLinestr
11a0: 69 6e 67 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 ingToGeomColl (g
11b0: 65 6f 2c 20 70 6f 69 6e 74 73 29 3b 0a 20 20 20 eo, points);.
11c0: 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 for (iv = 0; iv
11d0: 20 3c 20 70 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 < points; iv++)
11e0: 0a 20 20 20 20 20 20 7b 0a 09 20 20 78 20 3d 20 . {.. x =
11f0: 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 gaiaImport64 (ge
1200: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
1210: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
1220: 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e an,.... geo->
1230: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
1240: 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 y = gaiaImport6
1250: 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 4 (geo->blob + (
1260: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 geo->offset + 8)
1270: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
1280: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
1290: 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 61 69 61 n_arch);.. gaia
12a0: 53 65 74 50 6f 69 6e 74 20 28 6c 69 6e 65 2d 3e SetPoint (line->
12b0: 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 Coords, iv, x, y
12c0: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
12d0: 74 20 2b 3d 20 31 36 3b 0a 20 20 20 20 20 20 7d t += 16;. }
12e0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a .}..static void.
12f0: 50 61 72 73 65 57 6b 62 4c 69 6e 65 5a 20 28 67 ParseWkbLineZ (g
1300: 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 aiaGeomCollPtr g
1310: 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 eo).{./* decodes
1320: 20 61 20 4c 49 4e 45 53 54 52 49 4e 47 5a 20 66 a LINESTRINGZ f
1330: 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 rom WKB */. i
1340: 6e 74 20 70 6f 69 6e 74 73 3b 0a 20 20 20 20 69 nt points;. i
1350: 6e 74 20 69 76 3b 0a 20 20 20 20 64 6f 75 62 6c nt iv;. doubl
1360: 65 20 78 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 e x;. double
1370: 79 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 7a 3b y;. double z;
1380: 0a 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 . gaiaLinestr
1390: 69 6e 67 50 74 72 20 6c 69 6e 65 3b 0a 20 20 20 ingPtr line;.
13a0: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
13b0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 geo->offset + 4
13c0: 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 70 )..return;. p
13d0: 6f 69 6e 74 73 20 3d 0a 09 67 61 69 61 49 6d 70 oints =..gaiaImp
13e0: 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort32 (geo->blob
13f0: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
1400: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
1410: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
1420: 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 geo->offset
1430: 2b 3d 20 34 3b 0a 20 20 20 20 69 66 20 28 67 65 += 4;. if (ge
1440: 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f o->size < geo->o
1450: 66 66 73 65 74 20 2b 20 28 32 34 20 2a 20 70 6f ffset + (24 * po
1460: 69 6e 74 73 29 29 0a 09 72 65 74 75 72 6e 3b 0a ints))..return;.
1470: 20 20 20 20 6c 69 6e 65 20 3d 20 67 61 69 61 41 line = gaiaA
1480: 64 64 4c 69 6e 65 73 74 72 69 6e 67 54 6f 47 65 ddLinestringToGe
1490: 6f 6d 43 6f 6c 6c 20 28 67 65 6f 2c 20 70 6f 69 omColl (geo, poi
14a0: 6e 74 73 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 nts);. for (i
14b0: 76 20 3d 20 30 3b 20 69 76 20 3c 20 70 6f 69 6e v = 0; iv < poin
14c0: 74 73 3b 20 69 76 2b 2b 29 0a 20 20 20 20 20 20 ts; iv++).
14d0: 7b 0a 09 20 20 78 20 3d 20 67 61 69 61 49 6d 70 {.. x = gaiaImp
14e0: 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort64 (geo->blob
14f0: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
1500: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 geo->endian,....
1510: 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f geo->endian_
1520: 61 72 63 68 29 3b 0a 09 20 20 79 20 3d 20 67 61 arch);.. y = ga
1530: 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d iaImport64 (geo-
1540: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
1550: 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f 2d 3e fset + 8), geo->
1560: 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 endian,.... g
1570: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
1580: 3b 0a 09 20 20 7a 20 3d 20 67 61 69 61 49 6d 70 ;.. z = gaiaImp
1590: 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort64 (geo->blob
15a0: 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 + (geo->offset
15b0: 2b 20 31 36 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 + 16), geo->endi
15c0: 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e an,.... geo->
15d0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
15e0: 20 67 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a gaiaSetPointXYZ
15f0: 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 (line->Coords,
1600: 69 76 2c 20 78 2c 20 79 2c 20 7a 29 3b 0a 09 20 iv, x, y, z);..
1610: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 geo->offset +=
1620: 32 34 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 24;. }.}..s
1630: 74 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 tatic void.Parse
1640: 57 6b 62 4c 69 6e 65 4d 20 28 67 61 69 61 47 65 WkbLineM (gaiaGe
1650: 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b omCollPtr geo).{
1660: 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 4c 49 ./* decodes a LI
1670: 4e 45 53 54 52 49 4e 47 4d 20 66 72 6f 6d 20 57 NESTRINGM from W
1680: 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 6f KB */. int po
1690: 69 6e 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 ints;. int iv
16a0: 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a ;. double x;.
16b0: 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 double y;.
16c0: 20 20 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 20 double m;.
16d0: 67 61 69 61 4c 69 6e 65 73 74 72 69 6e 67 50 74 gaiaLinestringPt
16e0: 72 20 6c 69 6e 65 3b 0a 20 20 20 20 69 66 20 28 r line;. if (
16f0: 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d geo->size < geo-
1700: 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 65 >offset + 4)..re
1710: 74 75 72 6e 3b 0a 20 20 20 20 70 6f 69 6e 74 73 turn;. points
1720: 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 =..gaiaImport32
1730: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
1740: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
1750: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
1760: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 ian_arch);. g
1770: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b eo->offset += 4;
1780: 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 . if (geo->si
1790: 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ze < geo->offset
17a0: 20 2b 20 28 32 34 20 2a 20 70 6f 69 6e 74 73 29 + (24 * points)
17b0: 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 6c )..return;. l
17c0: 69 6e 65 20 3d 20 67 61 69 61 41 64 64 4c 69 6e ine = gaiaAddLin
17d0: 65 73 74 72 69 6e 67 54 6f 47 65 6f 6d 43 6f 6c estringToGeomCol
17e0: 6c 20 28 67 65 6f 2c 20 70 6f 69 6e 74 73 29 3b l (geo, points);
17f0: 0a 20 20 20 20 66 6f 72 20 28 69 76 20 3d 20 30 . for (iv = 0
1800: 3b 20 69 76 20 3c 20 70 6f 69 6e 74 73 3b 20 69 ; iv < points; i
1810: 76 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 v++). {..
1820: 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 x = gaiaImport64
1830: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
1840: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
1850: 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 endian,.... g
1860: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
1870: 3b 0a 09 20 20 79 20 3d 20 67 61 69 61 49 6d 70 ;.. y = gaiaImp
1880: 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort64 (geo->blob
1890: 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 + (geo->offset
18a0: 2b 20 38 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 + 8), geo->endia
18b0: 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 n,.... geo->e
18c0: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 ndian_arch);..
18d0: 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 m = gaiaImport64
18e0: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 (geo->blob + (g
18f0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 31 36 29 eo->offset + 16)
1900: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
1910: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
1920: 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 61 69 61 n_arch);.. gaia
1930: 53 65 74 50 6f 69 6e 74 58 59 4d 20 28 6c 69 6e SetPointXYM (lin
1940: 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 e->Coords, iv, x
1950: 2c 20 79 2c 20 6d 29 3b 0a 09 20 20 67 65 6f 2d , y, m);.. geo-
1960: 3e 6f 66 66 73 65 74 20 2b 3d 20 32 34 3b 0a 20 >offset += 24;.
1970: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
1980: 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 4c 69 void.ParseWkbLi
1990: 6e 65 5a 4d 20 28 67 61 69 61 47 65 6f 6d 43 6f neZM (gaiaGeomCo
19a0: 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 llPtr geo).{./*
19b0: 64 65 63 6f 64 65 73 20 61 20 4c 49 4e 45 53 54 decodes a LINEST
19c0: 52 49 4e 47 5a 4d 20 66 72 6f 6d 20 57 4b 42 20 RINGZM from WKB
19d0: 2a 2f 0a 20 20 20 20 69 6e 74 20 70 6f 69 6e 74 */. int point
19e0: 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 s;. int iv;.
19f0: 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 double x;.
1a00: 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 double y;. d
1a10: 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 ouble z;. dou
1a20: 62 6c 65 20 6d 3b 0a 20 20 20 20 67 61 69 61 4c ble m;. gaiaL
1a30: 69 6e 65 73 74 72 69 6e 67 50 74 72 20 6c 69 6e inestringPtr lin
1a40: 65 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e e;. if (geo->
1a50: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
1a60: 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b et + 4)..return;
1a70: 0a 20 20 20 20 70 6f 69 6e 74 73 20 3d 0a 09 67 . points =..g
1a80: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
1a90: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
1aa0: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
1ab0: 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 n, geo->endian_a
1ac0: 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f rch);. geo->o
1ad0: 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 ffset += 4;.
1ae0: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
1af0: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 33 geo->offset + (3
1b00: 32 20 2a 20 70 6f 69 6e 74 73 29 29 0a 09 72 65 2 * points))..re
1b10: 74 75 72 6e 3b 0a 20 20 20 20 6c 69 6e 65 20 3d turn;. line =
1b20: 20 67 61 69 61 41 64 64 4c 69 6e 65 73 74 72 69 gaiaAddLinestri
1b30: 6e 67 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 ngToGeomColl (ge
1b40: 6f 2c 20 70 6f 69 6e 74 73 29 3b 0a 20 20 20 20 o, points);.
1b50: 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 for (iv = 0; iv
1b60: 3c 20 70 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a < points; iv++).
1b70: 20 20 20 20 20 20 7b 0a 09 20 20 78 20 3d 20 67 {.. x = g
1b80: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
1b90: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
1ba0: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
1bb0: 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 n,.... geo->e
1bc0: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 ndian_arch);..
1bd0: 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 y = gaiaImport64
1be0: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 (geo->blob + (g
1bf0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 2c eo->offset + 8),
1c00: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 geo->endian,...
1c10: 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e . geo->endian
1c20: 5f 61 72 63 68 29 3b 0a 09 20 20 7a 20 3d 20 67 _arch);.. z = g
1c30: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
1c40: 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f ->blob + (geo->o
1c50: 66 66 73 65 74 20 2b 20 31 36 29 2c 20 67 65 6f ffset + 16), geo
1c60: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 ->endian,....
1c70: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
1c80: 68 29 3b 0a 09 20 20 6d 20 3d 20 67 61 69 61 49 h);.. m = gaiaI
1c90: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
1ca0: 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 ob + (geo->offse
1cb0: 74 20 2b 20 32 34 29 2c 20 67 65 6f 2d 3e 65 6e t + 24), geo->en
1cc0: 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f dian,.... geo
1cd0: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
1ce0: 09 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 58 . gaiaSetPointX
1cf0: 59 5a 4d 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 YZM (line->Coord
1d00: 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 s, iv, x, y, z,
1d10: 6d 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 m);.. geo->offs
1d20: 65 74 20 2b 3d 20 33 32 3b 0a 20 20 20 20 20 20 et += 32;.
1d30: 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 }.}..static void
1d40: 0a 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e .ParseWkbPolygon
1d50: 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
1d60: 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f r geo).{./* deco
1d70: 64 65 73 20 61 20 50 4f 4c 59 47 4f 4e 20 66 72 des a POLYGON fr
1d80: 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e om WKB */. in
1d90: 74 20 72 69 6e 67 73 3b 0a 20 20 20 20 69 6e 74 t rings;. int
1da0: 20 6e 76 65 72 74 73 3b 0a 20 20 20 20 69 6e 74 nverts;. int
1db0: 20 69 76 3b 0a 20 20 20 20 69 6e 74 20 69 62 3b iv;. int ib;
1dc0: 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 . double x;.
1dd0: 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 double y;.
1de0: 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 gaiaPolygonPtr
1df0: 70 6f 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 polyg = NULL;.
1e00: 20 20 67 61 69 61 52 69 6e 67 50 74 72 20 72 69 gaiaRingPtr ri
1e10: 6e 67 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d ng;. if (geo-
1e20: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
1e30: 73 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e set + 4)..return
1e40: 3b 0a 20 20 20 20 72 69 6e 67 73 20 3d 0a 09 67 ;. rings =..g
1e50: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
1e60: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
1e70: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
1e80: 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 n, geo->endian_a
1e90: 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f rch);. geo->o
1ea0: 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 ffset += 4;.
1eb0: 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 for (ib = 0; ib
1ec0: 3c 20 72 69 6e 67 73 3b 20 69 62 2b 2b 29 0a 20 < rings; ib++).
1ed0: 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 {.. if (ge
1ee0: 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f o->size < geo->o
1ef0: 66 66 73 65 74 20 2b 20 34 29 0a 09 20 20 20 20 ffset + 4)..
1f00: 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 6e 76 65 return;.. nve
1f10: 72 74 73 20 3d 0a 09 20 20 20 20 20 20 67 61 69 rts =.. gai
1f20: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
1f30: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
1f40: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
1f50: 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 .... geo->end
1f60: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 ian_arch);.. ge
1f70: 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a o->offset += 4;.
1f80: 09 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 . if (geo->size
1f90: 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b < geo->offset +
1fa0: 20 28 31 36 20 2a 20 6e 76 65 72 74 73 29 29 0a (16 * nverts)).
1fb0: 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 . return;..
1fc0: 20 20 69 66 20 28 69 62 20 3d 3d 20 30 29 0a 09 if (ib == 0)..
1fd0: 20 20 20 20 7b 0a 09 09 70 6f 6c 79 67 20 3d 20 {...polyg =
1fe0: 67 61 69 61 41 64 64 50 6f 6c 79 67 6f 6e 54 6f gaiaAddPolygonTo
1ff0: 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 2c 20 6e GeomColl (geo, n
2000: 76 65 72 74 73 2c 20 72 69 6e 67 73 20 2d 20 31 verts, rings - 1
2010: 29 3b 0a 09 09 72 69 6e 67 20 3d 20 70 6f 6c 79 );...ring = poly
2020: 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 g->Exterior;..
2030: 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 }.. else..
2040: 20 20 20 72 69 6e 67 20 3d 20 67 61 69 61 41 64 ring = gaiaAd
2050: 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 20 28 70 dInteriorRing (p
2060: 6f 6c 79 67 2c 20 69 62 20 2d 20 31 2c 20 6e 76 olyg, ib - 1, nv
2070: 65 72 74 73 29 3b 0a 09 20 20 66 6f 72 20 28 69 erts);.. for (i
2080: 76 20 3d 20 30 3b 20 69 76 20 3c 20 6e 76 65 72 v = 0; iv < nver
2090: 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
20a0: 0a 09 09 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 ...x = gaiaImpor
20b0: 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t64 (geo->blob +
20c0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
20d0: 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 o->endian,.....
20e0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
20f0: 68 29 3b 0a 09 09 79 20 3d 20 67 61 69 61 49 6d h);...y = gaiaIm
2100: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
2110: 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 b + (geo->offset
2120: 20 2b 20 38 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 + 8), geo->endi
2130: 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 an,..... geo->e
2140: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 67 ndian_arch);...g
2150: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 31 36 eo->offset += 16
2160: 3b 0a 09 09 67 61 69 61 53 65 74 50 6f 69 6e 74 ;...gaiaSetPoint
2170: 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 (ring->Coords,
2180: 69 76 2c 20 78 2c 20 79 29 3b 0a 09 20 20 20 20 iv, x, y);..
2190: 7d 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 }. }.}..sta
21a0: 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b tic void.ParseWk
21b0: 62 50 6f 6c 79 67 6f 6e 5a 20 28 67 61 69 61 47 bPolygonZ (gaiaG
21c0: 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a eomCollPtr geo).
21d0: 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 50 {./* decodes a P
21e0: 4f 4c 59 47 4f 4e 5a 20 66 72 6f 6d 20 57 4b 42 OLYGONZ from WKB
21f0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 6e 67 */. int ring
2200: 73 3b 0a 20 20 20 20 69 6e 74 20 6e 76 65 72 74 s;. int nvert
2210: 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 s;. int iv;.
2220: 20 20 20 69 6e 74 20 69 62 3b 0a 20 20 20 20 64 int ib;. d
2230: 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f 75 ouble x;. dou
2240: 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 6c ble y;. doubl
2250: 65 20 7a 3b 0a 20 20 20 20 67 61 69 61 50 6f 6c e z;. gaiaPol
2260: 79 67 6f 6e 50 74 72 20 70 6f 6c 79 67 20 3d 20 ygonPtr polyg =
2270: 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 52 69 NULL;. gaiaRi
2280: 6e 67 50 74 72 20 72 69 6e 67 3b 0a 20 20 20 20 ngPtr ring;.
2290: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
22a0: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 geo->offset + 4)
22b0: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 72 69 ..return;. ri
22c0: 6e 67 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 ngs =..gaiaImpor
22d0: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
22e0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
22f0: 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e o->endian, geo->
2300: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 endian_arch);.
2310: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
2320: 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 62 20 4;. for (ib
2330: 3d 20 30 3b 20 69 62 20 3c 20 72 69 6e 67 73 3b = 0; ib < rings;
2340: 20 69 62 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 ib++). {..
2350: 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 if (geo->size
2360: 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 < geo->offset +
2370: 34 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 4).. return
2380: 3b 0a 09 20 20 6e 76 65 72 74 73 20 3d 0a 09 20 ;.. nverts =..
2390: 20 20 20 20 20 67 61 69 61 49 6d 70 6f 72 74 33 gaiaImport3
23a0: 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 2 (geo->blob + g
23b0: 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d eo->offset, geo-
23c0: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
23d0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
23e0: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
23f0: 74 20 2b 3d 20 34 3b 0a 09 20 20 69 66 20 28 67 t += 4;.. if (g
2400: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
2410: 6f 66 66 73 65 74 20 2b 20 28 32 34 20 2a 20 6e offset + (24 * n
2420: 76 65 72 74 73 29 29 0a 09 20 20 20 20 20 20 72 verts)).. r
2430: 65 74 75 72 6e 3b 0a 09 20 20 69 66 20 28 69 62 eturn;.. if (ib
2440: 20 3d 3d 20 30 29 0a 09 20 20 20 20 7b 0a 09 09 == 0).. {...
2450: 70 6f 6c 79 67 20 3d 20 67 61 69 61 41 64 64 50 polyg = gaiaAddP
2460: 6f 6c 79 67 6f 6e 54 6f 47 65 6f 6d 43 6f 6c 6c olygonToGeomColl
2470: 20 28 67 65 6f 2c 20 6e 76 65 72 74 73 2c 20 72 (geo, nverts, r
2480: 69 6e 67 73 20 2d 20 31 29 3b 0a 09 09 72 69 6e ings - 1);...rin
2490: 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 g = polyg->Exter
24a0: 69 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 ior;.. }.. e
24b0: 6c 73 65 0a 09 20 20 20 20 20 20 72 69 6e 67 20 lse.. ring
24c0: 3d 20 67 61 69 61 41 64 64 49 6e 74 65 72 69 6f = gaiaAddInterio
24d0: 72 52 69 6e 67 20 28 70 6f 6c 79 67 2c 20 69 62 rRing (polyg, ib
24e0: 20 2d 20 31 2c 20 6e 76 65 72 74 73 29 3b 0a 09 - 1, nverts);..
24f0: 20 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 for (iv = 0; i
2500: 76 20 3c 20 6e 76 65 72 74 73 3b 20 69 76 2b 2b v < nverts; iv++
2510: 29 0a 09 20 20 20 20 7b 0a 09 09 78 20 3d 20 67 ).. {...x = g
2520: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
2530: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
2540: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
2550: 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e n,..... geo->en
2560: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 79 20 dian_arch);...y
2570: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
2580: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f geo->blob + (geo
2590: 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 2c 20 67 ->offset + 8), g
25a0: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 eo->endian,.....
25b0: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 geo->endian_ar
25c0: 63 68 29 3b 0a 09 09 7a 20 3d 20 67 61 69 61 49 ch);...z = gaiaI
25d0: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
25e0: 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 ob + (geo->offse
25f0: 74 20 2b 20 31 36 29 2c 20 67 65 6f 2d 3e 65 6e t + 16), geo->en
2600: 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d dian,..... geo-
2610: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
2620: 09 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 .geo->offset +=
2630: 32 34 3b 0a 09 09 67 61 69 61 53 65 74 50 6f 69 24;...gaiaSetPoi
2640: 6e 74 58 59 5a 20 28 72 69 6e 67 2d 3e 43 6f 6f ntXYZ (ring->Coo
2650: 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a rds, iv, x, y, z
2660: 29 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 );.. }.
2670: 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 }.}..static void
2680: 0a 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e .ParseWkbPolygon
2690: 4d 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 M (gaiaGeomCollP
26a0: 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 tr geo).{./* dec
26b0: 6f 64 65 73 20 61 20 50 4f 4c 59 47 4f 4e 4d 20 odes a POLYGONM
26c0: 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 20 from WKB */.
26d0: 69 6e 74 20 72 69 6e 67 73 3b 0a 20 20 20 20 69 int rings;. i
26e0: 6e 74 20 6e 76 65 72 74 73 3b 0a 20 20 20 20 69 nt nverts;. i
26f0: 6e 74 20 69 76 3b 0a 20 20 20 20 69 6e 74 20 69 nt iv;. int i
2700: 62 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b b;. double x;
2710: 0a 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 . double y;.
2720: 20 20 20 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 double m;.
2730: 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 gaiaPolygonPtr
2740: 70 6f 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 polyg = NULL;.
2750: 20 20 67 61 69 61 52 69 6e 67 50 74 72 20 72 69 gaiaRingPtr ri
2760: 6e 67 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d ng;. if (geo-
2770: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
2780: 73 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e set + 4)..return
2790: 3b 0a 20 20 20 20 72 69 6e 67 73 20 3d 0a 09 67 ;. rings =..g
27a0: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
27b0: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
27c0: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
27d0: 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 n, geo->endian_a
27e0: 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f rch);. geo->o
27f0: 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 ffset += 4;.
2800: 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 for (ib = 0; ib
2810: 3c 20 72 69 6e 67 73 3b 20 69 62 2b 2b 29 0a 20 < rings; ib++).
2820: 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 {.. if (ge
2830: 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f o->size < geo->o
2840: 66 66 73 65 74 20 2b 20 34 29 0a 09 20 20 20 20 ffset + 4)..
2850: 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 6e 76 65 return;.. nve
2860: 72 74 73 20 3d 0a 09 20 20 20 20 20 20 67 61 69 rts =.. gai
2870: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
2880: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
2890: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
28a0: 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 .... geo->end
28b0: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 ian_arch);.. ge
28c0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a o->offset += 4;.
28d0: 09 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 . if (geo->size
28e0: 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b < geo->offset +
28f0: 20 28 32 34 20 2a 20 6e 76 65 72 74 73 29 29 0a (24 * nverts)).
2900: 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 . return;..
2910: 20 20 69 66 20 28 69 62 20 3d 3d 20 30 29 0a 09 if (ib == 0)..
2920: 20 20 20 20 7b 0a 09 09 70 6f 6c 79 67 20 3d 20 {...polyg =
2930: 67 61 69 61 41 64 64 50 6f 6c 79 67 6f 6e 54 6f gaiaAddPolygonTo
2940: 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 2c 20 6e GeomColl (geo, n
2950: 76 65 72 74 73 2c 20 72 69 6e 67 73 20 2d 20 31 verts, rings - 1
2960: 29 3b 0a 09 09 72 69 6e 67 20 3d 20 70 6f 6c 79 );...ring = poly
2970: 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 g->Exterior;..
2980: 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 }.. else..
2990: 20 20 20 72 69 6e 67 20 3d 20 67 61 69 61 41 64 ring = gaiaAd
29a0: 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 20 28 70 dInteriorRing (p
29b0: 6f 6c 79 67 2c 20 69 62 20 2d 20 31 2c 20 6e 76 olyg, ib - 1, nv
29c0: 65 72 74 73 29 3b 0a 09 20 20 66 6f 72 20 28 69 erts);.. for (i
29d0: 76 20 3d 20 30 3b 20 69 76 20 3c 20 6e 76 65 72 v = 0; iv < nver
29e0: 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
29f0: 0a 09 09 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 ...x = gaiaImpor
2a00: 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t64 (geo->blob +
2a10: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
2a20: 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 o->endian,.....
2a30: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
2a40: 68 29 3b 0a 09 09 79 20 3d 20 67 61 69 61 49 6d h);...y = gaiaIm
2a50: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
2a60: 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 b + (geo->offset
2a70: 20 2b 20 38 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 + 8), geo->endi
2a80: 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 an,..... geo->e
2a90: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 6d ndian_arch);...m
2aa0: 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
2ab0: 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 (geo->blob + (ge
2ac0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 31 36 29 2c o->offset + 16),
2ad0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 geo->endian,...
2ae0: 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f .. geo->endian_
2af0: 61 72 63 68 29 3b 0a 09 09 67 65 6f 2d 3e 6f 66 arch);...geo->of
2b00: 66 73 65 74 20 2b 3d 20 32 34 3b 0a 09 09 67 61 fset += 24;...ga
2b10: 69 61 53 65 74 50 6f 69 6e 74 58 59 4d 20 28 72 iaSetPointXYM (r
2b20: 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c ing->Coords, iv,
2b30: 20 78 2c 20 79 2c 20 6d 29 3b 0a 09 20 20 20 20 x, y, m);..
2b40: 7d 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 }. }.}..sta
2b50: 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b tic void.ParseWk
2b60: 62 50 6f 6c 79 67 6f 6e 5a 4d 20 28 67 61 69 61 bPolygonZM (gaia
2b70: 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 GeomCollPtr geo)
2b80: 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 .{./* decodes a
2b90: 50 4f 4c 59 47 4f 4e 5a 4d 20 66 72 6f 6d 20 57 POLYGONZM from W
2ba0: 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 KB */. int ri
2bb0: 6e 67 73 3b 0a 20 20 20 20 69 6e 74 20 6e 76 65 ngs;. int nve
2bc0: 72 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b rts;. int iv;
2bd0: 0a 20 20 20 20 69 6e 74 20 69 62 3b 0a 20 20 20 . int ib;.
2be0: 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 double x;. d
2bf0: 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 ouble y;. dou
2c00: 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c ble z;. doubl
2c10: 65 20 6d 3b 0a 20 20 20 20 67 61 69 61 50 6f 6c e m;. gaiaPol
2c20: 79 67 6f 6e 50 74 72 20 70 6f 6c 79 67 20 3d 20 ygonPtr polyg =
2c30: 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 52 69 NULL;. gaiaRi
2c40: 6e 67 50 74 72 20 72 69 6e 67 3b 0a 20 20 20 20 ngPtr ring;.
2c50: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
2c60: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 geo->offset + 4)
2c70: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 72 69 ..return;. ri
2c80: 6e 67 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 ngs =..gaiaImpor
2c90: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
2ca0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
2cb0: 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e o->endian, geo->
2cc0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 endian_arch);.
2cd0: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
2ce0: 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 62 20 4;. for (ib
2cf0: 3d 20 30 3b 20 69 62 20 3c 20 72 69 6e 67 73 3b = 0; ib < rings;
2d00: 20 69 62 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 ib++). {..
2d10: 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 if (geo->size
2d20: 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 < geo->offset +
2d30: 34 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 4).. return
2d40: 3b 0a 09 20 20 6e 76 65 72 74 73 20 3d 0a 09 20 ;.. nverts =..
2d50: 20 20 20 20 20 67 61 69 61 49 6d 70 6f 72 74 33 gaiaImport3
2d60: 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 2 (geo->blob + g
2d70: 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d eo->offset, geo-
2d80: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
2d90: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
2da0: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
2db0: 74 20 2b 3d 20 34 3b 0a 09 20 20 69 66 20 28 67 t += 4;.. if (g
2dc0: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
2dd0: 6f 66 66 73 65 74 20 2b 20 28 33 32 20 2a 20 6e offset + (32 * n
2de0: 76 65 72 74 73 29 29 0a 09 20 20 20 20 20 20 72 verts)).. r
2df0: 65 74 75 72 6e 3b 0a 09 20 20 69 66 20 28 69 62 eturn;.. if (ib
2e00: 20 3d 3d 20 30 29 0a 09 20 20 20 20 7b 0a 09 09 == 0).. {...
2e10: 70 6f 6c 79 67 20 3d 20 67 61 69 61 41 64 64 50 polyg = gaiaAddP
2e20: 6f 6c 79 67 6f 6e 54 6f 47 65 6f 6d 43 6f 6c 6c olygonToGeomColl
2e30: 20 28 67 65 6f 2c 20 6e 76 65 72 74 73 2c 20 72 (geo, nverts, r
2e40: 69 6e 67 73 20 2d 20 31 29 3b 0a 09 09 72 69 6e ings - 1);...rin
2e50: 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 g = polyg->Exter
2e60: 69 6f 72 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 ior;.. }.. e
2e70: 6c 73 65 0a 09 20 20 20 20 20 20 72 69 6e 67 20 lse.. ring
2e80: 3d 20 67 61 69 61 41 64 64 49 6e 74 65 72 69 6f = gaiaAddInterio
2e90: 72 52 69 6e 67 20 28 70 6f 6c 79 67 2c 20 69 62 rRing (polyg, ib
2ea0: 20 2d 20 31 2c 20 6e 76 65 72 74 73 29 3b 0a 09 - 1, nverts);..
2eb0: 20 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 for (iv = 0; i
2ec0: 76 20 3c 20 6e 76 65 72 74 73 3b 20 69 76 2b 2b v < nverts; iv++
2ed0: 29 0a 09 20 20 20 20 7b 0a 09 09 78 20 3d 20 67 ).. {...x = g
2ee0: 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f aiaImport64 (geo
2ef0: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
2f00: 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 fset, geo->endia
2f10: 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e n,..... geo->en
2f20: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 79 20 dian_arch);...y
2f30: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
2f40: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f geo->blob + (geo
2f50: 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 2c 20 67 ->offset + 8), g
2f60: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 eo->endian,.....
2f70: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 geo->endian_ar
2f80: 63 68 29 3b 0a 09 09 7a 20 3d 20 67 61 69 61 49 ch);...z = gaiaI
2f90: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
2fa0: 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 ob + (geo->offse
2fb0: 74 20 2b 20 31 36 29 2c 20 67 65 6f 2d 3e 65 6e t + 16), geo->en
2fc0: 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d dian,..... geo-
2fd0: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
2fe0: 09 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 .m = gaiaImport6
2ff0: 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 4 (geo->blob + (
3000: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 32 34 geo->offset + 24
3010: 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a ), geo->endian,.
3020: 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .... geo->endia
3030: 6e 5f 61 72 63 68 29 3b 0a 09 09 67 65 6f 2d 3e n_arch);...geo->
3040: 6f 66 66 73 65 74 20 2b 3d 20 33 32 3b 0a 09 09 offset += 32;...
3050: 67 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a 4d gaiaSetPointXYZM
3060: 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 (ring->Coords,
3070: 69 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b iv, x, y, z, m);
3080: 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a .. }. }.
3090: 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 50 }..static void.P
30a0: 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 6e arseWkbMultiPoin
30b0: 74 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 t (gaiaGeomCollP
30c0: 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 tr geo).{./* dec
30d0: 6f 64 65 73 20 61 20 4d 55 4c 54 49 50 4f 49 4e odes a MULTIPOIN
30e0: 54 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 T from WKB */.
30f0: 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e int ig;. in
3100: 74 20 6e 5f 70 74 73 3b 0a 20 20 20 20 69 6e 74 t n_pts;. int
3110: 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 20 g_type;. if
3120: 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f (geo->size < geo
3130: 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 ->offset + 4)..r
3140: 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 70 74 73 eturn;. n_pts
3150: 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 =..gaiaImport32
3160: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
3170: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
3180: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
3190: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 ian_arch);. g
31a0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b eo->offset += 4;
31b0: 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 . for (ig = 0
31c0: 3b 20 69 67 20 3c 20 6e 5f 70 74 73 3b 20 69 67 ; ig < n_pts; ig
31d0: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f ++). {.. /
31e0: 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 50 6f * parsing all Po
31f0: 69 6e 74 73 20 6f 6e 65 20 62 79 20 6f 6e 65 20 ints one by one
3200: 2a 2f 0a 09 20 20 69 66 20 28 67 65 6f 2d 3e 73 */.. if (geo->s
3210: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
3220: 74 20 2b 20 35 29 0a 09 20 20 20 20 20 20 72 65 t + 5).. re
3230: 74 75 72 6e 3b 0a 09 20 20 2f 2a 20 76 61 6e 69 turn;.. /* vani
3240: 6c 6c 61 20 57 4b 42 20 63 6f 75 6c 64 20 62 65 lla WKB could be
3250: 20 65 6e 63 6f 64 65 64 20 61 73 20 6d 69 78 65 encoded as mixe
3260: 64 20 62 69 67 2d 2f 6c 69 74 74 6c 65 2d 65 6e d big-/little-en
3270: 64 69 61 6e 20 73 75 62 2d 69 74 65 6d 73 20 2a dian sub-items *
3280: 2f 0a 09 20 20 69 66 20 28 2a 28 67 65 6f 2d 3e /.. if (*(geo->
3290: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
32a0: 65 74 29 20 3d 3d 20 30 78 30 31 29 0a 09 20 20 et) == 0x01)..
32b0: 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 20 geo->endian
32c0: 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e = GAIA_LITTLE_EN
32d0: 44 49 41 4e 3b 0a 09 20 20 65 6c 73 65 0a 09 20 DIAN;.. else..
32e0: 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e geo->endian
32f0: 20 3d 20 47 41 49 41 5f 42 49 47 5f 45 4e 44 49 = GAIA_BIG_ENDI
3300: 41 4e 3b 0a 09 20 20 67 5f 74 79 70 65 20 3d 0a AN;.. g_type =.
3310: 09 20 20 20 20 20 20 67 61 69 61 49 6d 70 6f 72 . gaiaImpor
3320: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
3330: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 31 geo->offset + 1
3340: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
3350: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
3360: 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 6f 2d n_arch);.. geo-
3370: 3e 6f 66 66 73 65 74 20 2b 3d 20 35 3b 0a 09 20 >offset += 5;..
3380: 20 69 66 20 28 67 5f 74 79 70 65 20 3d 3d 20 47 if (g_type == G
3390: 41 49 41 5f 50 4f 49 4e 54 29 0a 09 20 20 20 20 AIA_POINT)..
33a0: 20 20 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 20 ParseWkbPoint
33b0: 28 67 65 6f 29 3b 0a 20 20 20 20 20 20 7d 0a 7d (geo);. }.}
33c0: 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a 50 61 ..static void.Pa
33d0: 72 73 65 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 20 rseWkbMultiLine
33e0: 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
33f0: 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 geo).{./* decod
3400: 65 73 20 61 20 4d 55 4c 54 49 4c 49 4e 45 53 54 es a MULTILINEST
3410: 52 49 4e 47 20 66 72 6f 6d 20 57 4b 42 20 2a 2f RING from WKB */
3420: 0a 20 20 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 . int ig;.
3430: 20 69 6e 74 20 6e 5f 6c 6e 73 3b 0a 20 20 20 20 int n_lns;.
3440: 69 6e 74 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 int g_type;.
3450: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
3460: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 geo->offset + 4)
3470: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f ..return;. n_
3480: 6c 6e 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 lns =..gaiaImpor
3490: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
34a0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
34b0: 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e o->endian, geo->
34c0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 endian_arch);.
34d0: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
34e0: 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 67 20 4;. for (ig
34f0: 3d 20 30 3b 20 69 67 20 3c 20 6e 5f 6c 6e 73 3b = 0; ig < n_lns;
3500: 20 69 67 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 ig++). {..
3510: 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c /* parsing all
3520: 20 4c 69 6e 65 73 74 72 69 6e 67 73 20 6f 6e 65 Linestrings one
3530: 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 66 by one */.. if
3540: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
3550: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 o->offset + 5)..
3560: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 return;..
3570: 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 /* vanilla WKB
3580: 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 could be encoded
3590: 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c as mixed big-/l
35a0: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 ittle-endian sub
35b0: 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 -items */.. if
35c0: 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 (*(geo->blob + g
35d0: 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 eo->offset) == 0
35e0: 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 6f 2d x01).. geo-
35f0: 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c >endian = GAIA_L
3600: 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 ITTLE_ENDIAN;..
3610: 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 65 6f else.. geo
3620: 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f ->endian = GAIA_
3630: 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 BIG_ENDIAN;.. g
3640: 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 20 67 _type =.. g
3650: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
3660: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
3670: 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 fset + 1, geo->e
3680: 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 ndian,.... ge
3690: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
36a0: 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 .. geo->offset
36b0: 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 67 5f 74 += 5;.. if (g_t
36c0: 79 70 65 20 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 ype == GAIA_LINE
36d0: 53 54 52 49 4e 47 29 0a 09 20 20 20 20 20 20 50 STRING).. P
36e0: 61 72 73 65 57 6b 62 4c 69 6e 65 20 28 67 65 6f arseWkbLine (geo
36f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 );. }.}..st
3700: 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 atic void.ParseW
3710: 6b 62 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 20 28 kbMultiPolygon (
3720: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
3730: 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 geo).{./* decode
3740: 73 20 61 20 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e s a MULTIPOLYGON
3750: 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 from WKB */.
3760: 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e 74 int ig;. int
3770: 20 6e 5f 70 67 73 3b 0a 20 20 20 20 69 6e 74 20 n_pgs;. int
3780: 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 20 28 g_type;. if (
3790: 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d geo->size < geo-
37a0: 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 65 >offset + 4)..re
37b0: 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 70 67 73 20 turn;. n_pgs
37c0: 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 20 =..gaiaImport32
37d0: 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f (geo->blob + geo
37e0: 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 ->offset, geo->e
37f0: 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 ndian, geo->endi
3800: 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 65 an_arch);. ge
3810: 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a o->offset += 4;.
3820: 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 3b for (ig = 0;
3830: 20 69 67 20 3c 20 6e 5f 70 67 73 3b 20 69 67 2b ig < n_pgs; ig+
3840: 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a +). {.. /*
3850: 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 50 6f 6c parsing all Pol
3860: 79 67 6f 6e 73 20 6f 6e 65 20 62 79 20 6f 6e 65 ygons one by one
3870: 20 2a 2f 0a 09 20 20 69 66 20 28 67 65 6f 2d 3e */.. if (geo->
3880: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
3890: 65 74 20 2b 20 35 29 0a 09 20 20 20 20 20 20 72 et + 5).. r
38a0: 65 74 75 72 6e 3b 0a 09 20 20 2f 2a 20 76 61 6e eturn;.. /* van
38b0: 69 6c 6c 61 20 57 4b 42 20 63 6f 75 6c 64 20 62 illa WKB could b
38c0: 65 20 65 6e 63 6f 64 65 64 20 61 73 20 6d 69 78 e encoded as mix
38d0: 65 64 20 62 69 67 2d 2f 6c 69 74 74 6c 65 2d 65 ed big-/little-e
38e0: 6e 64 69 61 6e 20 73 75 62 2d 69 74 65 6d 73 20 ndian sub-items
38f0: 2a 2f 0a 09 20 20 69 66 20 28 2a 28 67 65 6f 2d */.. if (*(geo-
3900: 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 >blob + geo->off
3910: 73 65 74 29 20 3d 3d 20 30 78 30 31 29 0a 09 20 set) == 0x01)..
3920: 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e geo->endian
3930: 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 = GAIA_LITTLE_E
3940: 4e 44 49 41 4e 3b 0a 09 20 20 65 6c 73 65 0a 09 NDIAN;.. else..
3950: 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 geo->endia
3960: 6e 20 3d 20 47 41 49 41 5f 42 49 47 5f 45 4e 44 n = GAIA_BIG_END
3970: 49 41 4e 3b 0a 09 20 20 67 5f 74 79 70 65 20 3d IAN;.. g_type =
3980: 0a 09 20 20 20 20 20 20 67 61 69 61 49 6d 70 6f .. gaiaImpo
3990: 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt32 (geo->blob
39a0: 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 + geo->offset +
39b0: 31 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 1, geo->endian,.
39c0: 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 ... geo->endi
39d0: 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 6f an_arch);.. geo
39e0: 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 35 3b 0a 09 ->offset += 5;..
39f0: 20 20 69 66 20 28 67 5f 74 79 70 65 20 3d 3d 20 if (g_type ==
3a00: 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 29 0a 09 20 GAIA_POLYGON)..
3a10: 20 20 20 20 20 50 61 72 73 65 57 6b 62 50 6f 6c ParseWkbPol
3a20: 79 67 6f 6e 20 28 67 65 6f 29 3b 0a 20 20 20 20 ygon (geo);.
3a30: 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f }.}..static vo
3a40: 69 64 0a 50 61 72 73 65 57 6b 62 47 65 6f 6d 43 id.ParseWkbGeomC
3a50: 6f 6c 6c 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c oll (gaiaGeomCol
3a60: 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 lPtr geo).{./* d
3a70: 65 63 6f 64 65 73 20 61 20 47 45 4f 4d 45 54 52 ecodes a GEOMETR
3a80: 59 43 4f 4c 4c 45 43 54 49 4f 4e 20 66 72 6f 6d YCOLLECTION from
3a90: 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 WKB */. int
3aa0: 69 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 67 65 ig;. int n_ge
3ab0: 6f 6d 73 3b 0a 20 20 20 20 69 66 20 28 67 65 6f oms;. if (geo
3ac0: 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 ->size < geo->of
3ad0: 66 73 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 fset + 4)..retur
3ae0: 6e 3b 0a 20 20 20 20 6e 5f 67 65 6f 6d 73 20 3d n;. n_geoms =
3af0: 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 ..gaiaImport32 (
3b00: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
3b10: 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e >offset, geo->en
3b20: 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 dian, geo->endia
3b30: 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 65 6f n_arch);. geo
3b40: 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 ->offset += 4;.
3b50: 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 3b 20 for (ig = 0;
3b60: 69 67 20 3c 20 6e 5f 67 65 6f 6d 73 3b 20 69 67 ig < n_geoms; ig
3b70: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 ++). {.. i
3b80: 6e 74 20 67 5f 74 79 70 65 3b 0a 09 20 20 69 66 nt g_type;.. if
3b90: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
3ba0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 o->offset + 5)..
3bb0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 return;..
3bc0: 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 /* vanilla WKB
3bd0: 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 could be encoded
3be0: 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c as mixed big-/l
3bf0: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 ittle-endian sub
3c00: 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 -items */.. if
3c10: 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 (*(geo->blob + g
3c20: 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 eo->offset) == 0
3c30: 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 6f 2d x01).. geo-
3c40: 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c >endian = GAIA_L
3c50: 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 ITTLE_ENDIAN;..
3c60: 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 65 6f else.. geo
3c70: 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f ->endian = GAIA_
3c80: 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 BIG_ENDIAN;.. g
3c90: 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 20 67 _type =.. g
3ca0: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
3cb0: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
3cc0: 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 fset + 1, geo->e
3cd0: 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 ndian,.... ge
3ce0: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
3cf0: 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 .. geo->offset
3d00: 2b 3d 20 35 3b 0a 09 20 20 73 77 69 74 63 68 20 += 5;.. switch
3d10: 28 67 5f 74 79 70 65 29 0a 09 20 20 20 20 7b 0a (g_type).. {.
3d20: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 . case GAIA_P
3d30: 4f 49 4e 54 3a 0a 09 09 50 61 72 73 65 57 6b 62 OINT:...ParseWkb
3d40: 50 6f 69 6e 74 20 28 67 65 6f 29 3b 0a 09 09 62 Point (geo);...b
3d50: 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 reak;.. case
3d60: 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 3a GAIA_LINESTRING:
3d70: 0a 09 09 50 61 72 73 65 57 6b 62 4c 69 6e 65 20 ...ParseWkbLine
3d80: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
3d90: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 . case GAIA_P
3da0: 4f 4c 59 47 4f 4e 3a 0a 09 09 50 61 72 73 65 57 OLYGON:...ParseW
3db0: 6b 62 50 6f 6c 79 67 6f 6e 20 28 67 65 6f 29 3b kbPolygon (geo);
3dc0: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 ...break;.. c
3dd0: 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f ase GAIA_MULTIPO
3de0: 49 4e 54 3a 0a 09 09 50 61 72 73 65 57 6b 62 4d INT:...ParseWkbM
3df0: 75 6c 74 69 50 6f 69 6e 74 20 28 67 65 6f 29 3b ultiPoint (geo);
3e00: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 ...break;.. c
3e10: 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 ase GAIA_MULTILI
3e20: 4e 45 53 54 52 49 4e 47 3a 0a 09 09 50 61 72 73 NESTRING:...Pars
3e30: 65 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 20 28 67 eWkbMultiLine (g
3e40: 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 eo);...break;..
3e50: 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c case GAIA_MUL
3e60: 54 49 50 4f 4c 59 47 4f 4e 3a 0a 09 09 50 61 72 TIPOLYGON:...Par
3e70: 73 65 57 6b 62 4d 75 6c 74 69 50 6f 6c 79 67 6f seWkbMultiPolygo
3e80: 6e 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b n (geo);...break
3e90: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
3ea0: 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
3eb0: 49 4f 4e 3a 0a 09 09 50 61 72 73 65 57 6b 62 47 ION:...ParseWkbG
3ec0: 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 29 3b 0a 09 eomColl (geo);..
3ed0: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d 3b 0a .break;.. };.
3ee0: 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 }.}..stati
3ef0: 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 4d c void.ParseWkbM
3f00: 75 6c 74 69 50 6f 69 6e 74 5a 20 28 67 61 69 61 ultiPointZ (gaia
3f10: 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 GeomCollPtr geo)
3f20: 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 .{./* decodes a
3f30: 4d 55 4c 54 49 50 4f 49 4e 54 5a 20 66 72 6f 6d MULTIPOINTZ from
3f40: 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 WKB */. int
3f50: 69 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 70 74 ig;. int n_pt
3f60: 73 3b 0a 20 20 20 20 69 6e 74 20 67 5f 74 79 70 s;. int g_typ
3f70: 65 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e e;. if (geo->
3f80: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
3f90: 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b et + 4)..return;
3fa0: 0a 20 20 20 20 6e 5f 70 74 73 20 3d 0a 09 67 61 . n_pts =..ga
3fb0: 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d iaImport32 (geo-
3fc0: 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 >blob + geo->off
3fd0: 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e set, geo->endian
3fe0: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 , geo->endian_ar
3ff0: 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 ch);. geo->of
4000: 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 fset += 4;. f
4010: 6f 72 20 28 69 67 20 3d 20 30 3b 20 69 67 20 3c or (ig = 0; ig <
4020: 20 6e 5f 70 74 73 3b 20 69 67 2b 2b 29 0a 20 20 n_pts; ig++).
4030: 20 20 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 {.. /* pars
4040: 69 6e 67 20 61 6c 6c 20 50 6f 69 6e 74 73 20 6f ing all Points o
4050: 6e 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 ne by one */..
4060: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
4070: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 geo->offset + 5)
4080: 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a .. return;.
4090: 09 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b . /* vanilla WK
40a0: 42 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 B could be encod
40b0: 65 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d ed as mixed big-
40c0: 2f 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 /little-endian s
40d0: 75 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 ub-items */.. i
40e0: 66 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b f (*(geo->blob +
40f0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d geo->offset) ==
4100: 20 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 0x01).. ge
4110: 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 o->endian = GAIA
4120: 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a _LITTLE_ENDIAN;.
4130: 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 . else.. g
4140: 65 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 eo->endian = GAI
4150: 41 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 A_BIG_ENDIAN;..
4160: 20 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 g_type =..
4170: 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 gaiaImport32 (g
4180: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
4190: 6f 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d offset + 1, geo-
41a0: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
41b0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
41c0: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
41d0: 74 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 67 t += 5;.. if (g
41e0: 5f 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f _type == GAIA_PO
41f0: 49 4e 54 5a 29 0a 09 20 20 20 20 20 20 50 61 72 INTZ).. Par
4200: 73 65 57 6b 62 50 6f 69 6e 74 5a 20 28 67 65 6f seWkbPointZ (geo
4210: 29 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 );. }.}..st
4220: 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 atic void.ParseW
4230: 6b 62 4d 75 6c 74 69 4c 69 6e 65 5a 20 28 67 61 kbMultiLineZ (ga
4240: 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 iaGeomCollPtr ge
4250: 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 o).{./* decodes
4260: 61 20 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e a MULTILINESTRIN
4270: 47 5a 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 GZ from WKB */.
4280: 20 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 int ig;. i
4290: 6e 74 20 6e 5f 6c 6e 73 3b 0a 20 20 20 20 69 6e nt n_lns;. in
42a0: 74 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 t g_type;. if
42b0: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
42c0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 o->offset + 4)..
42d0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 6c 6e return;. n_ln
42e0: 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 s =..gaiaImport3
42f0: 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 2 (geo->blob + g
4300: 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d eo->offset, geo-
4310: 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e >endian, geo->en
4320: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
4330: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 geo->offset += 4
4340: 3b 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 ;. for (ig =
4350: 30 3b 20 69 67 20 3c 20 6e 5f 6c 6e 73 3b 20 69 0; ig < n_lns; i
4360: 67 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 g++). {..
4370: 2f 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 4c /* parsing all L
4380: 69 6e 65 73 74 72 69 6e 67 73 20 6f 6e 65 20 62 inestrings one b
4390: 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 66 20 28 y one */.. if (
43a0: 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d geo->size < geo-
43b0: 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 20 20 >offset + 5)..
43c0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 2f return;.. /
43d0: 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 63 6f * vanilla WKB co
43e0: 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 20 61 uld be encoded a
43f0: 73 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c 69 74 s mixed big-/lit
4400: 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 2d 69 tle-endian sub-i
4410: 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 28 2a tems */.. if (*
4420: 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f (geo->blob + geo
4430: 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 78 30 ->offset) == 0x0
4440: 31 29 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 1).. geo->e
4450: 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c 49 54 ndian = GAIA_LIT
4460: 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 65 TLE_ENDIAN;.. e
4470: 6c 73 65 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e lse.. geo->
4480: 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 42 49 endian = GAIA_BI
4490: 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 5f 74 G_ENDIAN;.. g_t
44a0: 79 70 65 20 3d 0a 09 20 20 20 20 20 20 67 61 69 ype =.. gai
44b0: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
44c0: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
44d0: 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 et + 1, geo->end
44e0: 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d ian,.... geo-
44f0: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
4500: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
4510: 20 35 3b 0a 09 20 20 69 66 20 28 67 5f 74 79 70 5;.. if (g_typ
4520: 65 20 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 e == GAIA_LINEST
4530: 52 49 4e 47 5a 29 0a 09 20 20 20 20 20 20 50 61 RINGZ).. Pa
4540: 72 73 65 57 6b 62 4c 69 6e 65 5a 20 28 67 65 6f rseWkbLineZ (geo
4550: 29 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 );. }.}..st
4560: 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 atic void.ParseW
4570: 6b 62 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 5a 20 kbMultiPolygonZ
4580: 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
4590: 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 geo).{./* decod
45a0: 65 73 20 61 20 4d 55 4c 54 49 50 4f 4c 59 47 4f es a MULTIPOLYGO
45b0: 4e 5a 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 NZ from WKB */.
45c0: 20 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 int ig;. i
45d0: 6e 74 20 6e 5f 70 67 73 3b 0a 20 20 20 20 69 6e nt n_pgs;. in
45e0: 74 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 t g_type;. if
45f0: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
4600: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 o->offset + 4)..
4610: 72 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 70 67 return;. n_pg
4620: 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 s =..gaiaImport3
4630: 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 2 (geo->blob + g
4640: 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d eo->offset, geo-
4650: 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e >endian, geo->en
4660: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
4670: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 geo->offset += 4
4680: 3b 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 ;. for (ig =
4690: 30 3b 20 69 67 20 3c 20 6e 5f 70 67 73 3b 20 69 0; ig < n_pgs; i
46a0: 67 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 g++). {..
46b0: 2f 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 50 /* parsing all P
46c0: 6f 6c 79 67 6f 6e 73 20 6f 6e 65 20 62 79 20 6f olygons one by o
46d0: 6e 65 20 2a 2f 0a 09 20 20 69 66 20 28 67 65 6f ne */.. if (geo
46e0: 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 ->size < geo->of
46f0: 66 73 65 74 20 2b 20 35 29 0a 09 20 20 20 20 20 fset + 5)..
4700: 20 72 65 74 75 72 6e 3b 0a 09 20 20 2f 2a 20 76 return;.. /* v
4710: 61 6e 69 6c 6c 61 20 57 4b 42 20 63 6f 75 6c 64 anilla WKB could
4720: 20 62 65 20 65 6e 63 6f 64 65 64 20 61 73 20 6d be encoded as m
4730: 69 78 65 64 20 62 69 67 2d 2f 6c 69 74 74 6c 65 ixed big-/little
4740: 2d 65 6e 64 69 61 6e 20 73 75 62 2d 69 74 65 6d -endian sub-item
4750: 73 20 2a 2f 0a 09 20 20 69 66 20 28 2a 28 67 65 s */.. if (*(ge
4760: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
4770: 66 66 73 65 74 29 20 3d 3d 20 30 78 30 31 29 0a ffset) == 0x01).
4780: 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 . geo->endi
4790: 61 6e 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 an = GAIA_LITTLE
47a0: 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 65 6c 73 65 _ENDIAN;.. else
47b0: 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 .. geo->end
47c0: 69 61 6e 20 3d 20 47 41 49 41 5f 42 49 47 5f 45 ian = GAIA_BIG_E
47d0: 4e 44 49 41 4e 3b 0a 09 20 20 67 5f 74 79 70 65 NDIAN;.. g_type
47e0: 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 49 6d =.. gaiaIm
47f0: 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f port32 (geo->blo
4800: 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 b + geo->offset
4810: 2b 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e + 1, geo->endian
4820: 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e ,.... geo->en
4830: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 dian_arch);.. g
4840: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 35 3b eo->offset += 5;
4850: 0a 09 20 20 69 66 20 28 67 5f 74 79 70 65 20 3d .. if (g_type =
4860: 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 29 = GAIA_POLYGONZ)
4870: 0a 09 20 20 20 20 20 20 50 61 72 73 65 57 6b 62 .. ParseWkb
4880: 50 6f 6c 79 67 6f 6e 5a 20 28 67 65 6f 29 3b 0a PolygonZ (geo);.
4890: 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 }.}..stati
48a0: 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 47 c void.ParseWkbG
48b0: 65 6f 6d 43 6f 6c 6c 5a 20 28 67 61 69 61 47 65 eomCollZ (gaiaGe
48c0: 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b omCollPtr geo).{
48d0: 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 47 45 ./* decodes a GE
48e0: 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
48f0: 5a 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 Z from WKB */.
4900: 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e int ig;. in
4910: 74 20 6e 5f 67 65 6f 6d 73 3b 0a 20 20 20 20 69 t n_geoms;. i
4920: 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 f (geo->size < g
4930: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a eo->offset + 4).
4940: 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 67 .return;. n_g
4950: 65 6f 6d 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f eoms =..gaiaImpo
4960: 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt32 (geo->blob
4970: 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 + geo->offset, g
4980: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d eo->endian, geo-
4990: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 >endian_arch);.
49a0: 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b geo->offset +
49b0: 3d 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 67 = 4;. for (ig
49c0: 20 3d 20 30 3b 20 69 67 20 3c 20 6e 5f 67 65 6f = 0; ig < n_geo
49d0: 6d 73 3b 20 69 67 2b 2b 29 0a 20 20 20 20 20 20 ms; ig++).
49e0: 7b 0a 09 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 {.. /* parsing
49f0: 61 6c 6c 20 47 65 6f 6d 65 74 72 69 65 73 20 6f all Geometries o
4a00: 6e 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 ne by one */..
4a10: 69 6e 74 20 67 5f 74 79 70 65 3b 0a 09 20 20 69 int g_type;.. i
4a20: 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 f (geo->size < g
4a30: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a eo->offset + 5).
4a40: 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 . return;..
4a50: 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 /* vanilla WKB
4a60: 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 could be encode
4a70: 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d 2f d as mixed big-/
4a80: 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 little-endian su
4a90: 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 b-items */.. if
4aa0: 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 (*(geo->blob +
4ab0: 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 geo->offset) ==
4ac0: 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 6f 0x01).. geo
4ad0: 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f ->endian = GAIA_
4ae0: 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 LITTLE_ENDIAN;..
4af0: 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 65 else.. ge
4b00: 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 o->endian = GAIA
4b10: 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 _BIG_ENDIAN;..
4b20: 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 20 g_type =..
4b30: 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 gaiaImport32 (ge
4b40: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
4b50: 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e ffset + 1, geo->
4b60: 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 endian,.... g
4b70: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
4b80: 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ;.. geo->offset
4b90: 20 2b 3d 20 35 3b 0a 09 20 20 73 77 69 74 63 68 += 5;.. switch
4ba0: 20 28 67 5f 74 79 70 65 29 0a 09 20 20 20 20 7b (g_type).. {
4bb0: 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
4bc0: 50 4f 49 4e 54 5a 3a 0a 09 09 50 61 72 73 65 57 POINTZ:...ParseW
4bd0: 6b 62 50 6f 69 6e 74 5a 20 28 67 65 6f 29 3b 0a kbPointZ (geo);.
4be0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 ..break;.. ca
4bf0: 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 se GAIA_LINESTRI
4c00: 4e 47 5a 3a 0a 09 09 50 61 72 73 65 57 6b 62 4c NGZ:...ParseWkbL
4c10: 69 6e 65 5a 20 28 67 65 6f 29 3b 0a 09 09 62 72 ineZ (geo);...br
4c20: 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 eak;.. case G
4c30: 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 09 AIA_POLYGONZ:...
4c40: 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e 5a ParseWkbPolygonZ
4c50: 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b (geo);...break;
4c60: 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
4c70: 4d 55 4c 54 49 50 4f 49 4e 54 5a 3a 0a 09 09 50 MULTIPOINTZ:...P
4c80: 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 6e arseWkbMultiPoin
4c90: 74 5a 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 tZ (geo);...brea
4ca0: 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 k;.. case GAI
4cb0: 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e A_MULTILINESTRIN
4cc0: 47 5a 3a 0a 09 09 50 61 72 73 65 57 6b 62 4d 75 GZ:...ParseWkbMu
4cd0: 6c 74 69 4c 69 6e 65 5a 20 28 67 65 6f 29 3b 0a ltiLineZ (geo);.
4ce0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 ..break;.. ca
4cf0: 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c se GAIA_MULTIPOL
4d00: 59 47 4f 4e 5a 3a 0a 09 09 50 61 72 73 65 57 6b YGONZ:...ParseWk
4d10: 62 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 5a 20 28 bMultiPolygonZ (
4d20: 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 geo);...break;..
4d30: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 case GAIA_GE
4d40: 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
4d50: 5a 3a 0a 09 09 50 61 72 73 65 57 6b 62 47 65 6f Z:...ParseWkbGeo
4d60: 6d 43 6f 6c 6c 5a 20 28 67 65 6f 29 3b 0a 09 09 mCollZ (geo);...
4d70: 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d 3b 0a 20 break;.. };.
4d80: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
4d90: 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 4d 75 void.ParseWkbMu
4da0: 6c 74 69 50 6f 69 6e 74 4d 20 28 67 61 69 61 47 ltiPointM (gaiaG
4db0: 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a eomCollPtr geo).
4dc0: 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 4d {./* decodes a M
4dd0: 55 4c 54 49 50 4f 49 4e 54 4d 20 66 72 6f 6d 20 ULTIPOINTM from
4de0: 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 WKB */. int i
4df0: 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 70 74 73 g;. int n_pts
4e00: 3b 0a 20 20 20 20 69 6e 74 20 67 5f 74 79 70 65 ;. int g_type
4e10: 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 ;. if (geo->s
4e20: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
4e30: 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a t + 4)..return;.
4e40: 20 20 20 20 6e 5f 70 74 73 20 3d 0a 09 67 61 69 n_pts =..gai
4e50: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
4e60: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
4e70: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
4e80: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
4e90: 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 h);. geo->off
4ea0: 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 6f set += 4;. fo
4eb0: 72 20 28 69 67 20 3d 20 30 3b 20 69 67 20 3c 20 r (ig = 0; ig <
4ec0: 6e 5f 70 74 73 3b 20 69 67 2b 2b 29 0a 20 20 20 n_pts; ig++).
4ed0: 20 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 69 {.. /* parsi
4ee0: 6e 67 20 61 6c 6c 20 50 6f 69 6e 74 73 20 6f 6e ng all Points on
4ef0: 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 e by one */.. i
4f00: 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 f (geo->size < g
4f10: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a eo->offset + 5).
4f20: 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 . return;..
4f30: 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 /* vanilla WKB
4f40: 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 could be encode
4f50: 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d 2f d as mixed big-/
4f60: 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 little-endian su
4f70: 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 b-items */.. if
4f80: 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 (*(geo->blob +
4f90: 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 geo->offset) ==
4fa0: 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 6f 0x01).. geo
4fb0: 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f ->endian = GAIA_
4fc0: 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 LITTLE_ENDIAN;..
4fd0: 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 65 else.. ge
4fe0: 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 o->endian = GAIA
4ff0: 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 _BIG_ENDIAN;..
5000: 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 20 g_type =..
5010: 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 gaiaImport32 (ge
5020: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
5030: 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e ffset + 1, geo->
5040: 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 endian,.... g
5050: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
5060: 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ;.. geo->offset
5070: 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 67 5f += 5;.. if (g_
5080: 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 49 type == GAIA_POI
5090: 4e 54 4d 29 0a 09 20 20 20 20 20 20 50 61 72 73 NTM).. Pars
50a0: 65 57 6b 62 50 6f 69 6e 74 4d 20 28 67 65 6f 29 eWkbPointM (geo)
50b0: 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 ;. }.}..sta
50c0: 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b tic void.ParseWk
50d0: 62 4d 75 6c 74 69 4c 69 6e 65 4d 20 28 67 61 69 bMultiLineM (gai
50e0: 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f aGeomCollPtr geo
50f0: 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 ).{./* decodes a
5100: 20 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 MULTILINESTRING
5110: 4d 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 M from WKB */.
5120: 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e int ig;. in
5130: 74 20 6e 5f 6c 6e 73 3b 0a 20 20 20 20 69 6e 74 t n_lns;. int
5140: 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 20 g_type;. if
5150: 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f (geo->size < geo
5160: 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 ->offset + 4)..r
5170: 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 6c 6e 73 eturn;. n_lns
5180: 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 =..gaiaImport32
5190: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
51a0: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
51b0: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
51c0: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 ian_arch);. g
51d0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b eo->offset += 4;
51e0: 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 . for (ig = 0
51f0: 3b 20 69 67 20 3c 20 6e 5f 6c 6e 73 3b 20 69 67 ; ig < n_lns; ig
5200: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f ++). {.. /
5210: 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 4c 69 * parsing all Li
5220: 6e 65 73 74 72 69 6e 67 73 20 6f 6e 65 20 62 79 nestrings one by
5230: 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 66 20 28 67 one */.. if (g
5240: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
5250: 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 20 20 20 offset + 5)..
5260: 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 2f 2a return;.. /*
5270: 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 63 6f 75 vanilla WKB cou
5280: 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 20 61 73 ld be encoded as
5290: 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c 69 74 74 mixed big-/litt
52a0: 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 2d 69 74 le-endian sub-it
52b0: 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 28 2a 28 ems */.. if (*(
52c0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
52d0: 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 78 30 31 >offset) == 0x01
52e0: 29 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e ).. geo->en
52f0: 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c 49 54 54 dian = GAIA_LITT
5300: 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 65 6c LE_ENDIAN;.. el
5310: 73 65 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 se.. geo->e
5320: 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 42 49 47 ndian = GAIA_BIG
5330: 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 5f 74 79 _ENDIAN;.. g_ty
5340: 70 65 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 pe =.. gaia
5350: 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 Import32 (geo->b
5360: 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 lob + geo->offse
5370: 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 69 t + 1, geo->endi
5380: 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e an,.... geo->
5390: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
53a0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 geo->offset +=
53b0: 35 3b 0a 09 20 20 69 66 20 28 67 5f 74 79 70 65 5;.. if (g_type
53c0: 20 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 == GAIA_LINESTR
53d0: 49 4e 47 4d 29 0a 09 20 20 20 20 20 20 50 61 72 INGM).. Par
53e0: 73 65 57 6b 62 4c 69 6e 65 4d 20 28 67 65 6f 29 seWkbLineM (geo)
53f0: 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 ;. }.}..sta
5400: 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b tic void.ParseWk
5410: 62 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 4d 20 28 bMultiPolygonM (
5420: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
5430: 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 geo).{./* decode
5440: 73 20 61 20 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e s a MULTIPOLYGON
5450: 4d 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 M from WKB */.
5460: 20 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e int ig;. in
5470: 74 20 6e 5f 70 67 73 3b 0a 20 20 20 20 69 6e 74 t n_pgs;. int
5480: 20 67 5f 74 79 70 65 3b 0a 20 20 20 20 69 66 20 g_type;. if
5490: 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f (geo->size < geo
54a0: 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 ->offset + 4)..r
54b0: 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 70 67 73 eturn;. n_pgs
54c0: 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 =..gaiaImport32
54d0: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
54e0: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
54f0: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
5500: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 ian_arch);. g
5510: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b eo->offset += 4;
5520: 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 . for (ig = 0
5530: 3b 20 69 67 20 3c 20 6e 5f 70 67 73 3b 20 69 67 ; ig < n_pgs; ig
5540: 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f ++). {.. /
5550: 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 50 6f * parsing all Po
5560: 6c 79 67 6f 6e 73 20 6f 6e 65 20 62 79 20 6f 6e lygons one by on
5570: 65 20 2a 2f 0a 09 20 20 69 66 20 28 67 65 6f 2d e */.. if (geo-
5580: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
5590: 73 65 74 20 2b 20 35 29 0a 09 20 20 20 20 20 20 set + 5)..
55a0: 72 65 74 75 72 6e 3b 0a 09 20 20 2f 2a 20 76 61 return;.. /* va
55b0: 6e 69 6c 6c 61 20 57 4b 42 20 63 6f 75 6c 64 20 nilla WKB could
55c0: 62 65 20 65 6e 63 6f 64 65 64 20 61 73 20 6d 69 be encoded as mi
55d0: 78 65 64 20 62 69 67 2d 2f 6c 69 74 74 6c 65 2d xed big-/little-
55e0: 65 6e 64 69 61 6e 20 73 75 62 2d 69 74 65 6d 73 endian sub-items
55f0: 20 2a 2f 0a 09 20 20 69 66 20 28 2a 28 67 65 6f */.. if (*(geo
5600: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
5610: 66 73 65 74 29 20 3d 3d 20 30 78 30 31 29 0a 09 fset) == 0x01)..
5620: 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 geo->endia
5630: 6e 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f n = GAIA_LITTLE_
5640: 45 4e 44 49 41 4e 3b 0a 09 20 20 65 6c 73 65 0a ENDIAN;.. else.
5650: 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 . geo->endi
5660: 61 6e 20 3d 20 47 41 49 41 5f 42 49 47 5f 45 4e an = GAIA_BIG_EN
5670: 44 49 41 4e 3b 0a 09 20 20 67 5f 74 79 70 65 20 DIAN;.. g_type
5680: 3d 0a 09 20 20 20 20 20 20 67 61 69 61 49 6d 70 =.. gaiaImp
5690: 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort32 (geo->blob
56a0: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b + geo->offset +
56b0: 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 1, geo->endian,
56c0: 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 .... geo->end
56d0: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 ian_arch);.. ge
56e0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 35 3b 0a o->offset += 5;.
56f0: 09 20 20 69 66 20 28 67 5f 74 79 70 65 20 3d 3d . if (g_type ==
5700: 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 29 0a GAIA_POLYGONM).
5710: 09 20 20 20 20 20 20 50 61 72 73 65 57 6b 62 50 . ParseWkbP
5720: 6f 6c 79 67 6f 6e 4d 20 28 67 65 6f 29 3b 0a 20 olygonM (geo);.
5730: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
5740: 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 47 65 void.ParseWkbGe
5750: 6f 6d 43 6f 6c 6c 4d 20 28 67 61 69 61 47 65 6f omCollM (gaiaGeo
5760: 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a mCollPtr geo).{.
5770: 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 47 45 4f /* decodes a GEO
5780: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
5790: 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 from WKB */.
57a0: 20 69 6e 74 20 69 67 3b 0a 20 20 20 20 69 6e 74 int ig;. int
57b0: 20 6e 5f 67 65 6f 6d 73 3b 0a 20 20 20 20 69 66 n_geoms;. if
57c0: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
57d0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 o->offset + 4)..
57e0: 72 65 74 75 72 6e 3b 0a 20 20 20 20 6e 5f 67 65 return;. n_ge
57f0: 6f 6d 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 oms =..gaiaImpor
5800: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
5810: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
5820: 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e o->endian, geo->
5830: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 endian_arch);.
5840: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
5850: 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 67 20 4;. for (ig
5860: 3d 20 30 3b 20 69 67 20 3c 20 6e 5f 67 65 6f 6d = 0; ig < n_geom
5870: 73 3b 20 69 67 2b 2b 29 0a 20 20 20 20 20 20 7b s; ig++). {
5880: 0a 09 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 61 .. /* parsing a
5890: 6c 6c 20 47 65 6f 6d 65 74 72 69 65 73 20 6f 6e ll Geometries on
58a0: 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 e by one */.. i
58b0: 6e 74 20 67 5f 74 79 70 65 3b 0a 09 20 20 69 66 nt g_type;.. if
58c0: 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 (geo->size < ge
58d0: 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 o->offset + 5)..
58e0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 return;..
58f0: 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 /* vanilla WKB
5900: 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 could be encoded
5910: 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c as mixed big-/l
5920: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 ittle-endian sub
5930: 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 -items */.. if
5940: 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 (*(geo->blob + g
5950: 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 eo->offset) == 0
5960: 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 6f 2d x01).. geo-
5970: 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c >endian = GAIA_L
5980: 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 ITTLE_ENDIAN;..
5990: 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 65 6f else.. geo
59a0: 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f ->endian = GAIA_
59b0: 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 BIG_ENDIAN;.. g
59c0: 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 20 67 _type =.. g
59d0: 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f aiaImport32 (geo
59e0: 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 ->blob + geo->of
59f0: 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 fset + 1, geo->e
5a00: 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 ndian,.... ge
5a10: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
5a20: 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 .. geo->offset
5a30: 2b 3d 20 35 3b 0a 09 20 20 73 77 69 74 63 68 20 += 5;.. switch
5a40: 28 67 5f 74 79 70 65 29 0a 09 20 20 20 20 7b 0a (g_type).. {.
5a50: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 . case GAIA_P
5a60: 4f 49 4e 54 4d 3a 0a 09 09 50 61 72 73 65 57 6b OINTM:...ParseWk
5a70: 62 50 6f 69 6e 74 4d 20 28 67 65 6f 29 3b 0a 09 bPointM (geo);..
5a80: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
5a90: 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e e GAIA_LINESTRIN
5aa0: 47 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 4c 69 GM:...ParseWkbLi
5ab0: 6e 65 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 neM (geo);...bre
5ac0: 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 ak;.. case GA
5ad0: 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a 09 09 50 IA_POLYGONM:...P
5ae0: 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e 4d 20 arseWkbPolygonM
5af0: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
5b00: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
5b10: 55 4c 54 49 50 4f 49 4e 54 4d 3a 0a 09 09 50 61 ULTIPOINTM:...Pa
5b20: 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 6e 74 rseWkbMultiPoint
5b30: 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b M (geo);...break
5b40: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
5b50: 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
5b60: 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 4d 75 6c M:...ParseWkbMul
5b70: 74 69 4c 69 6e 65 4d 20 28 67 65 6f 29 3b 0a 09 tiLineM (geo);..
5b80: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
5b90: 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 e GAIA_MULTIPOLY
5ba0: 47 4f 4e 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 GONM:...ParseWkb
5bb0: 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 4d 20 28 67 MultiPolygonM (g
5bc0: 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 eo);...break;..
5bd0: 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f case GAIA_GEO
5be0: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
5bf0: 3a 0a 09 09 50 61 72 73 65 57 6b 62 47 65 6f 6d :...ParseWkbGeom
5c00: 43 6f 6c 6c 4d 20 28 67 65 6f 29 3b 0a 09 09 62 CollM (geo);...b
5c10: 72 65 61 6b 3b 0a 09 20 20 20 20 7d 3b 0a 20 20 reak;.. };.
5c20: 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 }.}..static
5c30: 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 4d 75 6c void.ParseWkbMul
5c40: 74 69 50 6f 69 6e 74 5a 4d 20 28 67 61 69 61 47 tiPointZM (gaiaG
5c50: 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a eomCollPtr geo).
5c60: 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 20 4d {./* decodes a M
5c70: 55 4c 54 49 50 4f 49 4e 54 5a 4d 20 66 72 6f 6d ULTIPOINTZM from
5c80: 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 WKB */. int
5c90: 69 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 70 74 ig;. int n_pt
5ca0: 73 3b 0a 20 20 20 20 69 6e 74 20 67 5f 74 79 70 s;. int g_typ
5cb0: 65 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e e;. if (geo->
5cc0: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
5cd0: 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b et + 4)..return;
5ce0: 0a 20 20 20 20 6e 5f 70 74 73 20 3d 0a 09 67 61 . n_pts =..ga
5cf0: 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d iaImport32 (geo-
5d00: 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 >blob + geo->off
5d10: 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e set, geo->endian
5d20: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 , geo->endian_ar
5d30: 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 ch);. geo->of
5d40: 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 fset += 4;. f
5d50: 6f 72 20 28 69 67 20 3d 20 30 3b 20 69 67 20 3c or (ig = 0; ig <
5d60: 20 6e 5f 70 74 73 3b 20 69 67 2b 2b 29 0a 20 20 n_pts; ig++).
5d70: 20 20 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 {.. /* pars
5d80: 69 6e 67 20 61 6c 6c 20 50 6f 69 6e 74 73 20 6f ing all Points o
5d90: 6e 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 ne by one */..
5da0: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
5db0: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 geo->offset + 5)
5dc0: 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a .. return;.
5dd0: 09 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b . /* vanilla WK
5de0: 42 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 B could be encod
5df0: 65 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d ed as mixed big-
5e00: 2f 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 /little-endian s
5e10: 75 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 ub-items */.. i
5e20: 66 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b f (*(geo->blob +
5e30: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d geo->offset) ==
5e40: 20 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 0x01).. ge
5e50: 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 o->endian = GAIA
5e60: 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a _LITTLE_ENDIAN;.
5e70: 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 . else.. g
5e80: 65 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 eo->endian = GAI
5e90: 41 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 A_BIG_ENDIAN;..
5ea0: 20 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 g_type =..
5eb0: 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 gaiaImport32 (g
5ec0: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
5ed0: 6f 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d offset + 1, geo-
5ee0: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
5ef0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
5f00: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
5f10: 74 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 67 t += 5;.. if (g
5f20: 5f 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f _type == GAIA_PO
5f30: 49 4e 54 5a 4d 29 0a 09 20 20 20 20 20 20 50 61 INTZM).. Pa
5f40: 72 73 65 57 6b 62 50 6f 69 6e 74 5a 4d 20 28 67 rseWkbPointZM (g
5f50: 65 6f 29 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a eo);. }.}..
5f60: 73 74 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 static void.Pars
5f70: 65 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 5a 4d 20 eWkbMultiLineZM
5f80: 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
5f90: 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 geo).{./* decod
5fa0: 65 73 20 61 20 4d 55 4c 54 49 4c 49 4e 45 53 54 es a MULTILINEST
5fb0: 52 49 4e 47 5a 4d 20 66 72 6f 6d 20 57 4b 42 20 RINGZM from WKB
5fc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 67 3b 0a 20 */. int ig;.
5fd0: 20 20 20 69 6e 74 20 6e 5f 6c 6e 73 3b 0a 20 20 int n_lns;.
5fe0: 20 20 69 6e 74 20 67 5f 74 79 70 65 3b 0a 20 20 int g_type;.
5ff0: 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 if (geo->size
6000: 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 < geo->offset +
6010: 34 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 4)..return;.
6020: 6e 5f 6c 6e 73 20 3d 0a 09 67 61 69 61 49 6d 70 n_lns =..gaiaImp
6030: 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort32 (geo->blob
6040: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
6050: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
6060: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
6070: 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 geo->offset
6080: 2b 3d 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 += 4;. for (i
6090: 67 20 3d 20 30 3b 20 69 67 20 3c 20 6e 5f 6c 6e g = 0; ig < n_ln
60a0: 73 3b 20 69 67 2b 2b 29 0a 20 20 20 20 20 20 7b s; ig++). {
60b0: 0a 09 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 61 .. /* parsing a
60c0: 6c 6c 20 4c 69 6e 65 73 74 72 69 6e 67 73 20 6f ll Linestrings o
60d0: 6e 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 ne by one */..
60e0: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
60f0: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 29 geo->offset + 5)
6100: 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a .. return;.
6110: 09 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 4b . /* vanilla WK
6120: 42 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f 64 B could be encod
6130: 65 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 2d ed as mixed big-
6140: 2f 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 73 /little-endian s
6150: 75 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 69 ub-items */.. i
6160: 66 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b f (*(geo->blob +
6170: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d 3d geo->offset) ==
6180: 20 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 65 0x01).. ge
6190: 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 41 o->endian = GAIA
61a0: 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 0a _LITTLE_ENDIAN;.
61b0: 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 67 . else.. g
61c0: 65 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 eo->endian = GAI
61d0: 41 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 20 A_BIG_ENDIAN;..
61e0: 20 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 20 g_type =..
61f0: 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 gaiaImport32 (g
6200: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
6210: 6f 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f 2d offset + 1, geo-
6220: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
6230: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
6240: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
6250: 74 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 67 t += 5;.. if (g
6260: 5f 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4c 49 _type == GAIA_LI
6270: 4e 45 53 54 52 49 4e 47 5a 4d 29 0a 09 20 20 20 NESTRINGZM)..
6280: 20 20 20 50 61 72 73 65 57 6b 62 4c 69 6e 65 5a ParseWkbLineZ
6290: 4d 20 28 67 65 6f 29 3b 0a 20 20 20 20 20 20 7d M (geo);. }
62a0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a .}..static void.
62b0: 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 6c ParseWkbMultiPol
62c0: 79 67 6f 6e 5a 4d 20 28 67 61 69 61 47 65 6f 6d ygonZM (gaiaGeom
62d0: 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f CollPtr geo).{./
62e0: 2a 20 64 65 63 6f 64 65 73 20 61 20 4d 55 4c 54 * decodes a MULT
62f0: 49 50 4f 4c 59 47 4f 4e 5a 4d 20 66 72 6f 6d 20 IPOLYGONZM from
6300: 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 WKB */. int i
6310: 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 70 67 73 g;. int n_pgs
6320: 3b 0a 20 20 20 20 69 6e 74 20 67 5f 74 79 70 65 ;. int g_type
6330: 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 ;. if (geo->s
6340: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
6350: 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a t + 4)..return;.
6360: 20 20 20 20 6e 5f 70 67 73 20 3d 0a 09 67 61 69 n_pgs =..gai
6370: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
6380: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
6390: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
63a0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
63b0: 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 h);. geo->off
63c0: 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 6f set += 4;. fo
63d0: 72 20 28 69 67 20 3d 20 30 3b 20 69 67 20 3c 20 r (ig = 0; ig <
63e0: 6e 5f 70 67 73 3b 20 69 67 2b 2b 29 0a 20 20 20 n_pgs; ig++).
63f0: 20 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 69 {.. /* parsi
6400: 6e 67 20 61 6c 6c 20 50 6f 6c 79 67 6f 6e 73 20 ng all Polygons
6410: 6f 6e 65 20 62 79 20 6f 6e 65 20 2a 2f 0a 09 20 one by one */..
6420: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
6430: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 35 geo->offset + 5
6440: 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b ).. return;
6450: 0a 09 20 20 2f 2a 20 76 61 6e 69 6c 6c 61 20 57 .. /* vanilla W
6460: 4b 42 20 63 6f 75 6c 64 20 62 65 20 65 6e 63 6f KB could be enco
6470: 64 65 64 20 61 73 20 6d 69 78 65 64 20 62 69 67 ded as mixed big
6480: 2d 2f 6c 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 -/little-endian
6490: 73 75 62 2d 69 74 65 6d 73 20 2a 2f 0a 09 20 20 sub-items */..
64a0: 69 66 20 28 2a 28 67 65 6f 2d 3e 62 6c 6f 62 20 if (*(geo->blob
64b0: 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 29 20 3d + geo->offset) =
64c0: 3d 20 30 78 30 31 29 0a 09 20 20 20 20 20 20 67 = 0x01).. g
64d0: 65 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 49 eo->endian = GAI
64e0: 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b A_LITTLE_ENDIAN;
64f0: 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 .. else..
6500: 67 65 6f 2d 3e 65 6e 64 69 61 6e 20 3d 20 47 41 geo->endian = GA
6510: 49 41 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a 09 IA_BIG_ENDIAN;..
6520: 20 20 67 5f 74 79 70 65 20 3d 0a 09 20 20 20 20 g_type =..
6530: 20 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 gaiaImport32 (
6540: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
6550: 3e 6f 66 66 73 65 74 20 2b 20 31 2c 20 67 65 6f >offset + 1, geo
6560: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 ->endian,....
6570: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
6580: 68 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 h);.. geo->offs
6590: 65 74 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 et += 5;.. if (
65a0: 67 5f 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 g_type == GAIA_P
65b0: 4f 4c 59 47 4f 4e 5a 4d 29 0a 09 20 20 20 20 20 OLYGONZM)..
65c0: 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e ParseWkbPolygon
65d0: 5a 4d 20 28 67 65 6f 29 3b 0a 20 20 20 20 20 20 ZM (geo);.
65e0: 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 }.}..static void
65f0: 0a 50 61 72 73 65 57 6b 62 47 65 6f 6d 43 6f 6c .ParseWkbGeomCol
6600: 6c 5a 4d 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c lZM (gaiaGeomCol
6610: 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 lPtr geo).{./* d
6620: 65 63 6f 64 65 73 20 61 20 47 45 4f 4d 45 54 52 ecodes a GEOMETR
6630: 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 20 66 72 YCOLLECTIONZM fr
6640: 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e om WKB */. in
6650: 74 20 69 67 3b 0a 20 20 20 20 69 6e 74 20 6e 5f t ig;. int n_
6660: 67 65 6f 6d 73 3b 0a 20 20 20 20 69 66 20 28 67 geoms;. if (g
6670: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
6680: 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 65 74 offset + 4)..ret
6690: 75 72 6e 3b 0a 20 20 20 20 6e 5f 67 65 6f 6d 73 urn;. n_geoms
66a0: 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 74 33 32 =..gaiaImport32
66b0: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 (geo->blob + ge
66c0: 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e o->offset, geo->
66d0: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
66e0: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 ian_arch);. g
66f0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b eo->offset += 4;
6700: 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 . for (ig = 0
6710: 3b 20 69 67 20 3c 20 6e 5f 67 65 6f 6d 73 3b 20 ; ig < n_geoms;
6720: 69 67 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 ig++). {..
6730: 20 2f 2a 20 70 61 72 73 69 6e 67 20 61 6c 6c 20 /* parsing all
6740: 47 65 6f 6d 65 74 72 69 65 73 20 6f 6e 65 20 62 Geometries one b
6750: 79 20 6f 6e 65 20 2a 2f 0a 09 20 20 69 6e 74 20 y one */.. int
6760: 67 5f 74 79 70 65 3b 0a 09 20 20 69 66 20 28 67 g_type;.. if (g
6770: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
6780: 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 20 20 20 offset + 5)..
6790: 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 2f 2a return;.. /*
67a0: 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 63 6f 75 vanilla WKB cou
67b0: 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 20 61 73 ld be encoded as
67c0: 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c 69 74 74 mixed big-/litt
67d0: 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 2d 69 74 le-endian sub-it
67e0: 65 6d 73 20 2a 2f 0a 09 20 20 69 66 20 28 2a 28 ems */.. if (*(
67f0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
6800: 3e 6f 66 66 73 65 74 29 20 3d 3d 20 30 78 30 31 >offset) == 0x01
6810: 29 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 6e ).. geo->en
6820: 64 69 61 6e 20 3d 20 47 41 49 41 5f 4c 49 54 54 dian = GAIA_LITT
6830: 4c 45 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 65 6c LE_ENDIAN;.. el
6840: 73 65 0a 09 20 20 20 20 20 20 67 65 6f 2d 3e 65 se.. geo->e
6850: 6e 64 69 61 6e 20 3d 20 47 41 49 41 5f 42 49 47 ndian = GAIA_BIG
6860: 5f 45 4e 44 49 41 4e 3b 0a 09 20 20 67 5f 74 79 _ENDIAN;.. g_ty
6870: 70 65 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 pe =.. gaia
6880: 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 Import32 (geo->b
6890: 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 lob + geo->offse
68a0: 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 69 t + 1, geo->endi
68b0: 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d 3e an,.... geo->
68c0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
68d0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 geo->offset +=
68e0: 35 3b 0a 09 20 20 73 77 69 74 63 68 20 28 67 5f 5;.. switch (g_
68f0: 74 79 70 65 29 0a 09 20 20 20 20 7b 0a 09 20 20 type).. {..
6900: 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e case GAIA_POIN
6910: 54 5a 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 50 TZM:...ParseWkbP
6920: 6f 69 6e 74 5a 4d 20 28 67 65 6f 29 3b 0a 09 09 ointZM (geo);...
6930: 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 break;.. case
6940: 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
6950: 5a 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 4c 69 ZM:...ParseWkbLi
6960: 6e 65 5a 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 neZM (geo);...br
6970: 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 eak;.. case G
6980: 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 AIA_POLYGONZM:..
6990: 09 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e .ParseWkbPolygon
69a0: 5a 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 ZM (geo);...brea
69b0: 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 k;.. case GAI
69c0: 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 3a 0a A_MULTIPOINTZM:.
69d0: 09 09 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 ..ParseWkbMultiP
69e0: 6f 69 6e 74 5a 4d 20 28 67 65 6f 29 3b 0a 09 09 ointZM (geo);...
69f0: 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 break;.. case
6a00: 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
6a10: 54 52 49 4e 47 5a 4d 3a 0a 09 09 50 61 72 73 65 TRINGZM:...Parse
6a20: 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 5a 4d 20 28 WkbMultiLineZM (
6a30: 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 geo);...break;..
6a40: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 case GAIA_MU
6a50: 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 09 LTIPOLYGONZM:...
6a60: 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 6c ParseWkbMultiPol
6a70: 79 67 6f 6e 5a 4d 20 28 67 65 6f 29 3b 0a 09 09 ygonZM (geo);...
6a80: 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 break;.. case
6a90: 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
6aa0: 4c 4c 45 43 54 49 4f 4e 5a 4d 3a 0a 09 09 50 61 LLECTIONZM:...Pa
6ab0: 72 73 65 57 6b 62 47 65 6f 6d 43 6f 6c 6c 5a 4d rseWkbGeomCollZM
6ac0: 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b (geo);...break;
6ad0: 0a 09 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 7d .. };. }
6ae0: 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 0a .}..static void.
6af0: 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 57 ParseCompressedW
6b00: 6b 62 4c 69 6e 65 20 28 67 61 69 61 47 65 6f 6d kbLine (gaiaGeom
6b10: 43 6f 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f CollPtr geo).{./
6b20: 2a 20 64 65 63 6f 64 65 73 20 61 20 43 4f 4d 50 * decodes a COMP
6b30: 52 45 53 53 45 44 20 4c 49 4e 45 53 54 52 49 4e RESSED LINESTRIN
6b40: 47 20 66 72 6f 6d 20 57 4b 42 20 2a 2f 0a 20 20 G from WKB */.
6b50: 20 20 69 6e 74 20 70 6f 69 6e 74 73 3b 0a 20 20 int points;.
6b60: 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 20 64 6f int iv;. do
6b70: 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f 75 62 uble x;. doub
6b80: 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le y;. double
6b90: 20 6c 61 73 74 5f 78 20 3d 20 30 2e 30 3b 0a 20 last_x = 0.0;.
6ba0: 20 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 79 double last_y
6bb0: 20 3d 20 30 2e 30 3b 0a 20 20 20 20 66 6c 6f 61 = 0.0;. floa
6bc0: 74 20 66 78 3b 0a 20 20 20 20 66 6c 6f 61 74 20 t fx;. float
6bd0: 66 79 3b 0a 20 20 20 20 67 61 69 61 4c 69 6e 65 fy;. gaiaLine
6be0: 73 74 72 69 6e 67 50 74 72 20 6c 69 6e 65 3b 0a stringPtr line;.
6bf0: 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a if (geo->siz
6c00: 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 e < geo->offset
6c10: 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 + 4)..return;.
6c20: 20 20 70 6f 69 6e 74 73 20 3d 0a 09 67 61 69 61 points =..gaia
6c30: 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 Import32 (geo->b
6c40: 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 lob + geo->offse
6c50: 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 t, geo->endian,
6c60: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
6c70: 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 );. geo->offs
6c80: 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 69 66 20 et += 4;. if
6c90: 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f (geo->size < geo
6ca0: 2d 3e 6f 66 66 73 65 74 20 2b 20 28 38 20 2a 20 ->offset + (8 *
6cb0: 70 6f 69 6e 74 73 29 20 2b 20 31 36 29 0a 09 72 points) + 16)..r
6cc0: 65 74 75 72 6e 3b 0a 20 20 20 20 6c 69 6e 65 20 eturn;. line
6cd0: 3d 20 67 61 69 61 41 64 64 4c 69 6e 65 73 74 72 = gaiaAddLinestr
6ce0: 69 6e 67 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 ingToGeomColl (g
6cf0: 65 6f 2c 20 70 6f 69 6e 74 73 29 3b 0a 20 20 20 eo, points);.
6d00: 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 for (iv = 0; iv
6d10: 20 3c 20 70 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 < points; iv++)
6d20: 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 . {.. if (
6d30: 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d iv == 0 || iv ==
6d40: 20 28 70 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 (points - 1))..
6d50: 20 20 20 20 7b 0a 09 09 2f 2a 20 66 69 72 73 74 {.../* first
6d60: 20 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 and last vertic
6d70: 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 es are uncompres
6d80: 73 65 64 20 2a 2f 0a 09 09 78 20 3d 20 67 61 69 sed */...x = gai
6d90: 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e aImport64 (geo->
6da0: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
6db0: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
6dc0: 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 ..... geo->endi
6dd0: 61 6e 5f 61 72 63 68 29 3b 0a 09 09 79 20 3d 20 an_arch);...y =
6de0: 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 gaiaImport64 (ge
6df0: 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e o->blob + (geo->
6e00: 6f 66 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f offset + 8), geo
6e10: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 ->endian,.....
6e20: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
6e30: 29 3b 0a 09 09 67 65 6f 2d 3e 6f 66 66 73 65 74 );...geo->offset
6e40: 20 2b 3d 20 31 36 3b 0a 09 20 20 20 20 7d 0a 09 += 16;.. }..
6e50: 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 else.. {...
6e60: 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 /* any other int
6e70: 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 ermediate vertex
6e80: 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 2a is compressed *
6e90: 2f 0a 09 09 66 78 20 3d 20 67 61 69 61 49 6d 70 /...fx = gaiaImp
6ea0: 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 6c 6f ortF32 (geo->blo
6eb0: 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c b + geo->offset,
6ec0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 geo->endian,...
6ed0: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
6ee0: 6e 5f 61 72 63 68 29 3b 0a 09 09 66 79 20 3d 20 n_arch);...fy =
6ef0: 67 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 gaiaImportF32 (g
6f00: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d eo->blob + (geo-
6f10: 3e 6f 66 66 73 65 74 20 2b 20 34 29 2c 20 67 65 >offset + 4), ge
6f20: 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 o->endian,.....
6f30: 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 geo->endian_a
6f40: 72 63 68 29 3b 0a 09 09 78 20 3d 20 6c 61 73 74 rch);...x = last
6f50: 5f 78 20 2b 20 66 78 3b 0a 09 09 79 20 3d 20 6c _x + fx;...y = l
6f60: 61 73 74 5f 79 20 2b 20 66 79 3b 0a 09 09 67 65 ast_y + fy;...ge
6f70: 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a o->offset += 8;.
6f80: 09 20 20 20 20 7d 0a 09 20 20 67 61 69 61 53 65 . }.. gaiaSe
6f90: 74 50 6f 69 6e 74 20 28 6c 69 6e 65 2d 3e 43 6f tPoint (line->Co
6fa0: 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 29 3b ords, iv, x, y);
6fb0: 0a 09 20 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a .. last_x = x;.
6fc0: 09 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 20 . last_y = y;.
6fd0: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
6fe0: 20 76 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 void.ParseCompr
6ff0: 65 73 73 65 64 57 6b 62 4c 69 6e 65 5a 20 28 67 essedWkbLineZ (g
7000: 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 aiaGeomCollPtr g
7010: 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 eo).{./* decodes
7020: 20 61 20 43 4f 4d 50 52 45 53 53 45 44 20 4c 49 a COMPRESSED LI
7030: 4e 45 53 54 52 49 4e 47 5a 20 66 72 6f 6d 20 57 NESTRINGZ from W
7040: 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 6f KB */. int po
7050: 69 6e 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 ints;. int iv
7060: 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a ;. double x;.
7070: 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 double y;.
7080: 20 20 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 double z;.
7090: 64 6f 75 62 6c 65 20 6c 61 73 74 5f 78 20 3d 20 double last_x =
70a0: 30 2e 30 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 0.0;. double
70b0: 6c 61 73 74 5f 79 20 3d 20 30 2e 30 3b 0a 20 20 last_y = 0.0;.
70c0: 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 7a 20 double last_z
70d0: 3d 20 30 2e 30 3b 0a 20 20 20 20 66 6c 6f 61 74 = 0.0;. float
70e0: 20 66 78 3b 0a 20 20 20 20 66 6c 6f 61 74 20 66 fx;. float f
70f0: 79 3b 0a 20 20 20 20 66 6c 6f 61 74 20 66 7a 3b y;. float fz;
7100: 0a 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 . gaiaLinestr
7110: 69 6e 67 50 74 72 20 6c 69 6e 65 3b 0a 20 20 20 ingPtr line;.
7120: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
7130: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 geo->offset + 4
7140: 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 70 )..return;. p
7150: 6f 69 6e 74 73 20 3d 0a 09 67 61 69 61 49 6d 70 oints =..gaiaImp
7160: 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort32 (geo->blob
7170: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
7180: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
7190: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
71a0: 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 geo->offset
71b0: 2b 3d 20 34 3b 0a 20 20 20 20 69 66 20 28 67 65 += 4;. if (ge
71c0: 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f o->size < geo->o
71d0: 66 66 73 65 74 20 2b 20 28 31 32 20 2a 20 70 6f ffset + (12 * po
71e0: 69 6e 74 73 29 20 2b 20 32 34 29 0a 09 72 65 74 ints) + 24)..ret
71f0: 75 72 6e 3b 0a 20 20 20 20 6c 69 6e 65 20 3d 20 urn;. line =
7200: 67 61 69 61 41 64 64 4c 69 6e 65 73 74 72 69 6e gaiaAddLinestrin
7210: 67 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f gToGeomColl (geo
7220: 2c 20 70 6f 69 6e 74 73 29 3b 0a 20 20 20 20 66 , points);. f
7230: 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c or (iv = 0; iv <
7240: 20 70 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 20 points; iv++).
7250: 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 69 76 {.. if (iv
7260: 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d 20 28 == 0 || iv == (
7270: 70 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 20 20 points - 1))..
7280: 20 20 7b 0a 09 09 2f 2a 20 66 69 72 73 74 20 61 {.../* first a
7290: 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 nd last vertices
72a0: 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 are uncompresse
72b0: 64 20 2a 2f 0a 09 09 78 20 3d 20 67 61 69 61 49 d */...x = gaiaI
72c0: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
72d0: 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ob + geo->offset
72e0: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
72f0: 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e ... geo->endian
7300: 5f 61 72 63 68 29 3b 0a 09 09 79 20 3d 20 67 61 _arch);...y = ga
7310: 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d iaImport64 (geo-
7320: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
7330: 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f 2d 3e fset + 8), geo->
7340: 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 endian,..... ge
7350: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
7360: 0a 09 09 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 ...z = gaiaImpor
7370: 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t64 (geo->blob +
7380: 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 (geo->offset +
7390: 31 36 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 16), geo->endian
73a0: 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 ,..... geo->end
73b0: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 67 65 6f ian_arch);...geo
73c0: 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 32 34 3b 0a ->offset += 24;.
73d0: 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
73e0: 20 20 20 20 7b 0a 09 09 2f 2a 20 61 6e 79 20 6f {.../* any o
73f0: 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 ther intermediat
7400: 65 20 76 65 72 74 65 78 20 69 73 20 63 6f 6d 70 e vertex is comp
7410: 72 65 73 73 65 64 20 2a 2f 0a 09 09 66 78 20 3d ressed */...fx =
7420: 20 67 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 gaiaImportF32 (
7430: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
7440: 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e >offset, geo->en
7450: 64 69 61 6e 2c 0a 09 09 09 09 20 20 20 20 67 65 dian,..... ge
7460: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
7470: 0a 09 09 66 79 20 3d 20 67 61 69 61 49 6d 70 6f ...fy = gaiaImpo
7480: 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 rtF32 (geo->blob
7490: 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 + (geo->offset
74a0: 2b 20 34 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 + 4), geo->endia
74b0: 6e 2c 0a 09 09 09 09 20 20 20 20 67 65 6f 2d 3e n,..... geo->
74c0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
74d0: 66 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 46 fz = gaiaImportF
74e0: 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 32 (geo->blob +
74f0: 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 38 (geo->offset + 8
7500: 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a ), geo->endian,.
7510: 09 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 .... geo->end
7520: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 78 20 3d ian_arch);...x =
7530: 20 6c 61 73 74 5f 78 20 2b 20 66 78 3b 0a 09 09 last_x + fx;...
7540: 79 20 3d 20 6c 61 73 74 5f 79 20 2b 20 66 79 3b y = last_y + fy;
7550: 0a 09 09 7a 20 3d 20 6c 61 73 74 5f 7a 20 2b 20 ...z = last_z +
7560: 66 7a 3b 0a 09 09 67 65 6f 2d 3e 6f 66 66 73 65 fz;...geo->offse
7570: 74 20 2b 3d 20 31 32 3b 0a 09 20 20 20 20 7d 0a t += 12;.. }.
7580: 09 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 58 . gaiaSetPointX
7590: 59 5a 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 YZ (line->Coords
75a0: 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a 29 3b 0a , iv, x, y, z);.
75b0: 09 20 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 . last_x = x;..
75c0: 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 20 last_y = y;..
75d0: 20 6c 61 73 74 5f 7a 20 3d 20 7a 3b 0a 20 20 20 last_z = z;.
75e0: 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 76 }.}..static v
75f0: 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 65 73 oid.ParseCompres
7600: 73 65 64 57 6b 62 4c 69 6e 65 4d 20 28 67 61 69 sedWkbLineM (gai
7610: 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f aGeomCollPtr geo
7620: 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 20 61 ).{./* decodes a
7630: 20 43 4f 4d 50 52 45 53 53 45 44 20 4c 49 4e 45 COMPRESSED LINE
7640: 53 54 52 49 4e 47 4d 20 66 72 6f 6d 20 57 4b 42 STRINGM from WKB
7650: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 6f 69 6e */. int poin
7660: 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a ts;. int iv;.
7670: 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
7680: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
7690: 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 20 64 6f double m;. do
76a0: 75 62 6c 65 20 6c 61 73 74 5f 78 20 3d 20 30 2e uble last_x = 0.
76b0: 30 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 6c 61 0;. double la
76c0: 73 74 5f 79 20 3d 20 30 2e 30 3b 0a 20 20 20 20 st_y = 0.0;.
76d0: 66 6c 6f 61 74 20 66 78 3b 0a 20 20 20 20 66 6c float fx;. fl
76e0: 6f 61 74 20 66 79 3b 0a 20 20 20 20 67 61 69 61 oat fy;. gaia
76f0: 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 6c 69 LinestringPtr li
7700: 6e 65 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d ne;. if (geo-
7710: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
7720: 73 65 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e set + 4)..return
7730: 3b 0a 20 20 20 20 70 6f 69 6e 74 73 20 3d 0a 09 ;. points =..
7740: 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 67 65 gaiaImport32 (ge
7750: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
7760: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
7770: 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f an, geo->endian_
7780: 61 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e arch);. geo->
7790: 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 offset += 4;.
77a0: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
77b0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 geo->offset + (
77c0: 31 36 20 2a 20 70 6f 69 6e 74 73 29 20 2b 20 31 16 * points) + 1
77d0: 36 29 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 6)..return;.
77e0: 6c 69 6e 65 20 3d 20 67 61 69 61 41 64 64 4c 69 line = gaiaAddLi
77f0: 6e 65 73 74 72 69 6e 67 54 6f 47 65 6f 6d 43 6f nestringToGeomCo
7800: 6c 6c 20 28 67 65 6f 2c 20 70 6f 69 6e 74 73 29 ll (geo, points)
7810: 3b 0a 20 20 20 20 66 6f 72 20 28 69 76 20 3d 20 ;. for (iv =
7820: 30 3b 20 69 76 20 3c 20 70 6f 69 6e 74 73 3b 20 0; iv < points;
7830: 69 76 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 iv++). {..
7840: 20 69 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 if (iv == 0 ||
7850: 69 76 20 3d 3d 20 28 70 6f 69 6e 74 73 20 2d 20 iv == (points -
7860: 31 29 29 0a 09 20 20 20 20 7b 0a 09 09 2f 2a 20 1)).. {.../*
7870: 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 20 76 first and last v
7880: 65 72 74 69 63 65 73 20 61 72 65 20 75 6e 63 6f ertices are unco
7890: 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 78 20 mpressed */...x
78a0: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
78b0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
78c0: 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e >offset, geo->en
78d0: 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d dian,..... geo-
78e0: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
78f0: 09 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 .y = gaiaImport6
7900: 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 4 (geo->blob + (
7910: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 geo->offset + 8)
7920: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
7930: 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e ... geo->endian
7940: 5f 61 72 63 68 29 3b 0a 09 09 6d 20 3d 20 67 61 _arch);...m = ga
7950: 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d iaImport64 (geo-
7960: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
7970: 66 73 65 74 20 2b 20 31 36 29 2c 20 67 65 6f 2d fset + 16), geo-
7980: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 >endian,..... g
7990: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
79a0: 3b 0a 09 09 67 65 6f 2d 3e 6f 66 66 73 65 74 20 ;...geo->offset
79b0: 2b 3d 20 32 34 3b 0a 09 20 20 20 20 7d 0a 09 20 += 24;.. }..
79c0: 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 2f else.. {.../
79d0: 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 65 * any other inte
79e0: 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 20 rmediate vertex
79f0: 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 2a 2f is compressed */
7a00: 0a 09 09 66 78 20 3d 20 67 61 69 61 49 6d 70 6f ...fx = gaiaImpo
7a10: 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 rtF32 (geo->blob
7a20: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
7a30: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 geo->endian,....
7a40: 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e . geo->endian
7a50: 5f 61 72 63 68 29 3b 0a 09 09 66 79 20 3d 20 67 _arch);...fy = g
7a60: 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 aiaImportF32 (ge
7a70: 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e o->blob + (geo->
7a80: 6f 66 66 73 65 74 20 2b 20 34 29 2c 20 67 65 6f offset + 4), geo
7a90: 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 ->endian,.....
7aa0: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 geo->endian_ar
7ab0: 63 68 29 3b 0a 09 09 6d 20 3d 20 67 61 69 61 49 ch);...m = gaiaI
7ac0: 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c mport64 (geo->bl
7ad0: 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 ob + (geo->offse
7ae0: 74 20 2b 20 38 29 2c 20 67 65 6f 2d 3e 65 6e 64 t + 8), geo->end
7af0: 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e ian,..... geo->
7b00: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
7b10: 78 20 3d 20 6c 61 73 74 5f 78 20 2b 20 66 78 3b x = last_x + fx;
7b20: 0a 09 09 79 20 3d 20 6c 61 73 74 5f 79 20 2b 20 ...y = last_y +
7b30: 66 79 3b 0a 09 09 67 65 6f 2d 3e 6f 66 66 73 65 fy;...geo->offse
7b40: 74 20 2b 3d 20 31 36 3b 0a 09 20 20 20 20 7d 0a t += 16;.. }.
7b50: 09 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 58 . gaiaSetPointX
7b60: 59 4d 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 YM (line->Coords
7b70: 2c 20 69 76 2c 20 78 2c 20 79 2c 20 6d 29 3b 0a , iv, x, y, m);.
7b80: 09 20 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 . last_x = x;..
7b90: 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 20 20 last_y = y;.
7ba0: 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 }.}..static
7bb0: 76 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 65 void.ParseCompre
7bc0: 73 73 65 64 57 6b 62 4c 69 6e 65 5a 4d 20 28 67 ssedWkbLineZM (g
7bd0: 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 aiaGeomCollPtr g
7be0: 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 65 73 eo).{./* decodes
7bf0: 20 61 20 43 4f 4d 50 52 45 53 53 45 44 20 4c 49 a COMPRESSED LI
7c00: 4e 45 53 54 52 49 4e 47 5a 4d 20 66 72 6f 6d 20 NESTRINGZM from
7c10: 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 WKB */. int p
7c20: 6f 69 6e 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 oints;. int i
7c30: 76 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b v;. double x;
7c40: 0a 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 . double y;.
7c50: 20 20 20 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 double z;.
7c60: 20 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 20 64 double m;. d
7c70: 6f 75 62 6c 65 20 6c 61 73 74 5f 78 20 3d 20 30 ouble last_x = 0
7c80: 2e 30 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 6c .0;. double l
7c90: 61 73 74 5f 79 20 3d 20 30 2e 30 3b 0a 20 20 20 ast_y = 0.0;.
7ca0: 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 7a 20 3d double last_z =
7cb0: 20 30 2e 30 3b 0a 20 20 20 20 66 6c 6f 61 74 20 0.0;. float
7cc0: 66 78 3b 0a 20 20 20 20 66 6c 6f 61 74 20 66 79 fx;. float fy
7cd0: 3b 0a 20 20 20 20 66 6c 6f 61 74 20 66 7a 3b 0a ;. float fz;.
7ce0: 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 69 gaiaLinestri
7cf0: 6e 67 50 74 72 20 6c 69 6e 65 3b 0a 20 20 20 20 ngPtr line;.
7d00: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
7d10: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 geo->offset + 4)
7d20: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 70 6f ..return;. po
7d30: 69 6e 74 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f ints =..gaiaImpo
7d40: 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt32 (geo->blob
7d50: 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 + geo->offset, g
7d60: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d eo->endian, geo-
7d70: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 >endian_arch);.
7d80: 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b geo->offset +
7d90: 3d 20 34 3b 0a 20 20 20 20 69 66 20 28 67 65 6f = 4;. if (geo
7da0: 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 ->size < geo->of
7db0: 66 73 65 74 20 2b 20 28 32 30 20 2a 20 70 6f 69 fset + (20 * poi
7dc0: 6e 74 73 29 20 2b 20 32 34 29 0a 09 72 65 74 75 nts) + 24)..retu
7dd0: 72 6e 3b 0a 20 20 20 20 6c 69 6e 65 20 3d 20 67 rn;. line = g
7de0: 61 69 61 41 64 64 4c 69 6e 65 73 74 72 69 6e 67 aiaAddLinestring
7df0: 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 2c ToGeomColl (geo,
7e00: 20 70 6f 69 6e 74 73 29 3b 0a 20 20 20 20 66 6f points);. fo
7e10: 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 r (iv = 0; iv <
7e20: 70 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 20 20 points; iv++).
7e30: 20 20 20 20 7b 0a 09 20 20 69 66 20 28 69 76 20 {.. if (iv
7e40: 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d 20 28 70 == 0 || iv == (p
7e50: 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 20 20 20 oints - 1))..
7e60: 20 7b 0a 09 09 2f 2a 20 66 69 72 73 74 20 61 6e {.../* first an
7e70: 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 d last vertices
7e80: 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 are uncompressed
7e90: 20 2a 2f 0a 09 09 78 20 3d 20 67 61 69 61 49 6d */...x = gaiaIm
7ea0: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
7eb0: 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c b + geo->offset,
7ec0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 geo->endian,...
7ed0: 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f .. geo->endian_
7ee0: 61 72 63 68 29 3b 0a 09 09 79 20 3d 20 67 61 69 arch);...y = gai
7ef0: 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e aImport64 (geo->
7f00: 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 blob + (geo->off
7f10: 73 65 74 20 2b 20 38 29 2c 20 67 65 6f 2d 3e 65 set + 8), geo->e
7f20: 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f ndian,..... geo
7f30: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
7f40: 09 09 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 ..z = gaiaImport
7f50: 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 64 (geo->blob +
7f60: 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 31 (geo->offset + 1
7f70: 36 29 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 6), geo->endian,
7f80: 0a 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 ..... geo->endi
7f90: 61 6e 5f 61 72 63 68 29 3b 0a 09 09 6d 20 3d 20 an_arch);...m =
7fa0: 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 gaiaImport64 (ge
7fb0: 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e o->blob + (geo->
7fc0: 6f 66 66 73 65 74 20 2b 20 32 34 29 2c 20 67 65 offset + 24), ge
7fd0: 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 o->endian,.....
7fe0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
7ff0: 68 29 3b 0a 09 09 67 65 6f 2d 3e 6f 66 66 73 65 h);...geo->offse
8000: 74 20 2b 3d 20 33 32 3b 0a 09 20 20 20 20 7d 0a t += 32;.. }.
8010: 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 . else.. {..
8020: 09 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e ./* any other in
8030: 74 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 termediate verte
8040: 78 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 x is compressed
8050: 2a 2f 0a 09 09 66 78 20 3d 20 67 61 69 61 49 6d */...fx = gaiaIm
8060: 70 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 6c portF32 (geo->bl
8070: 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ob + geo->offset
8080: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
8090: 09 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 ... geo->endi
80a0: 61 6e 5f 61 72 63 68 29 3b 0a 09 09 66 79 20 3d an_arch);...fy =
80b0: 20 67 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 gaiaImportF32 (
80c0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f geo->blob + (geo
80d0: 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 2c 20 67 ->offset + 4), g
80e0: 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 eo->endian,.....
80f0: 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f geo->endian_
8100: 61 72 63 68 29 3b 0a 09 09 66 7a 20 3d 20 67 61 arch);...fz = ga
8110: 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 6f iaImportF32 (geo
8120: 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f ->blob + (geo->o
8130: 66 66 73 65 74 20 2b 20 38 29 2c 20 67 65 6f 2d ffset + 8), geo-
8140: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 20 >endian,.....
8150: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
8160: 68 29 3b 0a 09 09 6d 20 3d 20 67 61 69 61 49 6d h);...m = gaiaIm
8170: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
8180: 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 b + (geo->offset
8190: 20 2b 20 31 32 29 2c 20 67 65 6f 2d 3e 65 6e 64 + 12), geo->end
81a0: 69 61 6e 2c 0a 09 09 09 09 20 20 67 65 6f 2d 3e ian,..... geo->
81b0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
81c0: 78 20 3d 20 6c 61 73 74 5f 78 20 2b 20 66 78 3b x = last_x + fx;
81d0: 0a 09 09 79 20 3d 20 6c 61 73 74 5f 79 20 2b 20 ...y = last_y +
81e0: 66 79 3b 0a 09 09 7a 20 3d 20 6c 61 73 74 5f 7a fy;...z = last_z
81f0: 20 2b 20 66 7a 3b 0a 09 09 67 65 6f 2d 3e 6f 66 + fz;...geo->of
8200: 66 73 65 74 20 2b 3d 20 32 30 3b 0a 09 20 20 20 fset += 20;..
8210: 20 7d 0a 09 20 20 67 61 69 61 53 65 74 50 6f 69 }.. gaiaSetPoi
8220: 6e 74 58 59 5a 4d 20 28 6c 69 6e 65 2d 3e 43 6f ntXYZM (line->Co
8230: 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 ords, iv, x, y,
8240: 7a 2c 20 6d 29 3b 0a 09 20 20 6c 61 73 74 5f 78 z, m);.. last_x
8250: 20 3d 20 78 3b 0a 09 20 20 6c 61 73 74 5f 79 20 = x;.. last_y
8260: 3d 20 79 3b 0a 09 20 20 6c 61 73 74 5f 7a 20 3d = y;.. last_z =
8270: 20 7a 3b 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 z;. }.}..s
8280: 74 61 74 69 63 20 76 6f 69 64 0a 50 61 72 73 65 tatic void.Parse
8290: 43 6f 6d 70 72 65 73 73 65 64 57 6b 62 50 6f 6c CompressedWkbPol
82a0: 79 67 6f 6e 20 28 67 61 69 61 47 65 6f 6d 43 6f ygon (gaiaGeomCo
82b0: 6c 6c 50 74 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 llPtr geo).{./*
82c0: 64 65 63 6f 64 65 73 20 61 20 43 4f 4d 50 52 45 decodes a COMPRE
82d0: 53 53 45 44 20 50 4f 4c 59 47 4f 4e 20 66 72 6f SSED POLYGON fro
82e0: 6d 20 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 m WKB */. int
82f0: 20 72 69 6e 67 73 3b 0a 20 20 20 20 69 6e 74 20 rings;. int
8300: 6e 76 65 72 74 73 3b 0a 20 20 20 20 69 6e 74 20 nverts;. int
8310: 69 76 3b 0a 20 20 20 20 69 6e 74 20 69 62 3b 0a iv;. int ib;.
8320: 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
8330: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
8340: 64 6f 75 62 6c 65 20 6c 61 73 74 5f 78 20 3d 20 double last_x =
8350: 30 2e 30 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 0.0;. double
8360: 6c 61 73 74 5f 79 20 3d 20 30 2e 30 3b 0a 20 20 last_y = 0.0;.
8370: 20 20 66 6c 6f 61 74 20 66 78 3b 0a 20 20 20 20 float fx;.
8380: 66 6c 6f 61 74 20 66 79 3b 0a 20 20 20 20 67 61 float fy;. ga
8390: 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f 6c iaPolygonPtr pol
83a0: 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 yg = NULL;. g
83b0: 61 69 61 52 69 6e 67 50 74 72 20 72 69 6e 67 3b aiaRingPtr ring;
83c0: 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 . if (geo->si
83d0: 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ze < geo->offset
83e0: 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a 20 + 4)..return;.
83f0: 20 20 20 72 69 6e 67 73 20 3d 0a 09 67 61 69 61 rings =..gaia
8400: 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 Import32 (geo->b
8410: 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 lob + geo->offse
8420: 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 t, geo->endian,
8430: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
8440: 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 );. geo->offs
8450: 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 6f 72 et += 4;. for
8460: 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 72 (ib = 0; ib < r
8470: 69 6e 67 73 3b 20 69 62 2b 2b 29 0a 20 20 20 20 ings; ib++).
8480: 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 2d 3e {.. if (geo->
8490: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
84a0: 65 74 20 2b 20 34 29 0a 09 20 20 20 20 20 20 72 et + 4).. r
84b0: 65 74 75 72 6e 3b 0a 09 20 20 6e 76 65 72 74 73 eturn;.. nverts
84c0: 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 49 6d =.. gaiaIm
84d0: 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f port32 (geo->blo
84e0: 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c b + geo->offset,
84f0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 09 geo->endian,...
8500: 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e . geo->endian
8510: 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 6f 2d 3e _arch);.. geo->
8520: 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 09 20 20 offset += 4;..
8530: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
8540: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 38 geo->offset + (8
8550: 20 2a 20 6e 76 65 72 74 73 29 20 2b 20 31 36 29 * nverts) + 16)
8560: 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0a .. return;.
8570: 09 20 20 69 66 20 28 69 62 20 3d 3d 20 30 29 0a . if (ib == 0).
8580: 09 20 20 20 20 7b 0a 09 09 70 6f 6c 79 67 20 3d . {...polyg =
8590: 20 67 61 69 61 41 64 64 50 6f 6c 79 67 6f 6e 54 gaiaAddPolygonT
85a0: 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 2c 20 oGeomColl (geo,
85b0: 6e 76 65 72 74 73 2c 20 72 69 6e 67 73 20 2d 20 nverts, rings -
85c0: 31 29 3b 0a 09 09 72 69 6e 67 20 3d 20 70 6f 6c 1);...ring = pol
85d0: 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 yg->Exterior;..
85e0: 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 }.. else..
85f0: 20 20 20 20 72 69 6e 67 20 3d 20 67 61 69 61 41 ring = gaiaA
8600: 64 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 20 28 ddInteriorRing (
8610: 70 6f 6c 79 67 2c 20 69 62 20 2d 20 31 2c 20 6e polyg, ib - 1, n
8620: 76 65 72 74 73 29 3b 0a 09 20 20 66 6f 72 20 28 verts);.. for (
8630: 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6e 76 65 iv = 0; iv < nve
8640: 72 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 rts; iv++)..
8650: 7b 0a 09 09 69 66 20 28 69 76 20 3d 3d 20 30 20 {...if (iv == 0
8660: 7c 7c 20 69 76 20 3d 3d 20 28 6e 76 65 72 74 73 || iv == (nverts
8670: 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 09 20 - 1))... {...
8680: 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 61 6e /* first an
8690: 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 d last vertices
86a0: 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 are uncompressed
86b0: 20 2a 2f 0a 09 09 20 20 20 20 20 20 78 20 3d 20 */... x =
86c0: 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 gaiaImport64 (ge
86d0: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
86e0: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
86f0: 61 6e 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 65 6e an,......geo->en
8700: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
8710: 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d 70 6f y = gaiaImpo
8720: 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt64 (geo->blob
8730: 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b + (geo->offset +
8740: 20 38 29 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 65 8),......geo->e
8750: 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 ndian, geo->endi
8760: 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
8770: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
8780: 20 31 36 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 16;... }...els
8790: 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 e... {...
87a0: 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 /* any other int
87b0: 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 ermediate vertex
87c0: 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 2a is compressed *
87d0: 2f 0a 09 09 20 20 20 20 20 20 66 78 20 3d 20 67 /... fx = g
87e0: 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 aiaImportF32 (ge
87f0: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
8800: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
8810: 61 6e 2c 0a 09 09 09 09 09 20 20 67 65 6f 2d 3e an,...... geo->
8820: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
8830: 20 20 20 20 20 20 66 79 20 3d 20 67 61 69 61 49 fy = gaiaI
8840: 6d 70 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 mportF32 (geo->b
8850: 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 lob + (geo->offs
8860: 65 74 20 2b 20 34 29 2c 0a 09 09 09 09 09 20 20 et + 4),......
8870: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
8880: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
8890: 09 09 20 20 20 20 20 20 78 20 3d 20 6c 61 73 74 .. x = last
88a0: 5f 78 20 2b 20 66 78 3b 0a 09 09 20 20 20 20 20 _x + fx;...
88b0: 20 79 20 3d 20 6c 61 73 74 5f 79 20 2b 20 66 79 y = last_y + fy
88c0: 3b 0a 09 09 20 20 20 20 20 20 67 65 6f 2d 3e 6f ;... geo->o
88d0: 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 09 20 20 ffset += 8;...
88e0: 7d 0a 09 09 67 61 69 61 53 65 74 50 6f 69 6e 74 }...gaiaSetPoint
88f0: 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 (ring->Coords,
8900: 69 76 2c 20 78 2c 20 79 29 3b 0a 09 09 6c 61 73 iv, x, y);...las
8910: 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 73 74 5f t_x = x;...last_
8920: 79 20 3d 20 79 3b 0a 09 20 20 20 20 7d 0a 20 20 y = y;.. }.
8930: 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 }.}..static
8940: 76 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 65 void.ParseCompre
8950: 73 73 65 64 57 6b 62 50 6f 6c 79 67 6f 6e 5a 20 ssedWkbPolygonZ
8960: 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
8970: 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 geo).{./* decod
8980: 65 73 20 61 20 43 4f 4d 50 52 45 53 53 45 44 20 es a COMPRESSED
8990: 50 4f 4c 59 47 4f 4e 5a 20 66 72 6f 6d 20 57 4b POLYGONZ from WK
89a0: 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 6e B */. int rin
89b0: 67 73 3b 0a 20 20 20 20 69 6e 74 20 6e 76 65 72 gs;. int nver
89c0: 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a ts;. int iv;.
89d0: 20 20 20 20 69 6e 74 20 69 62 3b 0a 20 20 20 20 int ib;.
89e0: 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f double x;. do
89f0: 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 uble y;. doub
8a00: 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le z;. double
8a10: 20 6c 61 73 74 5f 78 20 3d 20 30 2e 30 3b 0a 20 last_x = 0.0;.
8a20: 20 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 79 double last_y
8a30: 20 3d 20 30 2e 30 3b 0a 20 20 20 20 64 6f 75 62 = 0.0;. doub
8a40: 6c 65 20 6c 61 73 74 5f 7a 20 3d 20 30 2e 30 3b le last_z = 0.0;
8a50: 0a 20 20 20 20 66 6c 6f 61 74 20 66 78 3b 0a 20 . float fx;.
8a60: 20 20 20 66 6c 6f 61 74 20 66 79 3b 0a 20 20 20 float fy;.
8a70: 20 66 6c 6f 61 74 20 66 7a 3b 0a 20 20 20 20 67 float fz;. g
8a80: 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f aiaPolygonPtr po
8a90: 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 lyg = NULL;.
8aa0: 67 61 69 61 52 69 6e 67 50 74 72 20 72 69 6e 67 gaiaRingPtr ring
8ab0: 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 ;. if (geo->s
8ac0: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
8ad0: 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a t + 4)..return;.
8ae0: 20 20 20 20 72 69 6e 67 73 20 3d 0a 09 67 61 69 rings =..gai
8af0: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
8b00: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
8b10: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
8b20: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
8b30: 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 h);. geo->off
8b40: 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 6f set += 4;. fo
8b50: 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 r (ib = 0; ib <
8b60: 72 69 6e 67 73 3b 20 69 62 2b 2b 29 0a 20 20 20 rings; ib++).
8b70: 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 2d {.. if (geo-
8b80: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
8b90: 73 65 74 20 2b 20 34 29 0a 09 20 20 20 20 20 20 set + 4)..
8ba0: 72 65 74 75 72 6e 3b 0a 09 20 20 6e 76 65 72 74 return;.. nvert
8bb0: 73 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 49 s =.. gaiaI
8bc0: 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c mport32 (geo->bl
8bd0: 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ob + geo->offset
8be0: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
8bf0: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
8c00: 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 6f 2d n_arch);.. geo-
8c10: 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 09 20 >offset += 4;..
8c20: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
8c30: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 geo->offset + (
8c40: 31 32 20 2a 20 6e 76 65 72 74 73 29 20 2b 20 32 12 * nverts) + 2
8c50: 34 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 4).. return
8c60: 3b 0a 09 20 20 69 66 20 28 69 62 20 3d 3d 20 30 ;.. if (ib == 0
8c70: 29 0a 09 20 20 20 20 7b 0a 09 09 70 6f 6c 79 67 ).. {...polyg
8c80: 20 3d 20 67 61 69 61 41 64 64 50 6f 6c 79 67 6f = gaiaAddPolygo
8c90: 6e 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f nToGeomColl (geo
8ca0: 2c 20 6e 76 65 72 74 73 2c 20 72 69 6e 67 73 20 , nverts, rings
8cb0: 2d 20 31 29 3b 0a 09 09 72 69 6e 67 20 3d 20 70 - 1);...ring = p
8cc0: 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a olyg->Exterior;.
8cd0: 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
8ce0: 20 20 20 20 20 20 72 69 6e 67 20 3d 20 67 61 69 ring = gai
8cf0: 61 41 64 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 aAddInteriorRing
8d00: 20 28 70 6f 6c 79 67 2c 20 69 62 20 2d 20 31 2c (polyg, ib - 1,
8d10: 20 6e 76 65 72 74 73 29 3b 0a 09 20 20 66 6f 72 nverts);.. for
8d20: 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6e (iv = 0; iv < n
8d30: 76 65 72 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 verts; iv++)..
8d40: 20 20 7b 0a 09 09 69 66 20 28 69 76 20 3d 3d 20 {...if (iv ==
8d50: 30 20 7c 7c 20 69 76 20 3d 3d 20 28 6e 76 65 72 0 || iv == (nver
8d60: 74 73 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 ts - 1))... {..
8d70: 09 20 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 . /* first
8d80: 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 and last vertice
8d90: 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 s are uncompress
8da0: 65 64 20 2a 2f 0a 09 09 20 20 20 20 20 20 78 20 ed */... x
8db0: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
8dc0: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
8dd0: 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e >offset, geo->en
8de0: 64 69 61 6e 2c 0a 09 09 09 09 09 67 65 6f 2d 3e dian,......geo->
8df0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
8e00: 20 20 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d y = gaiaIm
8e10: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
8e20: 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 b + (geo->offset
8e30: 20 2b 20 38 29 2c 0a 09 09 09 09 09 67 65 6f 2d + 8),......geo-
8e40: 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e >endian, geo->en
8e50: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
8e60: 20 20 20 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f z = gaiaImpo
8e70: 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt64 (geo->blob
8e80: 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b + (geo->offset +
8e90: 20 31 36 29 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 16),......geo->
8ea0: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
8eb0: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
8ec0: 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b geo->offset +
8ed0: 3d 20 32 34 3b 0a 09 09 20 20 7d 0a 09 09 65 6c = 24;... }...el
8ee0: 73 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 se... {...
8ef0: 20 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e /* any other in
8f00: 74 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 termediate verte
8f10: 78 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 x is compressed
8f20: 2a 2f 0a 09 09 20 20 20 20 20 20 66 78 20 3d 20 */... fx =
8f30: 67 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 gaiaImportF32 (g
8f40: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
8f50: 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 offset, geo->end
8f60: 69 61 6e 2c 0a 09 09 09 09 09 20 20 67 65 6f 2d ian,...... geo-
8f70: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
8f80: 09 20 20 20 20 20 20 66 79 20 3d 20 67 61 69 61 . fy = gaia
8f90: 49 6d 70 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e ImportF32 (geo->
8fa0: 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 blob + (geo->off
8fb0: 73 65 74 20 2b 20 34 29 2c 0a 09 09 09 09 09 20 set + 4),......
8fc0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 geo->endian, ge
8fd0: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
8fe0: 0a 09 09 20 20 20 20 20 20 66 7a 20 3d 20 67 61 ... fz = ga
8ff0: 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 6f iaImportF32 (geo
9000: 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f ->blob + (geo->o
9010: 66 66 73 65 74 20 2b 20 38 29 2c 0a 09 09 09 09 ffset + 8),.....
9020: 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 . geo->endian,
9030: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
9040: 29 3b 0a 09 09 20 20 20 20 20 20 78 20 3d 20 6c );... x = l
9050: 61 73 74 5f 78 20 2b 20 66 78 3b 0a 09 09 20 20 ast_x + fx;...
9060: 20 20 20 20 79 20 3d 20 6c 61 73 74 5f 79 20 2b y = last_y +
9070: 20 66 79 3b 0a 09 09 20 20 20 20 20 20 7a 20 3d fy;... z =
9080: 20 6c 61 73 74 5f 7a 20 2b 20 66 7a 3b 0a 09 09 last_z + fz;...
9090: 20 20 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 geo->offse
90a0: 74 20 2b 3d 20 31 32 3b 0a 09 09 20 20 7d 0a 09 t += 12;... }..
90b0: 09 67 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a .gaiaSetPointXYZ
90c0: 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 (ring->Coords,
90d0: 69 76 2c 20 78 2c 20 79 2c 20 7a 29 3b 0a 09 09 iv, x, y, z);...
90e0: 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 last_x = x;...la
90f0: 73 74 5f 79 20 3d 20 79 3b 0a 09 09 6c 61 73 74 st_y = y;...last
9100: 5f 7a 20 3d 20 7a 3b 0a 09 20 20 20 20 7d 0a 20 _z = z;.. }.
9110: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
9120: 20 76 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 void.ParseCompr
9130: 65 73 73 65 64 57 6b 62 50 6f 6c 79 67 6f 6e 4d essedWkbPolygonM
9140: 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
9150: 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f r geo).{./* deco
9160: 64 65 73 20 61 20 43 4f 4d 50 52 45 53 53 45 44 des a COMPRESSED
9170: 20 50 4f 4c 59 47 4f 4e 4d 20 66 72 6f 6d 20 57 POLYGONM from W
9180: 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 69 KB */. int ri
9190: 6e 67 73 3b 0a 20 20 20 20 69 6e 74 20 6e 76 65 ngs;. int nve
91a0: 72 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b rts;. int iv;
91b0: 0a 20 20 20 20 69 6e 74 20 69 62 3b 0a 20 20 20 . int ib;.
91c0: 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 double x;. d
91d0: 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 ouble y;. dou
91e0: 62 6c 65 20 6d 3b 0a 20 20 20 20 64 6f 75 62 6c ble m;. doubl
91f0: 65 20 6c 61 73 74 5f 78 20 3d 20 30 2e 30 3b 0a e last_x = 0.0;.
9200: 20 20 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f double last_
9210: 79 20 3d 20 30 2e 30 3b 0a 20 20 20 20 66 6c 6f y = 0.0;. flo
9220: 61 74 20 66 78 3b 0a 20 20 20 20 66 6c 6f 61 74 at fx;. float
9230: 20 66 79 3b 0a 20 20 20 20 67 61 69 61 50 6f 6c fy;. gaiaPol
9240: 79 67 6f 6e 50 74 72 20 70 6f 6c 79 67 20 3d 20 ygonPtr polyg =
9250: 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 52 69 NULL;. gaiaRi
9260: 6e 67 50 74 72 20 72 69 6e 67 3b 0a 20 20 20 20 ngPtr ring;.
9270: 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 if (geo->size <
9280: 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 geo->offset + 4)
9290: 0a 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 72 69 ..return;. ri
92a0: 6e 67 73 20 3d 0a 09 67 61 69 61 49 6d 70 6f 72 ngs =..gaiaImpor
92b0: 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t32 (geo->blob +
92c0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 geo->offset, ge
92d0: 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e o->endian, geo->
92e0: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 endian_arch);.
92f0: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
9300: 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 62 20 4;. for (ib
9310: 3d 20 30 3b 20 69 62 20 3c 20 72 69 6e 67 73 3b = 0; ib < rings;
9320: 20 69 62 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 ib++). {..
9330: 20 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 if (geo->size
9340: 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 < geo->offset +
9350: 34 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 4).. return
9360: 3b 0a 09 20 20 6e 76 65 72 74 73 20 3d 0a 09 20 ;.. nverts =..
9370: 20 20 20 20 20 67 61 69 61 49 6d 70 6f 72 74 33 gaiaImport3
9380: 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 2 (geo->blob + g
9390: 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d eo->offset, geo-
93a0: 3e 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 20 >endian,....
93b0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
93c0: 29 3b 0a 09 20 20 67 65 6f 2d 3e 6f 66 66 73 65 );.. geo->offse
93d0: 74 20 2b 3d 20 34 3b 0a 09 20 20 69 66 20 28 67 t += 4;.. if (g
93e0: 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e eo->size < geo->
93f0: 6f 66 66 73 65 74 20 2b 20 28 31 36 20 2a 20 6e offset + (16 * n
9400: 76 65 72 74 73 29 20 2b 20 31 36 29 0a 09 20 20 verts) + 16)..
9410: 20 20 20 20 72 65 74 75 72 6e 3b 0a 09 20 20 69 return;.. i
9420: 66 20 28 69 62 20 3d 3d 20 30 29 0a 09 20 20 20 f (ib == 0)..
9430: 20 7b 0a 09 09 70 6f 6c 79 67 20 3d 20 67 61 69 {...polyg = gai
9440: 61 41 64 64 50 6f 6c 79 67 6f 6e 54 6f 47 65 6f aAddPolygonToGeo
9450: 6d 43 6f 6c 6c 20 28 67 65 6f 2c 20 6e 76 65 72 mColl (geo, nver
9460: 74 73 2c 20 72 69 6e 67 73 20 2d 20 31 29 3b 0a ts, rings - 1);.
9470: 09 09 72 69 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e ..ring = polyg->
9480: 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 20 20 7d Exterior;.. }
9490: 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 .. else..
94a0: 72 69 6e 67 20 3d 20 67 61 69 61 41 64 64 49 6e ring = gaiaAddIn
94b0: 74 65 72 69 6f 72 52 69 6e 67 20 28 70 6f 6c 79 teriorRing (poly
94c0: 67 2c 20 69 62 20 2d 20 31 2c 20 6e 76 65 72 74 g, ib - 1, nvert
94d0: 73 29 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d s);.. for (iv =
94e0: 20 30 3b 20 69 76 20 3c 20 6e 76 65 72 74 73 3b 0; iv < nverts;
94f0: 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 iv++).. {...
9500: 69 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 if (iv == 0 || i
9510: 76 20 3d 3d 20 28 6e 76 65 72 74 73 20 2d 20 31 v == (nverts - 1
9520: 29 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 ))... {...
9530: 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 20 6c 61 /* first and la
9540: 73 74 20 76 65 72 74 69 63 65 73 20 61 72 65 20 st vertices are
9550: 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 2a 2f 0a uncompressed */.
9560: 09 09 20 20 20 20 20 20 78 20 3d 20 67 61 69 61 .. x = gaia
9570: 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 Import64 (geo->b
9580: 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 lob + geo->offse
9590: 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a t, geo->endian,.
95a0: 09 09 09 09 09 67 65 6f 2d 3e 65 6e 64 69 61 6e .....geo->endian
95b0: 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
95c0: 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 y = gaiaImport64
95d0: 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 (geo->blob + (g
95e0: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 38 29 2c eo->offset + 8),
95f0: 0a 09 09 09 09 09 67 65 6f 2d 3e 65 6e 64 69 61 ......geo->endia
9600: 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 n, geo->endian_a
9610: 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 6d 20 rch);... m
9620: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
9630: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 28 67 65 6f geo->blob + (geo
9640: 2d 3e 6f 66 66 73 65 74 20 2b 20 31 36 29 2c 0a ->offset + 16),.
9650: 09 09 09 09 09 67 65 6f 2d 3e 65 6e 64 69 61 6e .....geo->endian
9660: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 , geo->endian_ar
9670: 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 65 6f ch);... geo
9680: 2d 3e 6f 66 66 73 65 74 20 2b 3d 20 32 34 3b 0a ->offset += 24;.
9690: 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 .. }...else...
96a0: 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 61 6e {... /* an
96b0: 79 20 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 64 y other intermed
96c0: 69 61 74 65 20 76 65 72 74 65 78 20 69 73 20 63 iate vertex is c
96d0: 6f 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 20 ompressed */...
96e0: 20 20 20 20 20 66 78 20 3d 20 67 61 69 61 49 6d fx = gaiaIm
96f0: 70 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 6c portF32 (geo->bl
9700: 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ob + geo->offset
9710: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
9720: 09 09 09 09 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .... geo->endia
9730: 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
9740: 20 66 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 fy = gaiaImport
9750: 46 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b F32 (geo->blob +
9760: 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 (geo->offset +
9770: 34 29 2c 0a 09 09 09 09 09 20 20 67 65 6f 2d 3e 4),...... geo->
9780: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
9790: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
97a0: 20 20 20 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 m = gaiaImpor
97b0: 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t64 (geo->blob +
97c0: 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 (geo->offset +
97d0: 38 29 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 65 6e 8),......geo->en
97e0: 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 dian, geo->endia
97f0: 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
9800: 20 78 20 3d 20 6c 61 73 74 5f 78 20 2b 20 66 78 x = last_x + fx
9810: 3b 0a 09 09 20 20 20 20 20 20 79 20 3d 20 6c 61 ;... y = la
9820: 73 74 5f 79 20 2b 20 66 79 3b 0a 09 09 20 20 20 st_y + fy;...
9830: 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b geo->offset +
9840: 3d 20 31 36 3b 0a 09 09 20 20 7d 0a 09 09 67 61 = 16;... }...ga
9850: 69 61 53 65 74 50 6f 69 6e 74 58 59 4d 20 28 72 iaSetPointXYM (r
9860: 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c ing->Coords, iv,
9870: 20 78 2c 20 79 2c 20 6d 29 3b 0a 09 09 6c 61 73 x, y, m);...las
9880: 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 73 74 5f t_x = x;...last_
9890: 79 20 3d 20 79 3b 0a 09 20 20 20 20 7d 0a 20 20 y = y;.. }.
98a0: 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 20 }.}..static
98b0: 76 6f 69 64 0a 50 61 72 73 65 43 6f 6d 70 72 65 void.ParseCompre
98c0: 73 73 65 64 57 6b 62 50 6f 6c 79 67 6f 6e 5a 4d ssedWkbPolygonZM
98d0: 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
98e0: 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 64 65 63 6f r geo).{./* deco
98f0: 64 65 73 20 61 20 43 4f 4d 50 52 45 53 53 45 44 des a COMPRESSED
9900: 20 50 4f 4c 59 47 4f 4e 5a 4d 20 66 72 6f 6d 20 POLYGONZM from
9910: 57 4b 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 WKB */. int r
9920: 69 6e 67 73 3b 0a 20 20 20 20 69 6e 74 20 6e 76 ings;. int nv
9930: 65 72 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 erts;. int iv
9940: 3b 0a 20 20 20 20 69 6e 74 20 69 62 3b 0a 20 20 ;. int ib;.
9950: 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 double x;.
9960: 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f double y;. do
9970: 75 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 uble z;. doub
9980: 6c 65 20 6d 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le m;. double
9990: 20 6c 61 73 74 5f 78 20 3d 20 30 2e 30 3b 0a 20 last_x = 0.0;.
99a0: 20 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 79 double last_y
99b0: 20 3d 20 30 2e 30 3b 0a 20 20 20 20 64 6f 75 62 = 0.0;. doub
99c0: 6c 65 20 6c 61 73 74 5f 7a 20 3d 20 30 2e 30 3b le last_z = 0.0;
99d0: 0a 20 20 20 20 66 6c 6f 61 74 20 66 78 3b 0a 20 . float fx;.
99e0: 20 20 20 66 6c 6f 61 74 20 66 79 3b 0a 20 20 20 float fy;.
99f0: 20 66 6c 6f 61 74 20 66 7a 3b 0a 20 20 20 20 67 float fz;. g
9a00: 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f aiaPolygonPtr po
9a10: 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 lyg = NULL;.
9a20: 67 61 69 61 52 69 6e 67 50 74 72 20 72 69 6e 67 gaiaRingPtr ring
9a30: 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 2d 3e 73 ;. if (geo->s
9a40: 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 65 ize < geo->offse
9a50: 74 20 2b 20 34 29 0a 09 72 65 74 75 72 6e 3b 0a t + 4)..return;.
9a60: 20 20 20 20 72 69 6e 67 73 20 3d 0a 09 67 61 69 rings =..gai
9a70: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
9a80: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
9a90: 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c et, geo->endian,
9aa0: 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 geo->endian_arc
9ab0: 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 66 h);. geo->off
9ac0: 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 20 66 6f set += 4;. fo
9ad0: 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 r (ib = 0; ib <
9ae0: 72 69 6e 67 73 3b 20 69 62 2b 2b 29 0a 20 20 20 rings; ib++).
9af0: 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 2d {.. if (geo-
9b00: 3e 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 >size < geo->off
9b10: 73 65 74 20 2b 20 34 29 0a 09 20 20 20 20 20 20 set + 4)..
9b20: 72 65 74 75 72 6e 3b 0a 09 20 20 6e 76 65 72 74 return;.. nvert
9b30: 73 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 49 s =.. gaiaI
9b40: 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c mport32 (geo->bl
9b50: 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 ob + geo->offset
9b60: 2c 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 0a 09 , geo->endian,..
9b70: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
9b80: 6e 5f 61 72 63 68 29 3b 0a 09 20 20 67 65 6f 2d n_arch);.. geo-
9b90: 3e 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 09 20 >offset += 4;..
9ba0: 20 69 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c if (geo->size <
9bb0: 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 28 geo->offset + (
9bc0: 32 30 20 2a 20 6e 76 65 72 74 73 29 20 2b 20 32 20 * nverts) + 2
9bd0: 34 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 4).. return
9be0: 3b 0a 09 20 20 69 66 20 28 69 62 20 3d 3d 20 30 ;.. if (ib == 0
9bf0: 29 0a 09 20 20 20 20 7b 0a 09 09 70 6f 6c 79 67 ).. {...polyg
9c00: 20 3d 20 67 61 69 61 41 64 64 50 6f 6c 79 67 6f = gaiaAddPolygo
9c10: 6e 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f nToGeomColl (geo
9c20: 2c 20 6e 76 65 72 74 73 2c 20 72 69 6e 67 73 20 , nverts, rings
9c30: 2d 20 31 29 3b 0a 09 09 72 69 6e 67 20 3d 20 70 - 1);...ring = p
9c40: 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a olyg->Exterior;.
9c50: 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
9c60: 20 20 20 20 20 20 72 69 6e 67 20 3d 20 67 61 69 ring = gai
9c70: 61 41 64 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 aAddInteriorRing
9c80: 20 28 70 6f 6c 79 67 2c 20 69 62 20 2d 20 31 2c (polyg, ib - 1,
9c90: 20 6e 76 65 72 74 73 29 3b 0a 09 20 20 66 6f 72 nverts);.. for
9ca0: 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6e (iv = 0; iv < n
9cb0: 76 65 72 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 verts; iv++)..
9cc0: 20 20 7b 0a 09 09 69 66 20 28 69 76 20 3d 3d 20 {...if (iv ==
9cd0: 30 20 7c 7c 20 69 76 20 3d 3d 20 28 6e 76 65 72 0 || iv == (nver
9ce0: 74 73 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 ts - 1))... {..
9cf0: 09 20 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 . /* first
9d00: 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 and last vertice
9d10: 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 s are uncompress
9d20: 65 64 20 2a 2f 0a 09 09 20 20 20 20 20 20 78 20 ed */... x
9d30: 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
9d40: 67 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d geo->blob + geo-
9d50: 3e 6f 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e >offset, geo->en
9d60: 64 69 61 6e 2c 0a 09 09 09 09 09 67 65 6f 2d 3e dian,......geo->
9d70: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
9d80: 20 20 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d y = gaiaIm
9d90: 70 6f 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f port64 (geo->blo
9da0: 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 b + (geo->offset
9db0: 20 2b 20 38 29 2c 0a 09 09 09 09 09 67 65 6f 2d + 8),......geo-
9dc0: 3e 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e >endian, geo->en
9dd0: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
9de0: 20 20 20 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f z = gaiaImpo
9df0: 72 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 rt64 (geo->blob
9e00: 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b + (geo->offset +
9e10: 20 31 36 29 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 16),......geo->
9e20: 65 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 endian, geo->end
9e30: 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
9e40: 20 20 20 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 m = gaiaImpor
9e50: 74 36 34 20 28 67 65 6f 2d 3e 62 6c 6f 62 20 2b t64 (geo->blob +
9e60: 20 28 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 (geo->offset +
9e70: 32 34 29 2c 0a 09 09 09 09 09 67 65 6f 2d 3e 65 24),......geo->e
9e80: 6e 64 69 61 6e 2c 20 67 65 6f 2d 3e 65 6e 64 69 ndian, geo->endi
9e90: 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
9ea0: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
9eb0: 20 33 32 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 32;... }...els
9ec0: 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 e... {...
9ed0: 2f 2a 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 /* any other int
9ee0: 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 ermediate vertex
9ef0: 20 69 73 20 63 6f 6d 70 72 65 73 73 65 64 20 2a is compressed *
9f00: 2f 0a 09 09 20 20 20 20 20 20 66 78 20 3d 20 67 /... fx = g
9f10: 61 69 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 aiaImportF32 (ge
9f20: 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f o->blob + geo->o
9f30: 66 66 73 65 74 2c 20 67 65 6f 2d 3e 65 6e 64 69 ffset, geo->endi
9f40: 61 6e 2c 0a 09 09 09 09 09 20 20 67 65 6f 2d 3e an,...... geo->
9f50: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
9f60: 20 20 20 20 20 20 66 79 20 3d 20 67 61 69 61 49 fy = gaiaI
9f70: 6d 70 6f 72 74 46 33 32 20 28 67 65 6f 2d 3e 62 mportF32 (geo->b
9f80: 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 66 73 lob + (geo->offs
9f90: 65 74 20 2b 20 34 29 2c 0a 09 09 09 09 09 20 20 et + 4),......
9fa0: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
9fb0: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
9fc0: 09 09 20 20 20 20 20 20 66 7a 20 3d 20 67 61 69 .. fz = gai
9fd0: 61 49 6d 70 6f 72 74 46 33 32 20 28 67 65 6f 2d aImportF32 (geo-
9fe0: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
9ff0: 66 73 65 74 20 2b 20 38 29 2c 0a 09 09 09 09 09 fset + 8),......
a000: 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 geo->endian, g
a010: 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 eo->endian_arch)
a020: 3b 0a 09 09 20 20 20 20 20 20 6d 20 3d 20 67 61 ;... m = ga
a030: 69 61 49 6d 70 6f 72 74 36 34 20 28 67 65 6f 2d iaImport64 (geo-
a040: 3e 62 6c 6f 62 20 2b 20 28 67 65 6f 2d 3e 6f 66 >blob + (geo->of
a050: 66 73 65 74 20 2b 20 31 32 29 2c 0a 09 09 09 09 fset + 12),.....
a060: 09 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 .geo->endian, ge
a070: 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b o->endian_arch);
a080: 0a 09 09 20 20 20 20 20 20 78 20 3d 20 6c 61 73 ... x = las
a090: 74 5f 78 20 2b 20 66 78 3b 0a 09 09 20 20 20 20 t_x + fx;...
a0a0: 20 20 79 20 3d 20 6c 61 73 74 5f 79 20 2b 20 66 y = last_y + f
a0b0: 79 3b 0a 09 09 20 20 20 20 20 20 7a 20 3d 20 6c y;... z = l
a0c0: 61 73 74 5f 7a 20 2b 20 66 7a 3b 0a 09 09 20 20 ast_z + fz;...
a0d0: 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 geo->offset
a0e0: 2b 3d 20 32 30 3b 0a 09 09 20 20 7d 0a 09 09 67 += 20;... }...g
a0f0: 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a 4d 20 aiaSetPointXYZM
a100: 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 (ring->Coords, i
a110: 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a v, x, y, z, m);.
a120: 09 09 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 ..last_x = x;...
a130: 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 6c 61 last_y = y;...la
a140: 73 74 5f 7a 20 3d 20 7a 3b 0a 09 20 20 20 20 7d st_z = z;.. }
a150: 0a 20 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 . }.}..stat
a160: 69 63 20 76 6f 69 64 0a 50 61 72 73 65 57 6b 62 ic void.ParseWkb
a170: 47 65 6f 6d 65 74 72 79 20 28 67 61 69 61 47 65 Geometry (gaiaGe
a180: 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 2c 20 69 omCollPtr geo, i
a190: 6e 74 20 69 73 57 4b 42 29 0a 7b 0a 2f 2a 20 64 nt isWKB).{./* d
a1a0: 65 63 6f 64 65 73 20 61 20 4d 55 4c 54 49 78 78 ecodes a MULTIxx
a1b0: 20 6f 72 20 47 45 4f 4d 45 54 52 59 43 4f 4c 4c or GEOMETRYCOLL
a1c0: 45 43 54 49 4f 4e 20 66 72 6f 6d 20 53 70 61 74 ECTION from Spat
a1d0: 69 61 4c 69 74 65 20 42 4c 4f 42 20 2a 2f 0a 20 iaLite BLOB */.
a1e0: 20 20 20 69 6e 74 20 65 6e 74 69 74 69 65 73 3b int entities;
a1f0: 0a 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0a 20 . int type;.
a200: 20 20 20 69 6e 74 20 69 65 3b 0a 20 20 20 20 69 int ie;. i
a210: 66 20 28 67 65 6f 2d 3e 73 69 7a 65 20 3c 20 67 f (geo->size < g
a220: 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 20 34 29 0a eo->offset + 4).
a230: 09 72 65 74 75 72 6e 3b 0a 20 20 20 20 65 6e 74 .return;. ent
a240: 69 74 69 65 73 20 3d 0a 09 67 61 69 61 49 6d 70 ities =..gaiaImp
a250: 6f 72 74 33 32 20 28 67 65 6f 2d 3e 62 6c 6f 62 ort32 (geo->blob
a260: 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 65 74 2c 20 + geo->offset,
a270: 67 65 6f 2d 3e 65 6e 64 69 61 6e 2c 20 67 65 6f geo->endian, geo
a280: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a ->endian_arch);.
a290: 20 20 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 geo->offset
a2a0: 2b 3d 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 += 4;. for (i
a2b0: 65 20 3d 20 30 3b 20 69 65 20 3c 20 65 6e 74 69 e = 0; ie < enti
a2c0: 74 69 65 73 3b 20 69 65 2b 2b 29 0a 20 20 20 20 ties; ie++).
a2d0: 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 2d 3e {.. if (geo->
a2e0: 73 69 7a 65 20 3c 20 67 65 6f 2d 3e 6f 66 66 73 size < geo->offs
a2f0: 65 74 20 2b 20 35 29 0a 09 20 20 20 20 20 20 72 et + 5).. r
a300: 65 74 75 72 6e 3b 0a 09 20 20 69 66 20 28 69 73 eturn;.. if (is
a310: 57 4b 42 29 0a 09 20 20 20 20 7b 0a 09 09 2f 2a WKB).. {.../*
a320: 20 76 61 6e 69 6c 6c 61 20 57 4b 42 20 63 6f 75 vanilla WKB cou
a330: 6c 64 20 62 65 20 65 6e 63 6f 64 65 64 20 61 73 ld be encoded as
a340: 20 6d 69 78 65 64 20 62 69 67 2d 2f 6c 69 74 74 mixed big-/litt
a350: 6c 65 2d 65 6e 64 69 61 6e 20 73 75 62 2d 69 74 le-endian sub-it
a360: 65 6d 73 20 2a 2f 0a 09 09 69 66 20 28 2a 28 67 ems */...if (*(g
a370: 65 6f 2d 3e 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e eo->blob + geo->
a380: 6f 66 66 73 65 74 29 20 3d 3d 20 30 78 30 31 29 offset) == 0x01)
a390: 0a 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 ... geo->endi
a3a0: 61 6e 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 an = GAIA_LITTLE
a3b0: 5f 45 4e 44 49 41 4e 3b 0a 09 09 65 6c 73 65 0a _ENDIAN;...else.
a3c0: 09 09 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 .. geo->endia
a3d0: 6e 20 3d 20 47 41 49 41 5f 42 49 47 5f 45 4e 44 n = GAIA_BIG_END
a3e0: 49 41 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 74 IAN;.. }.. t
a3f0: 79 70 65 20 3d 0a 09 20 20 20 20 20 20 67 61 69 ype =.. gai
a400: 61 49 6d 70 6f 72 74 33 32 20 28 67 65 6f 2d 3e aImport32 (geo->
a410: 62 6c 6f 62 20 2b 20 67 65 6f 2d 3e 6f 66 66 73 blob + geo->offs
a420: 65 74 20 2b 20 31 2c 20 67 65 6f 2d 3e 65 6e 64 et + 1, geo->end
a430: 69 61 6e 2c 0a 09 09 09 20 20 20 20 67 65 6f 2d ian,.... geo-
a440: 3e 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 >endian_arch);..
a450: 20 20 67 65 6f 2d 3e 6f 66 66 73 65 74 20 2b 3d geo->offset +=
a460: 20 35 3b 0a 09 20 20 73 77 69 74 63 68 20 28 74 5;.. switch (t
a470: 79 70 65 29 0a 09 20 20 20 20 7b 0a 09 20 20 20 ype).. {..
a480: 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
a490: 3a 0a 09 09 50 61 72 73 65 57 6b 62 50 6f 69 6e :...ParseWkbPoin
a4a0: 74 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b t (geo);...break
a4b0: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
a4c0: 5f 50 4f 49 4e 54 5a 3a 0a 09 20 20 20 20 63 61 _POINTZ:.. ca
a4d0: 73 65 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f se GAIA_GEOSWKB_
a4e0: 50 4f 49 4e 54 5a 3a 0a 09 09 50 61 72 73 65 57 POINTZ:...ParseW
a4f0: 6b 62 50 6f 69 6e 74 5a 20 28 67 65 6f 29 3b 0a kbPointZ (geo);.
a500: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 ..break;.. ca
a510: 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 4d 3a 0a se GAIA_POINTM:.
a520: 09 09 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 4d ..ParseWkbPointM
a530: 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b (geo);...break;
a540: 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
a550: 50 4f 49 4e 54 5a 4d 3a 0a 09 09 50 61 72 73 65 POINTZM:...Parse
a560: 57 6b 62 50 6f 69 6e 74 5a 4d 20 28 67 65 6f 29 WkbPointZM (geo)
a570: 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 ;...break;..
a580: 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 case GAIA_LINEST
a590: 52 49 4e 47 3a 0a 09 09 50 61 72 73 65 57 6b 62 RING:...ParseWkb
a5a0: 4c 69 6e 65 20 28 67 65 6f 29 3b 0a 09 09 62 72 Line (geo);...br
a5b0: 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 eak;.. case G
a5c0: 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a AIA_LINESTRINGZ:
a5d0: 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
a5e0: 47 45 4f 53 57 4b 42 5f 4c 49 4e 45 53 54 52 49 GEOSWKB_LINESTRI
a5f0: 4e 47 5a 3a 0a 09 09 50 61 72 73 65 57 6b 62 4c NGZ:...ParseWkbL
a600: 69 6e 65 5a 20 28 67 65 6f 29 3b 0a 09 09 62 72 ineZ (geo);...br
a610: 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 eak;.. case G
a620: 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 3a AIA_LINESTRINGM:
a630: 0a 09 09 50 61 72 73 65 57 6b 62 4c 69 6e 65 4d ...ParseWkbLineM
a640: 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b (geo);...break;
a650: 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
a660: 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 09 09 LINESTRINGZM:...
a670: 50 61 72 73 65 57 6b 62 4c 69 6e 65 5a 4d 20 28 ParseWkbLineZM (
a680: 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 geo);...break;..
a690: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f case GAIA_PO
a6a0: 4c 59 47 4f 4e 3a 0a 09 09 50 61 72 73 65 57 6b LYGON:...ParseWk
a6b0: 62 50 6f 6c 79 67 6f 6e 20 28 67 65 6f 29 3b 0a bPolygon (geo);.
a6c0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 ..break;.. ca
a6d0: 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a se GAIA_POLYGONZ
a6e0: 3a 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 :.. case GAIA
a6f0: 5f 47 45 4f 53 57 4b 42 5f 50 4f 4c 59 47 4f 4e _GEOSWKB_POLYGON
a700: 5a 3a 0a 09 09 50 61 72 73 65 57 6b 62 50 6f 6c Z:...ParseWkbPol
a710: 79 67 6f 6e 5a 20 28 67 65 6f 29 3b 0a 09 09 62 ygonZ (geo);...b
a720: 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 reak;.. case
a730: 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a 09 GAIA_POLYGONM:..
a740: 09 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e .ParseWkbPolygon
a750: 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b M (geo);...break
a760: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
a770: 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 09 50 61 _POLYGONZM:...Pa
a780: 72 73 65 57 6b 62 50 6f 6c 79 67 6f 6e 5a 4d 20 rseWkbPolygonZM
a790: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
a7a0: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
a7b0: 55 4c 54 49 50 4f 49 4e 54 3a 0a 09 09 50 61 72 ULTIPOINT:...Par
a7c0: 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 6e 74 20 seWkbMultiPoint
a7d0: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
a7e0: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
a7f0: 55 4c 54 49 50 4f 49 4e 54 5a 3a 0a 09 09 50 61 ULTIPOINTZ:...Pa
a800: 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 6e 74 rseWkbMultiPoint
a810: 5a 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b Z (geo);...break
a820: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
a830: 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 3a 0a 09 09 _MULTIPOINTM:...
a840: 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 69 ParseWkbMultiPoi
a850: 6e 74 4d 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 ntM (geo);...bre
a860: 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 ak;.. case GA
a870: 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 3a IA_MULTIPOINTZM:
a880: 0a 09 09 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 ...ParseWkbMulti
a890: 50 6f 69 6e 74 5a 4d 20 28 67 65 6f 29 3b 0a 09 PointZM (geo);..
a8a0: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
a8b0: 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 e GAIA_MULTILINE
a8c0: 53 54 52 49 4e 47 3a 0a 09 09 50 61 72 73 65 57 STRING:...ParseW
a8d0: 6b 62 4d 75 6c 74 69 4c 69 6e 65 20 28 67 65 6f kbMultiLine (geo
a8e0: 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 );...break;..
a8f0: 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 case GAIA_MULTI
a900: 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 09 09 50 LINESTRINGZ:...P
a910: 61 72 73 65 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 arseWkbMultiLine
a920: 5a 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b Z (geo);...break
a930: 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
a940: 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
a950: 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 4d 75 6c M:...ParseWkbMul
a960: 74 69 4c 69 6e 65 4d 20 28 67 65 6f 29 3b 0a 09 tiLineM (geo);..
a970: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
a980: 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 e GAIA_MULTILINE
a990: 53 54 52 49 4e 47 5a 4d 3a 0a 09 09 50 61 72 73 STRINGZM:...Pars
a9a0: 65 57 6b 62 4d 75 6c 74 69 4c 69 6e 65 5a 4d 20 eWkbMultiLineZM
a9b0: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
a9c0: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
a9d0: 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a 09 09 50 ULTIPOLYGON:...P
a9e0: 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f 6c 79 arseWkbMultiPoly
a9f0: 67 6f 6e 20 28 67 65 6f 29 3b 0a 09 09 62 72 65 gon (geo);...bre
aa00: 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 ak;.. case GA
aa10: 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a IA_MULTIPOLYGONZ
aa20: 3a 0a 09 09 50 61 72 73 65 57 6b 62 4d 75 6c 74 :...ParseWkbMult
aa30: 69 50 6f 6c 79 67 6f 6e 5a 20 28 67 65 6f 29 3b iPolygonZ (geo);
aa40: 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 ...break;.. c
aa50: 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f ase GAIA_MULTIPO
aa60: 4c 59 47 4f 4e 4d 3a 0a 09 09 50 61 72 73 65 57 LYGONM:...ParseW
aa70: 6b 62 4d 75 6c 74 69 50 6f 6c 79 67 6f 6e 4d 20 kbMultiPolygonM
aa80: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
aa90: 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
aaa0: 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 ULTIPOLYGONZM:..
aab0: 09 50 61 72 73 65 57 6b 62 4d 75 6c 74 69 50 6f .ParseWkbMultiPo
aac0: 6c 79 67 6f 6e 5a 4d 20 28 67 65 6f 29 3b 0a 09 lygonZM (geo);..
aad0: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
aae0: 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 e GAIA_GEOMETRYC
aaf0: 4f 4c 4c 45 43 54 49 4f 4e 3a 0a 09 09 50 61 72 OLLECTION:...Par
ab00: 73 65 57 6b 62 47 65 6f 6d 43 6f 6c 6c 20 28 67 seWkbGeomColl (g
ab10: 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 eo);...break;..
ab20: 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f case GAIA_GEO
ab30: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
ab40: 3a 0a 09 09 50 61 72 73 65 57 6b 62 47 65 6f 6d :...ParseWkbGeom
ab50: 43 6f 6c 6c 5a 20 28 67 65 6f 29 3b 0a 09 09 62 CollZ (geo);...b
ab60: 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 20 reak;.. case
ab70: 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
ab80: 4c 45 43 54 49 4f 4e 4d 3a 0a 09 09 50 61 72 73 LECTIONM:...Pars
ab90: 65 57 6b 62 47 65 6f 6d 43 6f 6c 6c 4d 20 28 67 eWkbGeomCollM (g
aba0: 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 eo);...break;..
abb0: 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f case GAIA_GEO
abc0: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
abd0: 4d 3a 0a 09 09 50 61 72 73 65 57 6b 62 47 65 6f M:...ParseWkbGeo
abe0: 6d 43 6f 6c 6c 5a 4d 20 28 67 65 6f 29 3b 0a 09 mCollZM (geo);..
abf0: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
ac00: 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 e GAIA_COMPRESSE
ac10: 44 5f 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 09 D_LINESTRING:...
ac20: 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 57 ParseCompressedW
ac30: 6b 62 4c 69 6e 65 20 28 67 65 6f 29 3b 0a 09 09 kbLine (geo);...
ac40: 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 65 break;.. case
ac50: 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
ac60: 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 09 09 _LINESTRINGZ:...
ac70: 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 57 ParseCompressedW
ac80: 6b 62 4c 69 6e 65 5a 20 28 67 65 6f 29 3b 0a 09 kbLineZ (geo);..
ac90: 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 73 .break;.. cas
aca0: 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 e GAIA_COMPRESSE
acb0: 44 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 3a 0a 09 D_LINESTRINGM:..
acc0: 09 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 .ParseCompressed
acd0: 57 6b 62 4c 69 6e 65 4d 20 28 67 65 6f 29 3b 0a WkbLineM (geo);.
ace0: 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 61 ..break;.. ca
acf0: 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 se GAIA_COMPRESS
ad00: 45 44 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a ED_LINESTRINGZM:
ad10: 0a 09 09 50 61 72 73 65 43 6f 6d 70 72 65 73 73 ...ParseCompress
ad20: 65 64 57 6b 62 4c 69 6e 65 5a 4d 20 28 67 65 6f edWkbLineZM (geo
ad30: 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 );...break;..
ad40: 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 case GAIA_COMPR
ad50: 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 ESSED_POLYGON:..
ad60: 09 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 .ParseCompressed
ad70: 57 6b 62 50 6f 6c 79 67 6f 6e 20 28 67 65 6f 29 WkbPolygon (geo)
ad80: 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 ;...break;..
ad90: 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 case GAIA_COMPRE
ada0: 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 SSED_POLYGONZ:..
adb0: 09 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 .ParseCompressed
adc0: 57 6b 62 50 6f 6c 79 67 6f 6e 5a 20 28 67 65 6f WkbPolygonZ (geo
add0: 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 );...break;..
ade0: 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 case GAIA_COMPR
adf0: 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a ESSED_POLYGONM:.
ae00: 09 09 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 ..ParseCompresse
ae10: 64 57 6b 62 50 6f 6c 79 67 6f 6e 4d 20 28 67 65 dWkbPolygonM (ge
ae20: 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 o);...break;..
ae30: 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 case GAIA_COMP
ae40: 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 5a 4d RESSED_POLYGONZM
ae50: 3a 0a 09 09 50 61 72 73 65 43 6f 6d 70 72 65 73 :...ParseCompres
ae60: 73 65 64 57 6b 62 50 6f 6c 79 67 6f 6e 5a 4d 20 sedWkbPolygonZM
ae70: 28 67 65 6f 29 3b 0a 09 09 62 72 65 61 6b 3b 0a (geo);...break;.
ae80: 09 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 09 . default:...
ae90: 62 72 65 61 6b 3b 0a 09 20 20 20 20 7d 3b 0a 20 break;.. };.
aea0: 20 20 20 20 20 7d 0a 7d 0a 0a 73 74 61 74 69 63 }.}..static
aeb0: 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 gaiaGeomCollPtr
aec0: 0a 64 6f 50 61 72 73 65 54 69 6e 79 50 6f 69 6e .doParseTinyPoin
aed0: 74 42 6c 6f 62 20 28 63 6f 6e 73 74 20 75 6e 73 tBlob (const uns
aee0: 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 igned char *blob
aef0: 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 , unsigned int s
af00: 69 7a 65 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 ize).{./* decodi
af10: 6e 67 20 66 72 6f 6d 20 53 70 61 74 69 61 4c 69 ng from SpatiaLi
af20: 74 65 20 54 69 6e 79 50 6f 69 6e 74 20 42 4c 4f te TinyPoint BLO
af30: 42 20 74 6f 20 47 45 4f 4d 45 54 52 59 20 2a 2f B to GEOMETRY */
af40: 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 . unsigned ch
af50: 61 72 20 70 6f 69 6e 74 54 79 70 65 3b 0a 20 20 ar pointType;.
af60: 20 20 69 6e 74 20 74 79 70 65 3b 0a 20 20 20 20 int type;.
af70: 69 6e 74 20 6c 69 74 74 6c 65 5f 65 6e 64 69 61 int little_endia
af80: 6e 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 69 61 n;. int endia
af90: 6e 5f 61 72 63 68 20 3d 20 67 61 69 61 45 6e 64 n_arch = gaiaEnd
afa0: 69 61 6e 41 72 63 68 20 28 29 3b 0a 20 20 20 20 ianArch ();.
afb0: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
afc0: 67 65 6f 20 3d 20 4e 55 4c 4c 3b 0a 0a 20 20 20 geo = NULL;..
afd0: 20 69 66 20 28 73 69 7a 65 20 3c 20 32 34 29 0a if (size < 24).
afe0: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 09 09 2f .return NULL;../
aff0: 2a 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 20 69 * cannot be an i
b000: 6e 74 65 72 6e 61 6c 20 42 4c 4f 42 20 54 69 6e nternal BLOB Tin
b010: 79 50 6f 69 6e 74 20 67 65 6f 6d 65 74 72 79 20 yPoint geometry
b020: 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c 6f */. if (*(blo
b030: 62 20 2b 20 30 29 20 21 3d 20 47 41 49 41 5f 4d b + 0) != GAIA_M
b040: 41 52 4b 5f 53 54 41 52 54 29 0a 09 72 65 74 75 ARK_START)..retu
b050: 72 6e 20 4e 55 4c 4c 3b 09 09 2f 2a 20 66 61 69 rn NULL;../* fai
b060: 6c 65 64 20 74 6f 20 72 65 63 6f 67 6e 69 7a 65 led to recognize
b070: 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 START signature
b080: 20 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c */. if (*(bl
b090: 6f 62 20 2b 20 28 73 69 7a 65 20 2d 20 31 29 29 ob + (size - 1))
b0a0: 20 21 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e != GAIA_MARK_EN
b0b0: 44 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b D)..return NULL;
b0c0: 09 09 2f 2a 20 66 61 69 6c 65 64 20 74 6f 20 72 ../* failed to r
b0d0: 65 63 6f 67 6e 69 7a 65 20 45 4e 44 20 73 69 67 ecognize END sig
b0e0: 6e 61 74 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 nature */. if
b0f0: 20 28 2a 28 62 6c 6f 62 20 2b 20 31 29 20 3d 3d (*(blob + 1) ==
b100: 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 5f GAIA_TINYPOINT_
b110: 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 29 0a 09 LITTLE_ENDIAN)..
b120: 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 20 3d 20 little_endian =
b130: 31 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 1;. else if (
b140: 2a 28 62 6c 6f 62 20 2b 20 31 29 20 3d 3d 20 47 *(blob + 1) == G
b150: 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 5f 42 49 AIA_TINYPOINT_BI
b160: 47 5f 45 4e 44 49 41 4e 29 0a 09 6c 69 74 74 6c G_ENDIAN)..littl
b170: 65 5f 65 6e 64 69 61 6e 20 3d 20 30 3b 0a 20 20 e_endian = 0;.
b180: 20 20 65 6c 73 65 0a 09 72 65 74 75 72 6e 20 4e else..return N
b190: 55 4c 4c 3b 09 09 2f 2a 20 75 6e 6b 6e 6f 77 6e ULL;../* unknown
b1a0: 20 65 6e 63 6f 64 69 6e 67 3b 20 6e 6f 72 20 6c encoding; nor l
b1b0: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 6e 65 69 ittle-endian nei
b1c0: 74 68 65 72 20 62 69 67 2d 65 6e 64 69 61 6e 20 ther big-endian
b1d0: 2a 2f 0a 0a 20 20 20 20 70 6f 69 6e 74 54 79 70 */.. pointTyp
b1e0: 65 20 3d 20 2a 28 62 6c 6f 62 20 2b 20 36 29 3b e = *(blob + 6);
b1f0: 0a 20 20 20 20 67 65 6f 20 3d 20 67 61 69 61 41 . geo = gaiaA
b200: 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 20 28 29 3b llocGeomColl ();
b210: 0a 20 20 20 20 67 65 6f 2d 3e 53 72 69 64 20 3d . geo->Srid =
b220: 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 62 gaiaImport32 (b
b230: 6c 6f 62 20 2b 20 32 2c 20 6c 69 74 74 6c 65 5f lob + 2, little_
b240: 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 endian, endian_a
b250: 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 65 rch);. geo->e
b260: 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 28 63 68 ndian_arch = (ch
b270: 61 72 29 20 65 6e 64 69 61 6e 5f 61 72 63 68 3b ar) endian_arch;
b280: 0a 20 20 20 20 67 65 6f 2d 3e 65 6e 64 69 61 6e . geo->endian
b290: 20 3d 20 28 63 68 61 72 29 20 6c 69 74 74 6c 65 = (char) little
b2a0: 5f 65 6e 64 69 61 6e 3b 0a 20 20 20 20 67 65 6f _endian;. geo
b2b0: 2d 3e 62 6c 6f 62 20 3d 20 62 6c 6f 62 3b 0a 20 ->blob = blob;.
b2c0: 20 20 20 67 65 6f 2d 3e 73 69 7a 65 20 3d 20 73 geo->size = s
b2d0: 69 7a 65 3b 0a 20 20 20 20 67 65 6f 2d 3e 6f 66 ize;. geo->of
b2e0: 66 73 65 74 20 3d 20 37 3b 0a 20 20 20 20 73 77 fset = 7;. sw
b2f0: 69 74 63 68 20 28 70 6f 69 6e 74 54 79 70 65 29 itch (pointType)
b300: 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 73 . {.. /* s
b310: 65 74 74 69 6e 67 20 75 70 20 44 69 6d 65 6e 73 etting up Dimens
b320: 69 6f 6e 4d 6f 64 65 6c 20 2a 2f 0a 20 20 20 20 ionModel */.
b330: 20 20 63 61 73 65 20 47 41 49 41 5f 54 49 4e 59 case GAIA_TINY
b340: 50 4f 49 4e 54 5f 58 59 5a 3a 0a 09 20 20 74 79 POINT_XYZ:.. ty
b350: 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 5a pe = GAIA_POINTZ
b360: 3b 0a 09 20 20 67 65 6f 2d 3e 44 69 6d 65 6e 73 ;.. geo->Dimens
b370: 69 6f 6e 4d 6f 64 65 6c 20 3d 20 47 41 49 41 5f ionModel = GAIA_
b380: 58 59 5f 5a 3b 0a 09 20 20 62 72 65 61 6b 3b 0a XY_Z;.. break;.
b390: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
b3a0: 54 49 4e 59 50 4f 49 4e 54 5f 58 59 4d 3a 0a 09 TINYPOINT_XYM:..
b3b0: 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 50 4f type = GAIA_PO
b3c0: 49 4e 54 4d 3b 0a 09 20 20 67 65 6f 2d 3e 44 69 INTM;.. geo->Di
b3d0: 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 20 47 mensionModel = G
b3e0: 41 49 41 5f 58 59 5f 4d 3b 0a 09 20 20 62 72 65 AIA_XY_M;.. bre
b3f0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
b400: 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 5f 58 59 AIA_TINYPOINT_XY
b410: 5a 4d 3a 0a 09 20 20 74 79 70 65 20 3d 20 47 41 ZM:.. type = GA
b420: 49 41 5f 50 4f 49 4e 54 5a 4d 3b 0a 09 20 20 67 IA_POINTZM;.. g
b430: 65 6f 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 eo->DimensionMod
b440: 65 6c 20 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d el = GAIA_XY_Z_M
b450: 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
b460: 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 20 74 79 default:.. ty
b470: 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 3b pe = GAIA_POINT;
b480: 0a 09 20 20 67 65 6f 2d 3e 44 69 6d 65 6e 73 69 .. geo->Dimensi
b490: 6f 6e 4d 6f 64 65 6c 20 3d 20 47 41 49 41 5f 58 onModel = GAIA_X
b4a0: 59 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 Y;.. break;.
b4b0: 20 20 20 7d 3b 0a 20 20 20 20 73 77 69 74 63 68 };. switch
b4c0: 20 28 74 79 70 65 29 0a 20 20 20 20 20 20 7b 0a (type). {.
b4d0: 09 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 65 6c . /* parsing el
b4e0: 65 6d 65 6e 74 61 72 79 20 67 65 6f 6d 65 74 72 ementary geometr
b4f0: 69 65 73 20 2a 2f 0a 20 20 20 20 20 20 63 61 73 ies */. cas
b500: 65 20 47 41 49 41 5f 50 4f 49 4e 54 3a 0a 09 20 e GAIA_POINT:..
b510: 20 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 20 28 ParseWkbPoint (
b520: 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b 0a geo);.. break;.
b530: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
b540: 50 4f 49 4e 54 5a 3a 0a 09 20 20 50 61 72 73 65 POINTZ:.. Parse
b550: 57 6b 62 50 6f 69 6e 74 5a 20 28 67 65 6f 29 3b WkbPointZ (geo);
b560: 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
b570: 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
b580: 4d 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f M:.. ParseWkbPo
b590: 69 6e 74 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 intM (geo);.. b
b5a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
b5b0: 20 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 3a 0a 09 GAIA_POINTZM:..
b5c0: 20 20 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 5a ParseWkbPointZ
b5d0: 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 M (geo);.. brea
b5e0: 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 k;. default
b5f0: 3a 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 :.. break;.
b600: 20 20 7d 3b 0a 20 20 20 20 67 65 6f 2d 3e 4d 69 };. geo->Mi
b610: 6e 58 20 3d 20 67 65 6f 2d 3e 46 69 72 73 74 50 nX = geo->FirstP
b620: 6f 69 6e 74 2d 3e 58 3b 0a 20 20 20 20 67 65 6f oint->X;. geo
b630: 2d 3e 4d 69 6e 59 20 3d 20 67 65 6f 2d 3e 46 69 ->MinY = geo->Fi
b640: 72 73 74 50 6f 69 6e 74 2d 3e 59 3b 0a 20 20 20 rstPoint->Y;.
b650: 20 67 65 6f 2d 3e 4d 61 78 58 20 3d 20 67 65 6f geo->MaxX = geo
b660: 2d 3e 46 69 72 73 74 50 6f 69 6e 74 2d 3e 58 3b ->FirstPoint->X;
b670: 0a 20 20 20 20 67 65 6f 2d 3e 4d 61 78 59 20 3d . geo->MaxY =
b680: 20 67 65 6f 2d 3e 46 69 72 73 74 50 6f 69 6e 74 geo->FirstPoint
b690: 2d 3e 59 3b 0a 20 20 20 20 67 65 6f 2d 3e 44 65 ->Y;. geo->De
b6a0: 63 6c 61 72 65 64 54 79 70 65 20 3d 20 47 41 49 claredType = GAI
b6b0: 41 5f 50 4f 49 4e 54 3b 0a 20 20 20 20 72 65 74 A_POINT;. ret
b6c0: 75 72 6e 20 67 65 6f 3b 0a 7d 0a 0a 47 41 49 41 urn geo;.}..GAIA
b6d0: 47 45 4f 5f 44 45 43 4c 41 52 45 20 67 61 69 61 GEO_DECLARE gaia
b6e0: 47 65 6f 6d 43 6f 6c 6c 50 74 72 0a 67 61 69 61 GeomCollPtr.gaia
b6f0: 46 72 6f 6d 53 70 61 74 69 61 4c 69 74 65 42 6c FromSpatiaLiteBl
b700: 6f 62 57 6b 62 45 78 20 28 63 6f 6e 73 74 20 75 obWkbEx (const u
b710: 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c nsigned char *bl
b720: 6f 62 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 ob, unsigned int
b730: 20 73 69 7a 65 2c 0a 09 09 09 20 20 20 20 20 69 size,.... i
b740: 6e 74 20 67 70 6b 67 5f 6d 6f 64 65 2c 20 69 6e nt gpkg_mode, in
b750: 74 20 67 70 6b 67 5f 61 6d 70 68 69 62 69 6f 75 t gpkg_amphibiou
b760: 73 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 6e 67 s).{./* decoding
b770: 20 66 72 6f 6d 20 53 70 61 74 69 61 4c 69 74 65 from SpatiaLite
b780: 20 42 4c 4f 42 20 74 6f 20 47 45 4f 4d 45 54 52 BLOB to GEOMETR
b790: 59 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 79 70 Y */. int typ
b7a0: 65 3b 0a 20 20 20 20 69 6e 74 20 6c 69 74 74 6c e;. int littl
b7b0: 65 5f 65 6e 64 69 61 6e 3b 0a 20 20 20 20 69 6e e_endian;. in
b7c0: 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 t endian_arch =
b7d0: 67 61 69 61 45 6e 64 69 61 6e 41 72 63 68 20 28 gaiaEndianArch (
b7e0: 29 3b 0a 20 20 20 20 67 61 69 61 47 65 6f 6d 43 );. gaiaGeomC
b7f0: 6f 6c 6c 50 74 72 20 67 65 6f 20 3d 20 4e 55 4c ollPtr geo = NUL
b800: 4c 3b 0a 0a 20 20 20 20 69 66 20 28 67 70 6b 67 L;.. if (gpkg
b810: 5f 61 6d 70 68 69 62 69 6f 75 73 20 7c 7c 20 67 _amphibious || g
b820: 70 6b 67 5f 6d 6f 64 65 29 0a 20 20 20 20 20 20 pkg_mode).
b830: 7b 0a 23 69 66 64 65 66 20 45 4e 41 42 4c 45 5f {.#ifdef ENABLE_
b840: 47 45 4f 50 41 43 4b 41 47 45 09 2f 2a 20 47 45 GEOPACKAGE./* GE
b850: 4f 50 41 43 4b 41 47 45 20 65 6e 61 62 6c 65 64 OPACKAGE enabled
b860: 3a 20 73 75 70 70 6f 72 74 69 6e 67 20 47 50 4b : supporting GPK
b870: 47 20 67 65 6f 6d 65 74 72 69 65 73 20 2a 2f 0a G geometries */.
b880: 09 20 20 69 66 20 28 67 61 69 61 49 73 56 61 6c . if (gaiaIsVal
b890: 69 64 47 50 42 20 28 62 6c 6f 62 2c 20 73 69 7a idGPB (blob, siz
b8a0: 65 29 29 0a 09 20 20 20 20 7b 0a 09 09 67 65 6f e)).. {...geo
b8b0: 20 3d 20 67 61 69 61 46 72 6f 6d 47 65 6f 50 61 = gaiaFromGeoPa
b8c0: 63 6b 61 67 65 47 65 6f 6d 65 74 72 79 42 6c 6f ckageGeometryBlo
b8d0: 62 20 28 62 6c 6f 62 2c 20 73 69 7a 65 29 3b 0a b (blob, size);.
b8e0: 09 09 69 66 20 28 67 65 6f 20 21 3d 20 4e 55 4c ..if (geo != NUL
b8f0: 4c 29 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 L)... return
b900: 67 65 6f 3b 0a 09 20 20 20 20 7d 0a 09 20 20 69 geo;.. }.. i
b910: 66 20 28 67 70 6b 67 5f 6d 6f 64 65 29 0a 09 20 f (gpkg_mode)..
b920: 20 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c return NULL
b930: 3b 09 2f 2a 20 6d 75 73 74 20 61 63 63 65 70 74 ;./* must accept
b940: 20 6f 6e 6c 79 20 47 50 4b 47 20 67 65 6f 6d 65 only GPKG geome
b950: 74 72 69 65 73 20 2a 2f 0a 23 65 6c 73 65 0a 09 tries */.#else..
b960: 20 20 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 65 6e ;.#endif /* en
b970: 64 20 47 45 4f 50 41 43 4b 41 47 45 3a 20 73 75 d GEOPACKAGE: su
b980: 70 70 6f 72 74 69 6e 67 20 47 50 4b 47 20 67 65 pporting GPKG ge
b990: 6f 6d 65 74 72 69 65 73 20 2a 2f 0a 20 20 20 20 ometries */.
b9a0: 20 20 7d 0a 0a 20 20 20 20 69 66 20 28 73 69 7a }.. if (siz
b9b0: 65 20 3d 3d 20 32 34 20 7c 7c 20 73 69 7a 65 20 e == 24 || size
b9c0: 3d 3d 20 33 32 20 7c 7c 20 73 69 7a 65 20 3d 3d == 32 || size ==
b9d0: 20 34 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 40). {..
b9e0: 2f 2a 20 74 65 73 74 69 6e 67 20 66 6f 72 20 61 /* testing for a
b9f0: 20 70 6f 73 73 69 62 6c 65 20 54 69 6e 79 50 6f possible TinyPo
ba00: 69 6e 74 20 42 4c 4f 42 20 2a 2f 0a 09 20 20 69 int BLOB */.. i
ba10: 66 20 28 2a 28 62 6c 6f 62 20 2b 20 30 29 20 3d f (*(blob + 0) =
ba20: 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 = GAIA_MARK_STAR
ba30: 54 20 26 26 0a 09 20 20 20 20 20 20 28 2a 28 62 T &&.. (*(b
ba40: 6c 6f 62 20 2b 20 31 29 20 3d 3d 20 47 41 49 41 lob + 1) == GAIA
ba50: 5f 54 49 4e 59 50 4f 49 4e 54 5f 4c 49 54 54 4c _TINYPOINT_LITTL
ba60: 45 5f 45 4e 44 49 41 4e 0a 09 20 20 20 20 20 20 E_ENDIAN..
ba70: 20 7c 7c 20 2a 28 62 6c 6f 62 20 2b 20 31 29 20 || *(blob + 1)
ba80: 3d 3d 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 4e == GAIA_TINYPOIN
ba90: 54 5f 42 49 47 5f 45 4e 44 49 41 4e 29 0a 09 20 T_BIG_ENDIAN)..
baa0: 20 20 20 20 20 26 26 20 2a 28 62 6c 6f 62 20 2b && *(blob +
bab0: 20 28 73 69 7a 65 20 2d 20 31 29 29 20 3d 3d 20 (size - 1)) ==
bac0: 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 29 0a 09 GAIA_MARK_END)..
bad0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 6f 50 return doP
bae0: 61 72 73 65 54 69 6e 79 50 6f 69 6e 74 42 6c 6f arseTinyPointBlo
baf0: 62 20 28 62 6c 6f 62 2c 20 73 69 7a 65 29 3b 0a b (blob, size);.
bb00: 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 20 }.. if
bb10: 28 73 69 7a 65 20 3c 20 34 35 29 0a 09 72 65 74 (size < 45)..ret
bb20: 75 72 6e 20 4e 55 4c 4c 3b 09 09 2f 2a 20 63 61 urn NULL;../* ca
bb30: 6e 6e 6f 74 20 62 65 20 61 6e 20 69 6e 74 65 72 nnot be an inter
bb40: 6e 61 6c 20 42 4c 4f 42 20 57 4b 42 20 67 65 6f nal BLOB WKB geo
bb50: 6d 65 74 72 79 20 2a 2f 0a 20 20 20 20 69 66 20 metry */. if
bb60: 28 2a 28 62 6c 6f 62 20 2b 20 30 29 20 21 3d 20 (*(blob + 0) !=
bb70: 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 29 GAIA_MARK_START)
bb80: 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 09 09 ..return NULL;..
bb90: 2f 2a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 63 /* failed to rec
bba0: 6f 67 6e 69 7a 65 20 53 54 41 52 54 20 73 69 67 ognize START sig
bbb0: 6e 61 74 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 nature */. if
bbc0: 20 28 2a 28 62 6c 6f 62 20 2b 20 28 73 69 7a 65 (*(blob + (size
bbd0: 20 2d 20 31 29 29 20 21 3d 20 47 41 49 41 5f 4d - 1)) != GAIA_M
bbe0: 41 52 4b 5f 45 4e 44 29 0a 09 72 65 74 75 72 6e ARK_END)..return
bbf0: 20 4e 55 4c 4c 3b 09 09 2f 2a 20 66 61 69 6c 65 NULL;../* faile
bc00: 64 20 74 6f 20 72 65 63 6f 67 6e 69 7a 65 20 45 d to recognize E
bc10: 4e 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a ND signature */.
bc20: 20 20 20 20 69 66 20 28 2a 28 62 6c 6f 62 20 2b if (*(blob +
bc30: 20 33 38 29 20 21 3d 20 47 41 49 41 5f 4d 41 52 38) != GAIA_MAR
bc40: 4b 5f 4d 42 52 29 0a 09 72 65 74 75 72 6e 20 4e K_MBR)..return N
bc50: 55 4c 4c 3b 09 09 2f 2a 20 66 61 69 6c 65 64 20 ULL;../* failed
bc60: 74 6f 20 72 65 63 6f 67 6e 69 7a 65 20 4d 42 52 to recognize MBR
bc70: 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 20 20 signature */.
bc80: 20 20 69 66 20 28 2a 28 62 6c 6f 62 20 2b 20 31 if (*(blob + 1
bc90: 29 20 3d 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 ) == GAIA_LITTLE
bca0: 5f 45 4e 44 49 41 4e 29 0a 09 6c 69 74 74 6c 65 _ENDIAN)..little
bcb0: 5f 65 6e 64 69 61 6e 20 3d 20 31 3b 0a 20 20 20 _endian = 1;.
bcc0: 20 65 6c 73 65 20 69 66 20 28 2a 28 62 6c 6f 62 else if (*(blob
bcd0: 20 2b 20 31 29 20 3d 3d 20 47 41 49 41 5f 42 49 + 1) == GAIA_BI
bce0: 47 5f 45 4e 44 49 41 4e 29 0a 09 6c 69 74 74 6c G_ENDIAN)..littl
bcf0: 65 5f 65 6e 64 69 61 6e 20 3d 20 30 3b 0a 20 20 e_endian = 0;.
bd00: 20 20 65 6c 73 65 0a 09 72 65 74 75 72 6e 20 4e else..return N
bd10: 55 4c 4c 3b 09 09 2f 2a 20 75 6e 6b 6e 6f 77 6e ULL;../* unknown
bd20: 20 65 6e 63 6f 64 69 6e 67 3b 20 6e 6f 72 20 6c encoding; nor l
bd30: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 6e 65 69 ittle-endian nei
bd40: 74 68 65 72 20 62 69 67 2d 65 6e 64 69 61 6e 20 ther big-endian
bd50: 2a 2f 0a 20 20 20 20 74 79 70 65 20 3d 20 67 61 */. type = ga
bd60: 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 iaImport32 (blob
bd70: 20 2b 20 33 39 2c 20 6c 69 74 74 6c 65 5f 65 6e + 39, little_en
bd80: 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 dian, endian_arc
bd90: 68 29 3b 0a 20 20 20 20 67 65 6f 20 3d 20 67 61 h);. geo = ga
bda0: 69 61 41 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 20 iaAllocGeomColl
bdb0: 28 29 3b 0a 20 20 20 20 67 65 6f 2d 3e 53 72 69 ();. geo->Sri
bdc0: 64 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 32 d = gaiaImport32
bdd0: 20 28 62 6c 6f 62 20 2b 20 32 2c 20 6c 69 74 74 (blob + 2, litt
bde0: 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 le_endian, endia
bdf0: 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 67 65 6f n_arch);. geo
be00: 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 ->endian_arch =
be10: 28 63 68 61 72 29 20 65 6e 64 69 61 6e 5f 61 72 (char) endian_ar
be20: 63 68 3b 0a 20 20 20 20 67 65 6f 2d 3e 65 6e 64 ch;. geo->end
be30: 69 61 6e 20 3d 20 28 63 68 61 72 29 20 6c 69 74 ian = (char) lit
be40: 74 6c 65 5f 65 6e 64 69 61 6e 3b 0a 20 20 20 20 tle_endian;.
be50: 67 65 6f 2d 3e 62 6c 6f 62 20 3d 20 62 6c 6f 62 geo->blob = blob
be60: 3b 0a 20 20 20 20 67 65 6f 2d 3e 73 69 7a 65 20 ;. geo->size
be70: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 67 65 6f 2d = size;. geo-
be80: 3e 6f 66 66 73 65 74 20 3d 20 34 33 3b 0a 20 20 >offset = 43;.
be90: 20 20 73 77 69 74 63 68 20 28 74 79 70 65 29 0a switch (type).
bea0: 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 73 65 {.. /* se
beb0: 74 74 69 6e 67 20 75 70 20 44 69 6d 65 6e 73 69 tting up Dimensi
bec0: 6f 6e 4d 6f 64 65 6c 20 2a 2f 0a 20 20 20 20 20 onModel */.
bed0: 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
bee0: 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 Z:. case GA
bef0: 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a IA_LINESTRINGZ:.
bf00: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
bf10: 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 20 20 20 20 POLYGONZ:.
bf20: 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 case GAIA_MULTIP
bf30: 4f 49 4e 54 5a 3a 0a 20 20 20 20 20 20 63 61 73 OINTZ:. cas
bf40: 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 e GAIA_MULTILINE
bf50: 53 54 52 49 4e 47 5a 3a 0a 20 20 20 20 20 20 63 STRINGZ:. c
bf60: 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f ase GAIA_MULTIPO
bf70: 4c 59 47 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 LYGONZ:. ca
bf80: 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 se GAIA_GEOMETRY
bf90: 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3a 0a 20 20 20 COLLECTIONZ:.
bfa0: 20 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d case GAIA_COM
bfb0: 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 52 49 PRESSED_LINESTRI
bfc0: 4e 47 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 NGZ:. case
bfd0: 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f GAIA_COMPRESSED_
bfe0: 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 67 65 6f POLYGONZ:.. geo
bff0: 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
c000: 20 3d 20 47 41 49 41 5f 58 59 5f 5a 3b 0a 09 20 = GAIA_XY_Z;..
c010: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
c020: 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 4d 3a 0a se GAIA_POINTM:.
c030: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
c040: 4c 49 4e 45 53 54 52 49 4e 47 4d 3a 0a 20 20 20 LINESTRINGM:.
c050: 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 4c case GAIA_POL
c060: 59 47 4f 4e 4d 3a 0a 20 20 20 20 20 20 63 61 73 YGONM:. cas
c070: 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e e GAIA_MULTIPOIN
c080: 54 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 TM:. case G
c090: 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
c0a0: 49 4e 47 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 INGM:. case
c0b0: 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 GAIA_MULTIPOLYG
c0c0: 4f 4e 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 20 ONM:. case
c0d0: 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
c0e0: 4c 45 43 54 49 4f 4e 4d 3a 0a 20 20 20 20 20 20 LECTIONM:.
c0f0: 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 case GAIA_COMPRE
c100: 53 53 45 44 5f 4c 49 4e 45 53 54 52 49 4e 47 4d SSED_LINESTRINGM
c110: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
c120: 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f 50 4f 4c A_COMPRESSED_POL
c130: 59 47 4f 4e 4d 3a 0a 09 20 20 67 65 6f 2d 3e 44 YGONM:.. geo->D
c140: 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 20 imensionModel =
c150: 47 41 49 41 5f 58 59 5f 4d 3b 0a 09 20 20 62 72 GAIA_XY_M;.. br
c160: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
c170: 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 3a 0a 20 20 GAIA_POINTZM:.
c180: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 case GAIA_LI
c190: 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 20 20 20 20 NESTRINGZM:.
c1a0: 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 case GAIA_POLY
c1b0: 47 4f 4e 5a 4d 3a 0a 20 20 20 20 20 20 63 61 73 GONZM:. cas
c1c0: 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e e GAIA_MULTIPOIN
c1d0: 54 5a 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 20 TZM:. case
c1e0: 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
c1f0: 52 49 4e 47 5a 4d 3a 0a 20 20 20 20 20 20 63 61 RINGZM:. ca
c200: 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c se GAIA_MULTIPOL
c210: 59 47 4f 4e 5a 4d 3a 0a 20 20 20 20 20 20 63 61 YGONZM:. ca
c220: 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 se GAIA_GEOMETRY
c230: 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3a 0a 20 20 COLLECTIONZM:.
c240: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f case GAIA_CO
c250: 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 52 MPRESSED_LINESTR
c260: 49 4e 47 5a 4d 3a 0a 20 20 20 20 20 20 63 61 73 INGZM:. cas
c270: 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 e GAIA_COMPRESSE
c280: 44 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 D_POLYGONZM:..
c290: 67 65 6f 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f geo->DimensionMo
c2a0: 64 65 6c 20 3d 20 47 41 49 41 5f 58 59 5f 5a 5f del = GAIA_XY_Z_
c2b0: 4d 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 M;.. break;.
c2c0: 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 20 67 default:.. g
c2d0: 65 6f 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 eo->DimensionMod
c2e0: 65 6c 20 3d 20 47 41 49 41 5f 58 59 3b 0a 09 20 el = GAIA_XY;..
c2f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 3b break;. };
c300: 0a 20 20 20 20 73 77 69 74 63 68 20 28 74 79 70 . switch (typ
c310: 65 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a e). {.. /*
c320: 20 70 61 72 73 69 6e 67 20 65 6c 65 6d 65 6e 74 parsing element
c330: 61 72 79 20 67 65 6f 6d 65 74 72 69 65 73 20 2a ary geometries *
c340: 2f 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 /. case GAI
c350: 41 5f 50 4f 49 4e 54 3a 0a 09 20 20 50 61 72 73 A_POINT:.. Pars
c360: 65 57 6b 62 50 6f 69 6e 74 20 28 67 65 6f 29 3b eWkbPoint (geo);
c370: 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
c380: 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
c390: 5a 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f Z:.. ParseWkbPo
c3a0: 69 6e 74 5a 20 28 67 65 6f 29 3b 0a 09 20 20 62 intZ (geo);.. b
c3b0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
c3c0: 20 47 41 49 41 5f 50 4f 49 4e 54 4d 3a 0a 09 20 GAIA_POINTM:..
c3d0: 20 50 61 72 73 65 57 6b 62 50 6f 69 6e 74 4d 20 ParseWkbPointM
c3e0: 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b (geo);.. break;
c3f0: 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
c400: 5f 50 4f 49 4e 54 5a 4d 3a 0a 09 20 20 50 61 72 _POINTZM:.. Par
c410: 73 65 57 6b 62 50 6f 69 6e 74 5a 4d 20 28 67 65 seWkbPointZM (ge
c420: 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 o);.. break;.
c430: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 case GAIA_LI
c440: 4e 45 53 54 52 49 4e 47 3a 0a 09 20 20 50 61 72 NESTRING:.. Par
c450: 73 65 57 6b 62 4c 69 6e 65 20 28 67 65 6f 29 3b seWkbLine (geo);
c460: 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
c470: 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 case GAIA_LINES
c480: 54 52 49 4e 47 5a 3a 0a 09 20 20 50 61 72 73 65 TRINGZ:.. Parse
c490: 57 6b 62 4c 69 6e 65 5a 20 28 67 65 6f 29 3b 0a WkbLineZ (geo);.
c4a0: 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
c4b0: 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 case GAIA_LINEST
c4c0: 52 49 4e 47 4d 3a 0a 09 20 20 50 61 72 73 65 57 RINGM:.. ParseW
c4d0: 6b 62 4c 69 6e 65 4d 20 28 67 65 6f 29 3b 0a 09 kbLineM (geo);..
c4e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
c4f0: 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 ase GAIA_LINESTR
c500: 49 4e 47 5a 4d 3a 0a 09 20 20 50 61 72 73 65 57 INGZM:.. ParseW
c510: 6b 62 4c 69 6e 65 5a 4d 20 28 67 65 6f 29 3b 0a kbLineZM (geo);.
c520: 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
c530: 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f case GAIA_POLYGO
c540: 4e 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f N:.. ParseWkbPo
c550: 6c 79 67 6f 6e 20 28 67 65 6f 29 3b 0a 09 20 20 lygon (geo);..
c560: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
c570: 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3a e GAIA_POLYGONZ:
c580: 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 .. ParseWkbPoly
c590: 67 6f 6e 5a 20 28 67 65 6f 29 3b 0a 09 20 20 62 gonZ (geo);.. b
c5a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
c5b0: 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a GAIA_POLYGONM:.
c5c0: 09 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 . ParseWkbPolyg
c5d0: 6f 6e 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 onM (geo);.. br
c5e0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
c5f0: 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a GAIA_POLYGONZM:.
c600: 09 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 . ParseWkbPolyg
c610: 6f 6e 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 onZM (geo);.. b
c620: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
c630: 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
c640: 5f 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 20 20 _LINESTRING:..
c650: 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 57 ParseCompressedW
c660: 6b 62 4c 69 6e 65 20 28 67 65 6f 29 3b 0a 09 20 kbLine (geo);..
c670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
c680: 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 se GAIA_COMPRESS
c690: 45 44 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a ED_LINESTRINGZ:.
c6a0: 09 20 20 50 61 72 73 65 43 6f 6d 70 72 65 73 73 . ParseCompress
c6b0: 65 64 57 6b 62 4c 69 6e 65 5a 20 28 67 65 6f 29 edWkbLineZ (geo)
c6c0: 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
c6d0: 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 case GAIA_COMP
c6e0: 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 52 49 4e RESSED_LINESTRIN
c6f0: 47 4d 3a 0a 09 20 20 50 61 72 73 65 43 6f 6d 70 GM:.. ParseComp
c700: 72 65 73 73 65 64 57 6b 62 4c 69 6e 65 4d 20 28 ressedWkbLineM (
c710: 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b 0a geo);.. break;.
c720: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
c730: 43 4f 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 COMPRESSED_LINES
c740: 54 52 49 4e 47 5a 4d 3a 0a 09 20 20 50 61 72 73 TRINGZM:.. Pars
c750: 65 43 6f 6d 70 72 65 73 73 65 64 57 6b 62 4c 69 eCompressedWkbLi
c760: 6e 65 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 neZM (geo);.. b
c770: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
c780: 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
c790: 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 50 61 72 _POLYGON:.. Par
c7a0: 73 65 43 6f 6d 70 72 65 73 73 65 64 57 6b 62 50 seCompressedWkbP
c7b0: 6f 6c 79 67 6f 6e 20 28 67 65 6f 29 3b 0a 09 20 olygon (geo);..
c7c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
c7d0: 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 se GAIA_COMPRESS
c7e0: 45 44 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 ED_POLYGONZ:..
c7f0: 50 61 72 73 65 43 6f 6d 70 72 65 73 73 65 64 57 ParseCompressedW
c800: 6b 62 50 6f 6c 79 67 6f 6e 5a 20 28 67 65 6f 29 kbPolygonZ (geo)
c810: 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
c820: 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 case GAIA_COMP
c830: 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 4d 3a RESSED_POLYGONM:
c840: 0a 09 20 20 50 61 72 73 65 43 6f 6d 70 72 65 73 .. ParseCompres
c850: 73 65 64 57 6b 62 50 6f 6c 79 67 6f 6e 4d 20 28 sedWkbPolygonM (
c860: 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b 0a geo);.. break;.
c870: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
c880: 43 4f 4d 50 52 45 53 53 45 44 5f 50 4f 4c 59 47 COMPRESSED_POLYG
c890: 4f 4e 5a 4d 3a 0a 09 20 20 50 61 72 73 65 43 6f ONZM:.. ParseCo
c8a0: 6d 70 72 65 73 73 65 64 57 6b 62 50 6f 6c 79 67 mpressedWkbPolyg
c8b0: 6f 6e 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 onZM (geo);.. b
c8c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
c8d0: 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 GAIA_MULTIPOINT
c8e0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
c8f0: 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 3a 0a 20 A_MULTIPOINTZ:.
c900: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
c910: 55 4c 54 49 50 4f 49 4e 54 4d 3a 0a 20 20 20 20 ULTIPOINTM:.
c920: 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 case GAIA_MULT
c930: 49 50 4f 49 4e 54 5a 4d 3a 0a 20 20 20 20 20 20 IPOINTZM:.
c940: 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c case GAIA_MULTIL
c950: 49 4e 45 53 54 52 49 4e 47 3a 0a 20 20 20 20 20 INESTRING:.
c960: 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 case GAIA_MULTI
c970: 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 20 20 20 LINESTRINGZ:.
c980: 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c case GAIA_MUL
c990: 54 49 4c 49 4e 45 53 54 52 49 4e 47 4d 3a 0a 20 TILINESTRINGM:.
c9a0: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
c9b0: 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 4d ULTILINESTRINGZM
c9c0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
c9d0: 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a A_MULTIPOLYGON:.
c9e0: 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
c9f0: 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 MULTIPOLYGONZ:.
ca00: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
ca10: 55 4c 54 49 50 4f 4c 59 47 4f 4e 4d 3a 0a 20 20 ULTIPOLYGONM:.
ca20: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 case GAIA_MU
ca30: 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 20 20 LTIPOLYGONZM:.
ca40: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 case GAIA_GE
ca50: 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
ca60: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
ca70: 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
ca80: 54 49 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 73 TIONZ:. cas
ca90: 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 e GAIA_GEOMETRYC
caa0: 4f 4c 4c 45 43 54 49 4f 4e 4d 3a 0a 20 20 20 20 OLLECTIONM:.
cab0: 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f 4d case GAIA_GEOM
cac0: 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d ETRYCOLLECTIONZM
cad0: 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 47 65 6f :.. ParseWkbGeo
cae0: 6d 65 74 72 79 20 28 67 65 6f 2c 20 30 29 3b 0a metry (geo, 0);.
caf0: 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
cb00: 64 65 66 61 75 6c 74 3a 0a 09 20 20 62 72 65 61 default:.. brea
cb10: 6b 3b 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 k;. };.
cb20: 67 65 6f 2d 3e 4d 69 6e 58 20 3d 20 67 61 69 61 geo->MinX = gaia
cb30: 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b Import64 (blob +
cb40: 20 36 2c 20 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6, little_endia
cb50: 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b n, endian_arch);
cb60: 0a 20 20 20 20 67 65 6f 2d 3e 4d 69 6e 59 20 3d . geo->MinY =
cb70: 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 62 gaiaImport64 (b
cb80: 6c 6f 62 20 2b 20 31 34 2c 20 6c 69 74 74 6c 65 lob + 14, little
cb90: 5f 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f _endian, endian_
cba0: 61 72 63 68 29 3b 0a 20 20 20 20 67 65 6f 2d 3e arch);. geo->
cbb0: 4d 61 78 58 20 3d 20 67 61 69 61 49 6d 70 6f 72 MaxX = gaiaImpor
cbc0: 74 36 34 20 28 62 6c 6f 62 20 2b 20 32 32 2c 20 t64 (blob + 22,
cbd0: 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 little_endian, e
cbe0: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
cbf0: 20 67 65 6f 2d 3e 4d 61 78 59 20 3d 20 67 61 69 geo->MaxY = gai
cc00: 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 aImport64 (blob
cc10: 2b 20 33 30 2c 20 6c 69 74 74 6c 65 5f 65 6e 64 + 30, little_end
cc20: 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 ian, endian_arch
cc30: 29 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28 74 );. switch (t
cc40: 79 70 65 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 ype). {..
cc50: 2f 2a 20 73 65 74 74 69 6e 67 20 75 70 20 44 65 /* setting up De
cc60: 63 6c 61 72 65 64 54 79 70 65 20 2a 2f 0a 20 20 claredType */.
cc70: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f case GAIA_PO
cc80: 49 4e 54 3a 0a 20 20 20 20 20 20 63 61 73 65 20 INT:. case
cc90: 47 41 49 41 5f 50 4f 49 4e 54 5a 3a 0a 20 20 20 GAIA_POINTZ:.
cca0: 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 case GAIA_POI
ccb0: 4e 54 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 20 NTM:. case
ccc0: 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 3a 0a 09 20 GAIA_POINTZM:..
ccd0: 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 geo->DeclaredTy
cce0: 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 3b pe = GAIA_POINT;
ccf0: 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
cd00: 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 case GAIA_LINES
cd10: 54 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61 73 TRING:. cas
cd20: 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e e GAIA_LINESTRIN
cd30: 47 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 GZ:. case G
cd40: 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 3a AIA_LINESTRINGM:
cd50: 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
cd60: 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 20 _LINESTRINGZM:.
cd70: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 43 case GAIA_C
cd80: 4f 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 OMPRESSED_LINEST
cd90: 52 49 4e 47 3a 0a 20 20 20 20 20 20 63 61 73 65 RING:. case
cda0: 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
cdb0: 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 20 20 _LINESTRINGZ:.
cdc0: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f case GAIA_CO
cdd0: 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 52 MPRESSED_LINESTR
cde0: 49 4e 47 4d 3a 0a 20 20 20 20 20 20 63 61 73 65 INGM:. case
cdf0: 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
ce00: 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 09 _LINESTRINGZM:..
ce10: 20 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 geo->DeclaredT
ce20: 79 70 65 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 ype = GAIA_LINES
ce30: 54 52 49 4e 47 3b 0a 09 20 20 62 72 65 61 6b 3b TRING;.. break;
ce40: 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
ce50: 5f 50 4f 4c 59 47 4f 4e 3a 0a 20 20 20 20 20 20 _POLYGON:.
ce60: 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f case GAIA_POLYGO
ce70: 4e 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 NZ:. case G
ce80: 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a 20 20 AIA_POLYGONM:.
ce90: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f case GAIA_PO
cea0: 4c 59 47 4f 4e 5a 4d 3a 0a 20 20 20 20 20 20 63 LYGONZM:. c
ceb0: 61 73 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 ase GAIA_COMPRES
cec0: 53 45 44 5f 50 4f 4c 59 47 4f 4e 3a 0a 20 20 20 SED_POLYGON:.
ced0: 20 20 20 63 61 73 65 20 47 41 49 41 5f 43 4f 4d case GAIA_COM
cee0: 50 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 5a PRESSED_POLYGONZ
cef0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
cf00: 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f 50 4f 4c A_COMPRESSED_POL
cf10: 59 47 4f 4e 4d 3a 0a 20 20 20 20 20 20 63 61 73 YGONM:. cas
cf20: 65 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 e GAIA_COMPRESSE
cf30: 44 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 D_POLYGONZM:..
cf40: 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 geo->DeclaredTyp
cf50: 65 20 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e e = GAIA_POLYGON
cf60: 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
cf70: 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 case GAIA_MULT
cf80: 49 50 4f 49 4e 54 3a 0a 20 20 20 20 20 20 63 61 IPOINT:. ca
cf90: 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 se GAIA_MULTIPOI
cfa0: 4e 54 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 NTZ:. case
cfb0: 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d GAIA_MULTIPOINTM
cfc0: 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
cfd0: 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 3a 0a A_MULTIPOINTZM:.
cfe0: 09 20 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 . geo->Declared
cff0: 54 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 Type = GAIA_MULT
d000: 49 50 4f 49 4e 54 3b 0a 09 20 20 62 72 65 61 6b IPOINT;.. break
d010: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
d020: 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e A_MULTILINESTRIN
d030: 47 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 G:. case GA
d040: 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 IA_MULTILINESTRI
d050: 4e 47 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 NGZ:. case
d060: 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
d070: 52 49 4e 47 4d 3a 0a 20 20 20 20 20 20 63 61 73 RINGM:. cas
d080: 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 e GAIA_MULTILINE
d090: 53 54 52 49 4e 47 5a 4d 3a 0a 09 20 20 67 65 6f STRINGZM:.. geo
d0a0: 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d ->DeclaredType =
d0b0: 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
d0c0: 54 52 49 4e 47 3b 0a 09 20 20 62 72 65 61 6b 3b TRING;.. break;
d0d0: 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
d0e0: 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a 20 _MULTIPOLYGON:.
d0f0: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
d100: 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 ULTIPOLYGONZ:.
d110: 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 case GAIA_MU
d120: 4c 54 49 50 4f 4c 59 47 4f 4e 4d 3a 0a 20 20 20 LTIPOLYGONM:.
d130: 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c case GAIA_MUL
d140: 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 TIPOLYGONZM:..
d150: 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 geo->DeclaredTyp
d160: 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
d170: 4c 59 47 4f 4e 3b 0a 09 20 20 62 72 65 61 6b 3b LYGON;.. break;
d180: 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
d190: 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
d1a0: 49 4f 4e 3a 0a 20 20 20 20 20 20 63 61 73 65 20 ION:. case
d1b0: 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
d1c0: 4c 45 43 54 49 4f 4e 5a 3a 0a 20 20 20 20 20 20 LECTIONZ:.
d1d0: 63 61 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 case GAIA_GEOMET
d1e0: 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3a 0a 20 RYCOLLECTIONM:.
d1f0: 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 case GAIA_G
d200: 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
d210: 4e 5a 4d 3a 0a 09 20 20 67 65 6f 2d 3e 44 65 63 NZM:.. geo->Dec
d220: 6c 61 72 65 64 54 79 70 65 20 3d 20 47 41 49 41 laredType = GAIA
d230: 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
d240: 49 4f 4e 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 ION;.. break;.
d250: 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 default:..
d260: 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 geo->DeclaredTy
d270: 70 65 20 3d 20 47 41 49 41 5f 55 4e 4b 4e 4f 57 pe = GAIA_UNKNOW
d280: 4e 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 N;.. break;.
d290: 20 20 20 7d 3b 0a 20 20 20 20 72 65 74 75 72 6e };. return
d2a0: 20 67 65 6f 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f geo;.}..GAIAGEO
d2b0: 5f 44 45 43 4c 41 52 45 20 67 61 69 61 47 65 6f _DECLARE gaiaGeo
d2c0: 6d 43 6f 6c 6c 50 74 72 0a 67 61 69 61 46 72 6f mCollPtr.gaiaFro
d2d0: 6d 53 70 61 74 69 61 4c 69 74 65 42 6c 6f 62 57 mSpatiaLiteBlobW
d2e0: 6b 62 20 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e kb (const unsign
d2f0: 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 2c 20 75 ed char *blob, u
d300: 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 69 7a 65 nsigned int size
d310: 29 0a 7b 0a 2f 2a 20 0a 2a 20 64 65 63 6f 64 69 ).{./* .* decodi
d320: 6e 67 20 66 72 6f 6d 20 53 70 61 74 69 61 4c 69 ng from SpatiaLi
d330: 74 65 20 42 4c 4f 42 20 74 6f 20 47 45 4f 4d 45 te BLOB to GEOME
d340: 54 52 59 20 0a 2a 20 63 6f 6e 76 65 6e 69 65 6e TRY .* convenien
d350: 63 65 20 6d 65 74 68 6f 64 20 2d 20 61 6c 77 61 ce method - alwa
d360: 79 73 20 64 69 73 61 62 6c 69 6e 67 20 47 50 4b ys disabling GPK
d370: 47 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 G compatibility
d380: 4d 6f 64 65 73 0a 2a 2f 0a 20 20 20 20 72 65 74 Modes.*/. ret
d390: 75 72 6e 20 67 61 69 61 46 72 6f 6d 53 70 61 74 urn gaiaFromSpat
d3a0: 69 61 4c 69 74 65 42 6c 6f 62 57 6b 62 45 78 20 iaLiteBlobWkbEx
d3b0: 28 62 6c 6f 62 2c 20 73 69 7a 65 2c 20 30 2c 20 (blob, size, 0,
d3c0: 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 67 61 0);.}..static ga
d3d0: 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 0a 64 6f iaGeomCollPtr.do
d3e0: 50 61 72 73 65 54 69 6e 79 50 6f 69 6e 74 42 6c ParseTinyPointBl
d3f0: 6f 62 4d 62 72 20 28 63 6f 6e 73 74 20 75 6e 73 obMbr (const uns
d400: 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 igned char *blob
d410: 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 , unsigned int s
d420: 69 7a 65 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 ize).{./* decodi
d430: 6e 67 20 66 72 6f 6d 20 53 70 61 74 69 61 4c 69 ng from SpatiaLi
d440: 74 65 20 54 69 6e 79 50 6f 69 6e 74 20 42 4c 4f te TinyPoint BLO
d450: 42 20 28 4d 42 52 20 6f 6e 6c 79 29 20 2a 2f 0a B (MBR only) */.
d460: 20 20 20 20 69 6e 74 20 6c 69 74 74 6c 65 5f 65 int little_e
d470: 6e 64 69 61 6e 3b 0a 20 20 20 20 69 6e 74 20 65 ndian;. int e
d480: 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 67 61 69 ndian_arch = gai
d490: 61 45 6e 64 69 61 6e 41 72 63 68 20 28 29 3b 0a aEndianArch ();.
d4a0: 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
d4b0: 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
d4c0: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
d4d0: 67 65 6f 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 geo = NULL;.
d4e0: 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 gaiaPolygonPtr p
d4f0: 6f 6c 79 67 3b 0a 20 20 20 20 67 61 69 61 52 69 olyg;. gaiaRi
d500: 6e 67 50 74 72 20 72 69 6e 67 3b 0a 0a 20 20 20 ngPtr ring;..
d510: 20 69 66 20 28 73 69 7a 65 20 3c 20 32 34 29 0a if (size < 24).
d520: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 09 09 2f .return NULL;../
d530: 2a 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 20 69 * cannot be an i
d540: 6e 74 65 72 6e 61 6c 20 42 4c 4f 42 20 54 69 6e nternal BLOB Tin
d550: 79 50 6f 69 6e 74 20 67 65 6f 6d 65 74 72 79 20 yPoint geometry
d560: 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c 6f */. if (*(blo
d570: 62 20 2b 20 30 29 20 21 3d 20 47 41 49 41 5f 4d b + 0) != GAIA_M
d580: 41 52 4b 5f 53 54 41 52 54 29 0a 09 72 65 74 75 ARK_START)..retu
d590: 72 6e 20 4e 55 4c 4c 3b 09 09 2f 2a 20 66 61 69 rn NULL;../* fai
d5a0: 6c 65 64 20 74 6f 20 72 65 63 6f 67 6e 69 7a 65 led to recognize
d5b0: 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 START signature
d5c0: 20 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c */. if (*(bl
d5d0: 6f 62 20 2b 20 28 73 69 7a 65 20 2d 20 31 29 29 ob + (size - 1))
d5e0: 20 21 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e != GAIA_MARK_EN
d5f0: 44 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b D)..return NULL;
d600: 09 09 2f 2a 20 66 61 69 6c 65 64 20 74 6f 20 72 ../* failed to r
d610: 65 63 6f 67 6e 69 7a 65 20 45 4e 44 20 73 69 67 ecognize END sig
d620: 6e 61 74 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 nature */. if
d630: 20 28 2a 28 62 6c 6f 62 20 2b 20 31 29 20 3d 3d (*(blob + 1) ==
d640: 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 5f GAIA_TINYPOINT_
d650: 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 29 0a 09 LITTLE_ENDIAN)..
d660: 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 20 3d 20 little_endian =
d670: 31 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 1;. else if (
d680: 2a 28 62 6c 6f 62 20 2b 20 31 29 20 3d 3d 20 47 *(blob + 1) == G
d690: 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 5f 42 49 AIA_TINYPOINT_BI
d6a0: 47 5f 45 4e 44 49 41 4e 29 0a 09 6c 69 74 74 6c G_ENDIAN)..littl
d6b0: 65 5f 65 6e 64 69 61 6e 20 3d 20 30 3b 0a 20 20 e_endian = 0;.
d6c0: 20 20 65 6c 73 65 0a 09 72 65 74 75 72 6e 20 4e else..return N
d6d0: 55 4c 4c 3b 09 09 2f 2a 20 75 6e 6b 6e 6f 77 6e ULL;../* unknown
d6e0: 20 65 6e 63 6f 64 69 6e 67 3b 20 6e 6f 72 20 6c encoding; nor l
d6f0: 69 74 74 6c 65 2d 65 6e 64 69 61 6e 20 6e 65 69 ittle-endian nei
d700: 74 68 65 72 20 62 69 67 2d 65 6e 64 69 61 6e 20 ther big-endian
d710: 2a 2f 0a 0a 20 20 20 20 78 20 3d 20 67 61 69 61 */.. x = gaia
d720: 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b Import64 (blob +
d730: 20 37 2c 20 6c 69 74 74 6c 65 5f 65 6e 64 69 61 7, little_endia
d740: 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b n, endian_arch);
d750: 0a 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d 70 . y = gaiaImp
d760: 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b 20 31 35 ort64 (blob + 15
d770: 2c 20 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 2c , little_endian,
d780: 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 0a endian_arch);..
d790: 20 20 20 20 67 65 6f 20 3d 20 67 61 69 61 41 6c geo = gaiaAl
d7a0: 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 20 28 29 3b 0a locGeomColl ();.
d7b0: 20 20 20 20 70 6f 6c 79 67 20 3d 20 67 61 69 61 polyg = gaia
d7c0: 41 64 64 50 6f 6c 79 67 6f 6e 54 6f 47 65 6f 6d AddPolygonToGeom
d7d0: 43 6f 6c 6c 20 28 67 65 6f 2c 20 35 2c 20 30 29 Coll (geo, 5, 0)
d7e0: 3b 0a 20 20 20 20 72 69 6e 67 20 3d 20 70 6f 6c ;. ring = pol
d7f0: 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 20 20 yg->Exterior;.
d800: 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 20 28 gaiaSetPoint (
d810: 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 30 2c ring->Coords, 0,
d820: 20 78 2c 20 79 29 3b 09 2f 2a 20 76 65 72 74 65 x, y);./* verte
d830: 78 20 23 20 31 20 2a 2f 0a 20 20 20 20 67 61 69 x # 1 */. gai
d840: 61 53 65 74 50 6f 69 6e 74 20 28 72 69 6e 67 2d aSetPoint (ring-
d850: 3e 43 6f 6f 72 64 73 2c 20 31 2c 20 78 2c 20 79 >Coords, 1, x, y
d860: 29 3b 09 2f 2a 20 76 65 72 74 65 78 20 23 20 32 );./* vertex # 2
d870: 20 2a 2f 0a 20 20 20 20 67 61 69 61 53 65 74 50 */. gaiaSetP
d880: 6f 69 6e 74 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 oint (ring->Coor
d890: 64 73 2c 20 32 2c 20 78 2c 20 79 29 3b 09 2f 2a ds, 2, x, y);./*
d8a0: 20 76 65 72 74 65 78 20 23 20 33 20 2a 2f 0a 20 vertex # 3 */.
d8b0: 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 20 gaiaSetPoint
d8c0: 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 33 (ring->Coords, 3
d8d0: 2c 20 78 2c 20 79 29 3b 09 2f 2a 20 76 65 72 74 , x, y);./* vert
d8e0: 65 78 20 23 20 34 20 2a 2f 0a 20 20 20 20 67 61 ex # 4 */. ga
d8f0: 69 61 53 65 74 50 6f 69 6e 74 20 28 72 69 6e 67 iaSetPoint (ring
d900: 2d 3e 43 6f 6f 72 64 73 2c 20 34 2c 20 78 2c 20 ->Coords, 4, x,
d910: 79 29 3b 09 2f 2a 20 76 65 72 74 65 78 20 23 20 y);./* vertex #
d920: 35 20 5b 73 61 6d 65 20 61 73 20 76 65 72 74 65 5 [same as verte
d930: 78 20 23 20 31 20 74 6f 20 63 6c 6f 73 65 20 74 x # 1 to close t
d940: 68 65 20 70 6f 6c 79 67 6f 6e 5d 20 2a 2f 0a 20 he polygon] */.
d950: 20 20 20 72 65 74 75 72 6e 20 67 65 6f 3b 0a 7d return geo;.}
d960: 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 ..GAIAGEO_DECLAR
d970: 45 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 E gaiaGeomCollPt
d980: 72 0a 67 61 69 61 46 72 6f 6d 53 70 61 74 69 61 r.gaiaFromSpatia
d990: 4c 69 74 65 42 6c 6f 62 4d 62 72 20 28 63 6f 6e LiteBlobMbr (con
d9a0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 st unsigned char
d9b0: 20 2a 62 6c 6f 62 2c 20 75 6e 73 69 67 6e 65 64 *blob, unsigned
d9c0: 20 69 6e 74 20 73 69 7a 65 29 0a 7b 0a 2f 2a 20 int size).{./*
d9d0: 64 65 63 6f 64 69 6e 67 20 66 72 6f 6d 20 53 70 decoding from Sp
d9e0: 61 74 69 61 4c 69 74 65 20 42 4c 4f 42 20 74 6f atiaLite BLOB to
d9f0: 20 47 45 4f 4d 45 54 52 59 20 5b 4d 42 52 20 6f GEOMETRY [MBR o
da00: 6e 6c 79 5d 20 2a 2f 0a 20 20 20 20 69 6e 74 20 nly] */. int
da10: 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 3b 0a 20 little_endian;.
da20: 20 20 20 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 int endian_ar
da30: 63 68 20 3d 20 67 61 69 61 45 6e 64 69 61 6e 41 ch = gaiaEndianA
da40: 72 63 68 20 28 29 3b 0a 20 20 20 20 64 6f 75 62 rch ();. doub
da50: 6c 65 20 6d 69 6e 78 3b 0a 20 20 20 20 64 6f 75 le minx;. dou
da60: 62 6c 65 20 6d 69 6e 79 3b 0a 20 20 20 20 64 6f ble miny;. do
da70: 75 62 6c 65 20 6d 61 78 78 3b 0a 20 20 20 20 64 uble maxx;. d
da80: 6f 75 62 6c 65 20 6d 61 78 79 3b 0a 20 20 20 20 ouble maxy;.
da90: 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 gaiaGeomCollPtr
daa0: 67 65 6f 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 geo = NULL;.
dab0: 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 gaiaPolygonPtr p
dac0: 6f 6c 79 67 3b 0a 20 20 20 20 67 61 69 61 52 69 olyg;. gaiaRi
dad0: 6e 67 50 74 72 20 72 69 6e 67 3b 0a 0a 20 20 20 ngPtr ring;..
dae0: 20 69 66 20 28 73 69 7a 65 20 3d 3d 20 32 34 20 if (size == 24
daf0: 7c 7c 20 73 69 7a 65 20 3d 3d 20 33 32 20 7c 7c || size == 32 ||
db00: 20 73 69 7a 65 20 3d 3d 20 34 30 29 0a 20 20 20 size == 40).
db10: 20 20 20 7b 0a 09 20 20 2f 2a 20 74 65 73 74 69 {.. /* testi
db20: 6e 67 20 66 6f 72 20 61 20 70 6f 73 73 69 62 6c ng for a possibl
db30: 65 20 54 69 6e 79 50 6f 69 6e 74 20 42 4c 4f 42 e TinyPoint BLOB
db40: 20 2a 2f 0a 09 20 20 69 66 20 28 2a 28 62 6c 6f */.. if (*(blo
db50: 62 20 2b 20 30 29 20 3d 3d 20 47 41 49 41 5f 4d b + 0) == GAIA_M
db60: 41 52 4b 5f 53 54 41 52 54 20 26 26 0a 09 20 20 ARK_START &&..
db70: 20 20 20 20 28 2a 28 62 6c 6f 62 20 2b 20 31 29 (*(blob + 1)
db80: 20 3d 3d 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 == GAIA_TINYPOI
db90: 4e 54 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e NT_LITTLE_ENDIAN
dba0: 0a 09 20 20 20 20 20 20 20 7c 7c 20 2a 28 62 6c .. || *(bl
dbb0: 6f 62 20 2b 20 31 29 20 3d 3d 20 47 41 49 41 5f ob + 1) == GAIA_
dbc0: 54 49 4e 59 50 4f 49 4e 54 5f 42 49 47 5f 45 4e TINYPOINT_BIG_EN
dbd0: 44 49 41 4e 29 0a 09 20 20 20 20 20 20 26 26 20 DIAN).. &&
dbe0: 2a 28 62 6c 6f 62 20 2b 20 28 73 69 7a 65 20 2d *(blob + (size -
dbf0: 20 31 29 29 20 3d 3d 20 47 41 49 41 5f 4d 41 52 1)) == GAIA_MAR
dc00: 4b 5f 45 4e 44 29 0a 09 20 20 20 20 20 20 72 65 K_END).. re
dc10: 74 75 72 6e 20 64 6f 50 61 72 73 65 54 69 6e 79 turn doParseTiny
dc20: 50 6f 69 6e 74 42 6c 6f 62 4d 62 72 20 28 62 6c PointBlobMbr (bl
dc30: 6f 62 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 20 ob, size);.
dc40: 20 7d 0a 20 20 20 20 69 66 20 28 73 69 7a 65 20 }. if (size
dc50: 3c 20 34 35 29 0a 09 72 65 74 75 72 6e 20 4e 55 < 45)..return NU
dc60: 4c 4c 3b 09 09 2f 2a 20 63 61 6e 6e 6f 74 20 62 LL;../* cannot b
dc70: 65 20 61 6e 20 69 6e 74 65 72 6e 61 6c 20 42 4c e an internal BL
dc80: 4f 42 20 57 4b 42 20 67 65 6f 6d 65 74 72 79 20 OB WKB geometry
dc90: 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c 6f */. if (*(blo
dca0: 62 20 2b 20 30 29 20 21 3d 20 47 41 49 41 5f 4d b + 0) != GAIA_M
dcb0: 41 52 4b 5f 53 54 41 52 54 29 0a 09 72 65 74 75 ARK_START)..retu
dcc0: 72 6e 20 4e 55 4c 4c 3b 09 09 2f 2a 20 66 61 69 rn NULL;../* fai
dcd0: 6c 65 64 20 74 6f 20 72 65 63 6f 67 6e 69 7a 65 led to recognize
dce0: 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 START signature
dcf0: 20 2a 2f 0a 20 20 20 20 69 66 20 28 2a 28 62 6c */. if (*(bl
dd00: 6f 62 20 2b 20 28 73 69 7a 65 20 2d 20 31 29 29 ob + (size - 1))
dd10: 20 21 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e != GAIA_MARK_EN
dd20: 44 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b D)..return NULL;
dd30: 09 09 2f 2a 20 66 61 69 6c 65 64 20 74 6f 20 72 ../* failed to r
dd40: 65 63 6f 67 6e 69 7a 65 20 45 4e 44 20 73 69 67 ecognize END sig
dd50: 6e 61 74 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 nature */. if
dd60: 20 28 2a 28 62 6c 6f 62 20 2b 20 33 38 29 20 21 (*(blob + 38) !
dd70: 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 29 = GAIA_MARK_MBR)
dd80: 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 09 09 ..return NULL;..
dd90: 2f 2a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 63 /* failed to rec
dda0: 6f 67 6e 69 7a 65 20 4d 42 52 20 73 69 67 6e 61 ognize MBR signa
ddb0: 74 75 72 65 20 2a 2f 0a 20 20 20 20 69 66 20 28 ture */. if (
ddc0: 2a 28 62 6c 6f 62 20 2b 20 31 29 20 3d 3d 20 47 *(blob + 1) == G
ddd0: 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
dde0: 4e 29 0a 09 6c 69 74 74 6c 65 5f 65 6e 64 69 61 N)..little_endia
ddf0: 6e 20 3d 20 31 3b 0a 20 20 20 20 65 6c 73 65 20 n = 1;. else
de00: 69 66 20 28 2a 28 62 6c 6f 62 20 2b 20 31 29 20 if (*(blob + 1)
de10: 3d 3d 20 47 41 49 41 5f 42 49 47 5f 45 4e 44 49 == GAIA_BIG_ENDI
de20: 41 4e 29 0a 09 6c 69 74 74 6c 65 5f 65 6e 64 69 AN)..little_endi
de30: 61 6e 20 3d 20 30 3b 0a 20 20 20 20 65 6c 73 65 an = 0;. else
de40: 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 09 09 ..return NULL;..
de50: 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 65 6e 63 6f 64 /* unknown encod
de60: 69 6e 67 3b 20 6e 6f 72 20 6c 69 74 74 65 2d 65 ing; nor litte-e
de70: 6e 64 69 61 6e 20 6e 65 69 74 68 65 72 20 62 69 ndian neither bi
de80: 67 2d 65 6e 64 69 61 6e 20 2a 2f 0a 20 20 20 20 g-endian */.
de90: 67 65 6f 20 3d 20 67 61 69 61 41 6c 6c 6f 63 47 geo = gaiaAllocG
dea0: 65 6f 6d 43 6f 6c 6c 20 28 29 3b 0a 20 20 20 20 eomColl ();.
deb0: 70 6f 6c 79 67 20 3d 20 67 61 69 61 41 64 64 50 polyg = gaiaAddP
dec0: 6f 6c 79 67 6f 6e 54 6f 47 65 6f 6d 43 6f 6c 6c olygonToGeomColl
ded0: 20 28 67 65 6f 2c 20 35 2c 20 30 29 3b 0a 20 20 (geo, 5, 0);.
dee0: 20 20 72 69 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e ring = polyg->
def0: 45 78 74 65 72 69 6f 72 3b 0a 20 20 20 20 6d 69 Exterior;. mi
df00: 6e 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 nx = gaiaImport6
df10: 34 20 28 62 6c 6f 62 20 2b 20 36 2c 20 6c 69 74 4 (blob + 6, lit
df20: 74 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 6e 64 69 tle_endian, endi
df30: 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 6d 69 an_arch);. mi
df40: 6e 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 ny = gaiaImport6
df50: 34 20 28 62 6c 6f 62 20 2b 20 31 34 2c 20 6c 69 4 (blob + 14, li
df60: 74 74 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 6e 64 ttle_endian, end
df70: 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 6d ian_arch);. m
df80: 61 78 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 axx = gaiaImport
df90: 36 34 20 28 62 6c 6f 62 20 2b 20 32 32 2c 20 6c 64 (blob + 22, l
dfa0: 69 74 74 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 6e ittle_endian, en
dfb0: 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
dfc0: 6d 61 78 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 maxy = gaiaImpor
dfd0: 74 36 34 20 28 62 6c 6f 62 20 2b 20 33 30 2c 20 t64 (blob + 30,
dfe0: 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 2c 20 65 little_endian, e
dff0: 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
e000: 20 67 61 69 61 53 65 74 50 6f 69 6e 74 20 28 72 gaiaSetPoint (r
e010: 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 30 2c 20 ing->Coords, 0,
e020: 6d 69 6e 78 2c 20 6d 69 6e 79 29 3b 09 2f 2a 20 minx, miny);./*
e030: 76 65 72 74 65 78 20 23 20 31 20 2a 2f 0a 20 20 vertex # 1 */.
e040: 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 20 28 gaiaSetPoint (
e050: 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 31 2c ring->Coords, 1,
e060: 20 6d 61 78 78 2c 20 6d 69 6e 79 29 3b 09 2f 2a maxx, miny);./*
e070: 20 76 65 72 74 65 78 20 23 20 32 20 2a 2f 0a 20 vertex # 2 */.
e080: 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 20 gaiaSetPoint
e090: 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 32 (ring->Coords, 2
e0a0: 2c 20 6d 61 78 78 2c 20 6d 61 78 79 29 3b 09 2f , maxx, maxy);./
e0b0: 2a 20 76 65 72 74 65 78 20 23 20 33 20 2a 2f 0a * vertex # 3 */.
e0c0: 20 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 gaiaSetPoint
e0d0: 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 (ring->Coords,
e0e0: 33 2c 20 6d 69 6e 78 2c 20 6d 61 78 79 29 3b 09 3, minx, maxy);.
e0f0: 2f 2a 20 76 65 72 74 65 78 20 23 20 34 20 2a 2f /* vertex # 4 */
e100: 0a 20 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e . gaiaSetPoin
e110: 74 20 28 72 69 6e 67 2d 3e 43 6f 6f 72 64 73 2c t (ring->Coords,
e120: 20 34 2c 20 6d 69 6e 78 2c 20 6d 69 6e 79 29 3b 4, minx, miny);
e130: 09 2f 2a 20 76 65 72 74 65 78 20 23 20 35 20 5b ./* vertex # 5 [
e140: 73 61 6d 65 20 61 73 20 76 65 72 74 65 78 20 23 same as vertex #
e150: 20 31 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 1 to close the
e160: 70 6f 6c 79 67 6f 6e 5d 20 2a 2f 0a 20 20 20 20 polygon] */.
e170: 72 65 74 75 72 6e 20 67 65 6f 3b 0a 7d 0a 0a 47 return geo;.}..G
e180: 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 45 20 76 AIAGEO_DECLARE v
e190: 6f 69 64 0a 67 61 69 61 54 6f 53 70 61 74 69 61 oid.gaiaToSpatia
e1a0: 4c 69 74 65 42 6c 6f 62 57 6b 62 45 78 20 28 67 LiteBlobWkbEx (g
e1b0: 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 aiaGeomCollPtr g
e1c0: 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 eom, unsigned ch
e1d0: 61 72 20 2a 2a 72 65 73 75 6c 74 2c 0a 09 09 09 ar **result,....
e1e0: 20 20 20 69 6e 74 20 2a 73 69 7a 65 2c 20 69 6e int *size, in
e1f0: 74 20 67 70 6b 67 5f 6d 6f 64 65 29 0a 7b 0a 2f t gpkg_mode).{./
e200: 2a 20 73 69 6d 70 6c 79 20 64 65 66 61 75 6c 74 * simply default
e210: 73 20 74 6f 20 67 61 69 61 54 6f 53 70 61 74 69 s to gaiaToSpati
e220: 61 4c 69 74 65 42 6c 6f 62 57 6b 62 45 78 32 20 aLiteBlobWkbEx2
e230: 74 69 6e 79 5f 70 6f 69 6e 74 3d 46 41 4c 53 45 tiny_point=FALSE
e240: 20 2a 2f 0a 20 20 20 20 67 61 69 61 54 6f 53 70 */. gaiaToSp
e250: 61 74 69 61 4c 69 74 65 42 6c 6f 62 57 6b 62 45 atiaLiteBlobWkbE
e260: 78 32 20 28 67 65 6f 6d 2c 20 72 65 73 75 6c 74 x2 (geom, result
e270: 2c 20 73 69 7a 65 2c 20 67 70 6b 67 5f 6d 6f 64 , size, gpkg_mod
e280: 65 2c 20 30 29 3b 0a 7d 0a 0a 73 74 61 74 69 63 e, 0);.}..static
e290: 20 76 6f 69 64 0a 64 6f 45 6e 63 6f 64 65 54 69 void.doEncodeTi
e2a0: 6e 79 50 6f 69 6e 74 42 6c 6f 62 20 28 67 61 69 nyPointBlob (gai
e2b0: 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f aGeomCollPtr geo
e2c0: 6d 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 m, unsigned char
e2d0: 20 2a 2a 72 65 73 75 6c 74 2c 20 69 6e 74 20 2a **result, int *
e2e0: 73 69 7a 65 29 0a 7b 0a 2f 2a 20 65 6e 63 6f 64 size).{./* encod
e2f0: 69 6e 67 20 61 20 54 69 6e 79 50 6f 69 6e 74 20 ing a TinyPoint
e300: 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 69 6e 74 20 BLOB */. int
e310: 73 7a 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 sz;. unsigned
e320: 20 63 68 61 72 20 2a 62 6c 6f 62 3b 0a 20 20 20 char *blob;.
e330: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char *
e340: 70 74 72 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 ptr;. int end
e350: 69 61 6e 5f 61 72 63 68 20 3d 20 67 61 69 61 45 ian_arch = gaiaE
e360: 6e 64 69 61 6e 41 72 63 68 20 28 29 3b 0a 20 20 ndianArch ();.
e370: 20 20 67 61 69 61 50 6f 69 6e 74 50 74 72 20 70 gaiaPointPtr p
e380: 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 oint = geom->Fir
e390: 73 74 50 6f 69 6e 74 3b 0a 0a 2f 2a 20 63 6f 6d stPoint;../* com
e3a0: 70 75 6e 74 69 6e 67 20 74 68 65 20 42 4c 4f 42 punting the BLOB
e3b0: 20 73 69 7a 65 20 2a 2f 0a 20 20 20 20 69 66 20 size */. if
e3c0: 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
e3d0: 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
e3e0: 5f 5a 29 0a 09 73 7a 20 3d 20 33 32 3b 0a 20 20 _Z)..sz = 32;.
e3f0: 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d else if (geom-
e400: 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
e410: 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 73 == GAIA_XY_M)..s
e420: 7a 20 3d 20 33 32 3b 0a 20 20 20 20 65 6c 73 65 z = 32;. else
e430: 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
e440: 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
e450: 41 5f 58 59 5f 5a 5f 4d 29 0a 09 73 7a 20 3d 20 A_XY_Z_M)..sz =
e460: 34 30 3b 0a 20 20 20 20 65 6c 73 65 0a 09 73 7a 40;. else..sz
e470: 20 3d 20 32 34 3b 0a 2f 2a 20 61 6c 6c 6f 63 61 = 24;./* alloca
e480: 74 69 6e 67 20 74 68 65 20 42 4c 4f 42 20 2a 2f ting the BLOB */
e490: 0a 20 20 20 20 62 6c 6f 62 20 3d 20 6d 61 6c 6c . blob = mall
e4a0: 6f 63 20 28 73 7a 29 3b 0a 20 20 20 20 70 74 72 oc (sz);. ptr
e4b0: 20 3d 20 62 6c 6f 62 3b 0a 2f 2a 20 61 6e 64 20 = blob;./* and
e4c0: 66 69 6e 61 6c 6c 79 20 77 65 20 62 75 69 6c 64 finally we build
e4d0: 20 74 68 65 20 42 4c 4f 42 20 2a 2f 0a 20 20 20 the BLOB */.
e4e0: 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 *ptr = GAIA_MAR
e4f0: 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 41 52 K_START;./* STAR
e500: 54 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 20 T signature */.
e510: 20 20 20 70 74 72 2b 2b 3b 0a 20 20 20 20 2a 28 ptr++;. *(
e520: 70 74 72 29 20 3d 20 47 41 49 41 5f 54 49 4e 59 ptr) = GAIA_TINY
e530: 50 4f 49 4e 54 5f 4c 49 54 54 4c 45 5f 45 4e 44 POINT_LITTLE_END
e540: 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 IAN;./* byte ord
e550: 65 72 69 6e 67 20 2a 2f 0a 20 20 20 20 70 74 72 ering */. ptr
e560: 2b 2b 3b 0a 20 20 20 20 67 61 69 61 45 78 70 6f ++;. gaiaExpo
e570: 72 74 33 32 20 28 70 74 72 2c 20 67 65 6f 6d 2d rt32 (ptr, geom-
e580: 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 6e >Srid, 1, endian
e590: 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 53 _arch);./* the S
e5a0: 52 49 44 20 2a 2f 0a 20 20 20 20 70 74 72 20 2b RID */. ptr +
e5b0: 3d 20 34 3b 0a 20 20 20 20 69 66 20 28 67 65 6f = 4;. if (geo
e5c0: 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
e5d0: 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a l == GAIA_XY_Z).
e5e0: 09 2a 70 74 72 20 3d 20 47 41 49 41 5f 54 49 4e .*ptr = GAIA_TIN
e5f0: 59 50 4f 49 4e 54 5f 58 59 5a 3b 0a 20 20 20 20 YPOINT_XYZ;.
e600: 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
e610: 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
e620: 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 2a 70 74 GAIA_XY_M)..*pt
e630: 72 20 3d 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 r = GAIA_TINYPOI
e640: 4e 54 5f 58 59 4d 3b 0a 20 20 20 20 65 6c 73 65 NT_XYM;. else
e650: 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
e660: 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
e670: 41 5f 58 59 5f 5a 5f 4d 29 0a 09 2a 70 74 72 20 A_XY_Z_M)..*ptr
e680: 3d 20 47 41 49 41 5f 54 49 4e 59 50 4f 49 4e 54 = GAIA_TINYPOINT
e690: 5f 58 59 5a 4d 3b 0a 20 20 20 20 65 6c 73 65 0a _XYZM;. else.
e6a0: 09 2a 70 74 72 20 3d 20 47 41 49 41 5f 54 49 4e .*ptr = GAIA_TIN
e6b0: 59 50 4f 49 4e 54 5f 58 59 3b 0a 20 20 20 20 70 YPOINT_XY;. p
e6c0: 74 72 2b 2b 3b 0a 20 20 20 20 67 61 69 61 45 78 tr++;. gaiaEx
e6d0: 70 6f 72 74 36 34 20 28 70 74 72 2c 20 70 6f 69 port64 (ptr, poi
e6e0: 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e nt->X, 1, endian
e6f0: 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a _arch);./* X */.
e700: 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 20 20 ptr += 8;.
e710: 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
e720: 70 74 72 2c 20 70 6f 69 6e 74 2d 3e 59 2c 20 31 ptr, point->Y, 1
e730: 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
e740: 2f 2a 20 59 20 2a 2f 0a 20 20 20 20 70 74 72 20 /* Y */. ptr
e750: 2b 3d 20 38 3b 0a 20 20 20 20 69 66 20 28 67 65 += 8;. if (ge
e760: 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
e770: 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 el == GAIA_XY_Z)
e780: 0a 20 20 20 20 20 20 7b 0a 09 20 20 67 61 69 61 . {.. gaia
e790: 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 70 Export64 (ptr, p
e7a0: 6f 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 oint->Z, 1, endi
e7b0: 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a an_arch);./* Z *
e7c0: 2f 0a 09 20 20 70 74 72 20 2b 3d 20 38 3b 0a 20 /.. ptr += 8;.
e7d0: 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 }. else
e7e0: 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
e7f0: 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
e800: 5f 58 59 5f 4d 29 0a 20 20 20 20 20 20 7b 0a 09 _XY_M). {..
e810: 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
e820: 70 74 72 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 ptr, point->M, 1
e830: 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
e840: 2f 2a 20 4d 20 2a 2f 0a 09 20 20 70 74 72 20 2b /* M */.. ptr +
e850: 3d 20 38 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 = 8;. }.
e860: 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e else if (geom->
e870: 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
e880: 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 20 = GAIA_XY_Z_M).
e890: 20 20 20 20 20 7b 0a 09 20 20 67 61 69 61 45 78 {.. gaiaEx
e8a0: 70 6f 72 74 36 34 20 28 70 74 72 2c 20 70 6f 69 port64 (ptr, poi
e8b0: 6e 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 6e nt->Z, 1, endian
e8c0: 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a _arch);./* Z */.
e8d0: 09 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 20 20 . ptr += 8;..
e8e0: 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
e8f0: 72 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 20 r, point->M, 1,
e900: 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
e910: 20 4d 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 M */.. ptr +=
e920: 38 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 2a 8;. }. *
e930: 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f ptr = GAIA_MARK_
e940: 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e END;./* END sign
e950: 61 74 75 72 65 20 2a 2f 0a 0a 20 20 20 20 2a 72 ature */.. *r
e960: 65 73 75 6c 74 20 3d 20 62 6c 6f 62 3b 0a 20 20 esult = blob;.
e970: 20 20 2a 73 69 7a 65 20 3d 20 73 7a 3b 0a 7d 0a *size = sz;.}.
e980: 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 45 .GAIAGEO_DECLARE
e990: 20 76 6f 69 64 0a 67 61 69 61 54 6f 53 70 61 74 void.gaiaToSpat
e9a0: 69 61 4c 69 74 65 42 6c 6f 62 57 6b 62 45 78 32 iaLiteBlobWkbEx2
e9b0: 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
e9c0: 72 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 r geom, unsigned
e9d0: 20 63 68 61 72 20 2a 2a 72 65 73 75 6c 74 2c 0a char **result,.
e9e0: 09 09 09 20 20 20 20 69 6e 74 20 2a 73 69 7a 65 ... int *size
e9f0: 2c 20 69 6e 74 20 67 70 6b 67 5f 6d 6f 64 65 2c , int gpkg_mode,
ea00: 20 69 6e 74 20 74 69 6e 79 5f 70 6f 69 6e 74 29 int tiny_point)
ea10: 0a 7b 0a 2f 2a 20 62 75 69 6c 64 73 20 74 68 65 .{./* builds the
ea20: 20 53 70 61 74 69 61 4c 69 74 65 20 42 4c 4f 42 SpatiaLite BLOB
ea30: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 representation
ea40: 66 6f 72 20 74 68 69 73 20 47 45 4f 4d 45 54 52 for this GEOMETR
ea50: 59 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 62 3b Y */. int ib;
ea60: 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 . int iv;.
ea70: 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 double x;. d
ea80: 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 ouble y;. dou
ea90: 62 6c 65 20 7a 20 3d 20 30 2e 30 3b 0a 20 20 20 ble z = 0.0;.
eaa0: 20 64 6f 75 62 6c 65 20 6d 20 3d 20 30 2e 30 3b double m = 0.0;
eab0: 0a 20 20 20 20 69 6e 74 20 65 6e 74 69 74 69 65 . int entitie
eac0: 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e s = 0;. int n
ead0: 5f 70 6f 69 6e 74 73 20 3d 20 30 3b 0a 20 20 20 _points = 0;.
eae0: 20 69 6e 74 20 6e 5f 6c 69 6e 65 73 74 72 69 6e int n_linestrin
eaf0: 67 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 gs = 0;. int
eb00: 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 20 30 3b 0a n_polygons = 0;.
eb10: 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0a 20 20 int type;.
eb20: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char
eb30: 2a 70 74 72 3b 0a 20 20 20 20 67 61 69 61 50 6f *ptr;. gaiaPo
eb40: 69 6e 74 50 74 72 20 70 74 3b 0a 20 20 20 20 67 intPtr pt;. g
eb50: 61 69 61 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 aiaLinestringPtr
eb60: 20 6c 6e 3b 0a 20 20 20 20 67 61 69 61 50 6f 6c ln;. gaiaPol
eb70: 79 67 6f 6e 50 74 72 20 70 67 3b 0a 20 20 20 20 ygonPtr pg;.
eb80: 67 61 69 61 52 69 6e 67 50 74 72 20 72 6e 67 3b gaiaRingPtr rng;
eb90: 0a 20 20 20 20 67 61 69 61 50 6f 69 6e 74 50 74 . gaiaPointPt
eba0: 72 20 70 6f 69 6e 74 20 3d 20 4e 55 4c 4c 3b 0a r point = NULL;.
ebb0: 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 69 gaiaLinestri
ebc0: 6e 67 50 74 72 20 6c 69 6e 65 20 3d 20 4e 55 4c ngPtr line = NUL
ebd0: 4c 3b 0a 20 20 20 20 67 61 69 61 50 6f 6c 79 67 L;. gaiaPolyg
ebe0: 6f 6e 50 74 72 20 70 6f 6c 79 67 20 3d 20 4e 55 onPtr polyg = NU
ebf0: 4c 4c 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 69 LL;. int endi
ec00: 61 6e 5f 61 72 63 68 20 3d 20 67 61 69 61 45 6e an_arch = gaiaEn
ec10: 64 69 61 6e 41 72 63 68 20 28 29 3b 0a 20 20 20 dianArch ();.
ec20: 20 67 61 69 61 4d 62 72 47 65 6f 6d 65 74 72 79 gaiaMbrGeometry
ec30: 20 28 67 65 6f 6d 29 3b 0a 0a 20 20 20 20 69 66 (geom);.. if
ec40: 20 28 67 70 6b 67 5f 6d 6f 64 65 29 0a 20 20 20 (gpkg_mode).
ec50: 20 20 20 7b 0a 23 69 66 64 65 66 20 45 4e 41 42 {.#ifdef ENAB
ec60: 4c 45 5f 47 45 4f 50 41 43 4b 41 47 45 09 2f 2a LE_GEOPACKAGE./*
ec70: 20 6f 6e 6c 79 20 69 66 20 47 65 6f 50 61 63 6b only if GeoPack
ec80: 61 67 65 20 73 75 70 70 6f 72 74 20 69 73 20 65 age support is e
ec90: 6e 61 62 6c 65 64 20 2a 2f 0a 09 20 20 2f 2a 20 nabled */.. /*
eca0: 47 65 6f 50 61 63 6b 61 67 65 20 4d 6f 64 65 20 GeoPackage Mode
ecb0: 65 6e 61 62 6c 65 64 20 2a 2f 0a 09 20 20 67 61 enabled */.. ga
ecc0: 69 61 54 6f 47 50 42 20 28 67 65 6f 6d 2c 20 72 iaToGPB (geom, r
ecd0: 65 73 75 6c 74 2c 20 73 69 7a 65 29 3b 0a 23 65 esult, size);.#e
ece0: 6e 64 69 66 20 2f 2a 20 65 6e 64 20 47 45 4f 50 ndif /* end GEOP
ecf0: 41 43 4b 41 47 45 20 63 6f 6e 64 69 74 69 6f 6e ACKAGE condition
ed00: 61 6c 20 2a 2f 0a 09 20 20 72 65 74 75 72 6e 3b al */.. return;
ed10: 0a 20 20 20 20 20 20 7d 0a 0a 2f 2a 20 68 6f 77 . }../* how
ed20: 20 6d 61 6e 79 20 65 6e 74 69 74 69 65 73 2c 20 many entities,
ed30: 61 6e 64 20 6f 66 20 77 68 61 74 20 6b 69 6e 64 and of what kind
ed40: 2c 20 64 6f 20 77 65 20 68 61 76 65 20 3f 20 2a , do we have ? *
ed50: 2f 0a 20 20 20 20 70 74 20 3d 20 67 65 6f 6d 2d /. pt = geom-
ed60: 3e 46 69 72 73 74 50 6f 69 6e 74 3b 0a 20 20 20 >FirstPoint;.
ed70: 20 77 68 69 6c 65 20 28 70 74 29 0a 20 20 20 20 while (pt).
ed80: 20 20 7b 0a 09 20 20 70 6f 69 6e 74 20 3d 20 70 {.. point = p
ed90: 74 3b 0a 09 20 20 65 6e 74 69 74 69 65 73 2b 2b t;.. entities++
eda0: 3b 0a 09 20 20 6e 5f 70 6f 69 6e 74 73 2b 2b 3b ;.. n_points++;
edb0: 0a 09 20 20 70 74 20 3d 20 70 74 2d 3e 4e 65 78 .. pt = pt->Nex
edc0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 6c t;. }. l
edd0: 6e 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 4c n = geom->FirstL
ede0: 69 6e 65 73 74 72 69 6e 67 3b 0a 20 20 20 20 77 inestring;. w
edf0: 68 69 6c 65 20 28 6c 6e 29 0a 20 20 20 20 20 20 hile (ln).
ee00: 7b 0a 09 20 20 6c 69 6e 65 20 3d 20 6c 6e 3b 0a {.. line = ln;.
ee10: 09 20 20 65 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 . entities++;..
ee20: 20 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 2b n_linestrings+
ee30: 2b 3b 0a 09 20 20 6c 6e 20 3d 20 6c 6e 2d 3e 4e +;.. ln = ln->N
ee40: 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 ext;. }.
ee50: 20 70 67 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 pg = geom->Firs
ee60: 74 50 6f 6c 79 67 6f 6e 3b 0a 20 20 20 20 77 68 tPolygon;. wh
ee70: 69 6c 65 20 28 70 67 29 0a 20 20 20 20 20 20 7b ile (pg). {
ee80: 0a 09 20 20 70 6f 6c 79 67 20 3d 20 70 67 3b 0a .. polyg = pg;.
ee90: 09 20 20 65 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 . entities++;..
eea0: 20 20 6e 5f 70 6f 6c 79 67 6f 6e 73 2b 2b 3b 0a n_polygons++;.
eeb0: 09 20 20 70 67 20 3d 20 70 67 2d 3e 4e 65 78 74 . pg = pg->Next
eec0: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 2a ;. }.. *
eed0: 73 69 7a 65 20 3d 20 30 3b 0a 20 20 20 20 2a 72 size = 0;. *r
eee0: 65 73 75 6c 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 esult = NULL;.
eef0: 20 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d if (n_points =
ef00: 3d 20 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e = 0 && n_polygon
ef10: 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 s == 0 && n_line
ef20: 73 74 72 69 6e 67 73 20 3d 3d 20 30 29 0a 09 72 strings == 0)..r
ef30: 65 74 75 72 6e 3b 0a 20 20 20 20 69 66 20 28 6e eturn;. if (n
ef40: 5f 70 6f 69 6e 74 73 20 3d 3d 20 31 20 26 26 20 _points == 1 &&
ef50: 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d n_linestrings ==
ef60: 20 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 0 && n_polygons
ef70: 20 3d 3d 20 30 20 26 26 20 65 6e 74 69 74 69 65 == 0 && entitie
ef80: 73 20 3d 3d 20 31 0a 09 26 26 20 67 65 6f 6d 2d s == 1..&& geom-
ef90: 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 21 3d >DeclaredType !=
efa0: 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 GAIA_MULTIPOINT
efb0: 0a 09 26 26 20 67 65 6f 6d 2d 3e 44 65 63 6c 61 ..&& geom->Decla
efc0: 72 65 64 54 79 70 65 20 21 3d 20 47 41 49 41 5f redType != GAIA_
efd0: 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
efe0: 4f 4e 20 26 26 20 74 69 6e 79 5f 70 6f 69 6e 74 ON && tiny_point
eff0: 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 ). {.. /*
f000: 75 73 69 6e 67 20 74 68 65 20 54 69 6e 79 50 6f using the TinyPo
f010: 69 6e 74 20 42 4c 4f 42 20 65 6e 63 6f 64 69 6e int BLOB encodin
f020: 67 20 2a 2f 0a 09 20 20 64 6f 45 6e 63 6f 64 65 g */.. doEncode
f030: 54 69 6e 79 50 6f 69 6e 74 42 6c 6f 62 20 28 67 TinyPointBlob (g
f040: 65 6f 6d 2c 20 72 65 73 75 6c 74 2c 20 73 69 7a eom, result, siz
f050: 65 29 3b 0a 09 20 20 72 65 74 75 72 6e 3b 0a 20 e);.. return;.
f060: 20 20 20 20 20 7d 0a 0a 2f 2a 20 6f 6b 2c 20 77 }../* ok, w
f070: 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 e can determine
f080: 74 68 65 20 67 65 6f 6d 65 74 72 79 20 63 6c 61 the geometry cla
f090: 73 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 6e 5f ss */. if (n_
f0a0: 70 6f 69 6e 74 73 20 3d 3d 20 31 20 26 26 20 6e points == 1 && n
f0b0: 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 _linestrings ==
f0c0: 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 0 && n_polygons
f0d0: 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 == 0). {..
f0e0: 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 if (geom->Decla
f0f0: 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f redType == GAIA_
f100: 4d 55 4c 54 49 50 4f 49 4e 54 29 0a 09 20 20 20 MULTIPOINT)..
f110: 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 {...if (geom->D
f120: 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
f130: 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 GAIA_XY_Z)...
f140: 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 type = GAIA_MU
f150: 4c 54 49 50 4f 49 4e 54 5a 3b 0a 09 09 65 6c 73 LTIPOINTZ;...els
f160: 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
f170: 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
f180: 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
f190: 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 ype = GAIA_MULTI
f1a0: 50 4f 49 4e 54 4d 3b 0a 09 09 65 6c 73 65 20 69 POINTM;...else i
f1b0: 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
f1c0: 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
f1d0: 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 XY_Z_M)... ty
f1e0: 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 pe = GAIA_MULTIP
f1f0: 4f 49 4e 54 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 OINTZM;...else..
f200: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
f210: 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a 09 20 20 _MULTIPOINT;..
f220: 20 20 7d 0a 09 20 20 65 6c 73 65 20 69 66 20 28 }.. else if (
f230: 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 geom->DeclaredTy
f240: 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
f250: 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 TRYCOLLECTION)..
f260: 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
f270: 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
f280: 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
f290: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
f2a0: 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
f2b0: 49 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 IONZ;...else if
f2c0: 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
f2d0: 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
f2e0: 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _M)... type =
f2f0: 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
f300: 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 LLECTIONM;...els
f310: 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
f320: 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
f330: 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
f340: 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
f350: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
f360: 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 M;...else...
f370: 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d type = GAIA_GEOM
f380: 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a ETRYCOLLECTION;.
f390: 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
f3a0: 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
f3b0: 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
f3c0: 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
f3d0: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
f3e0: 5f 50 4f 49 4e 54 5a 3b 0a 09 09 65 6c 73 65 20 _POINTZ;...else
f3f0: 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
f400: 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
f410: 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 _XY_M)... typ
f420: 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 4d 3b e = GAIA_POINTM;
f430: 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
f440: 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
f450: 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 == GAIA_XY_Z_M)
f460: 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
f470: 49 41 5f 50 4f 49 4e 54 5a 4d 3b 0a 09 09 65 6c IA_POINTZM;...el
f480: 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 se... type =
f490: 47 41 49 41 5f 50 4f 49 4e 54 3b 0a 09 20 20 20 GAIA_POINT;..
f4a0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 }. }. e
f4b0: 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 lse if (n_points
f4c0: 20 3e 20 31 20 26 26 20 6e 5f 6c 69 6e 65 73 74 > 1 && n_linest
f4d0: 72 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f rings == 0 && n_
f4e0: 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 polygons == 0).
f4f0: 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 {.. if (ge
f500: 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 om->DeclaredType
f510: 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 == GAIA_GEOMETR
f520: 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 YCOLLECTION)..
f530: 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e {...if (geom->
f540: 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
f550: 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 = GAIA_XY_Z)...
f560: 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
f570: 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
f580: 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 NZ;...else if (g
f590: 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
f5a0: 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d del == GAIA_XY_M
f5b0: 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
f5c0: 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
f5d0: 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 ECTIONM;...else
f5e0: 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
f5f0: 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
f600: 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 _XY_Z_M)... t
f610: 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
f620: 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3b TRYCOLLECTIONZM;
f630: 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 ...else... ty
f640: 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 pe = GAIA_GEOMET
f650: 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 RYCOLLECTION;..
f660: 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 }.. else..
f670: 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e {...if (geom->
f680: 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
f690: 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 = GAIA_XY_Z)...
f6a0: 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d type = GAIA_M
f6b0: 55 4c 54 49 50 4f 49 4e 54 5a 3b 0a 09 09 65 6c ULTIPOINTZ;...el
f6c0: 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
f6d0: 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
f6e0: 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 AIA_XY_M)...
f6f0: 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
f700: 49 50 4f 49 4e 54 4d 3b 0a 09 09 65 6c 73 65 20 IPOINTM;...else
f710: 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
f720: 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
f730: 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 _XY_Z_M)... t
f740: 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 ype = GAIA_MULTI
f750: 50 4f 49 4e 54 5a 4d 3b 0a 09 09 65 6c 73 65 0a POINTZM;...else.
f760: 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
f770: 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a 09 20 A_MULTIPOINT;..
f780: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
f790: 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e else if (n_poin
f7a0: 74 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e ts == 0 && n_lin
f7b0: 65 73 74 72 69 6e 67 73 20 3d 3d 20 31 20 26 26 estrings == 1 &&
f7c0: 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 n_polygons == 0
f7d0: 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 ). {.. if
f7e0: 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 (geom->DeclaredT
f7f0: 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
f800: 49 4c 49 4e 45 53 54 52 49 4e 47 29 0a 09 20 20 ILINESTRING)..
f810: 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e {...if (geom->
f820: 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
f830: 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 = GAIA_XY_Z)...
f840: 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d type = GAIA_M
f850: 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 3b ULTILINESTRINGZ;
f860: 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
f870: 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
f880: 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 == GAIA_XY_M)..
f890: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
f8a0: 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
f8b0: 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 M;...else if (ge
f8c0: 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
f8d0: 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
f8e0: 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 M)... type =
f8f0: 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
f900: 52 49 4e 47 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 RINGZM;...else..
f910: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
f920: 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
f930: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 ;.. }.. else
f940: 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 if (geom->Decla
f950: 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f redType == GAIA_
f960: 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
f970: 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 ON).. {...if
f980: 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
f990: 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
f9a0: 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
f9b0: 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
f9c0: 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 6c 73 LLECTIONZ;...els
f9d0: 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
f9e0: 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
f9f0: 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
fa00: 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
fa10: 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a TRYCOLLECTIONM;.
fa20: 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
fa30: 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
fa40: 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
fa50: 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
fa60: 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
fa70: 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 TIONZM;...else..
fa80: 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
fa90: 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
faa0: 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 ION;.. }.. e
fab0: 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 lse.. {...if
fac0: 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
fad0: 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
fae0: 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
faf0: 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
fb00: 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 Z;...else if (ge
fb10: 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
fb20: 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 el == GAIA_XY_M)
fb30: 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
fb40: 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 3b 0a IA_LINESTRINGM;.
fb50: 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
fb60: 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
fb70: 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
fb80: 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
fb90: 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3b 0a A_LINESTRINGZM;.
fba0: 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 ..else... typ
fbb0: 65 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 e = GAIA_LINESTR
fbc0: 49 4e 47 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 ING;.. }.
fbd0: 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
fbe0: 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 20 26 (n_points == 0 &
fbf0: 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 & n_linestrings
fc00: 3e 20 31 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e > 1 && n_polygon
fc10: 73 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b 0a s == 0). {.
fc20: 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 . if (geom->Dec
fc30: 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
fc40: 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
fc50: 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 TION).. {...i
fc60: 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
fc70: 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
fc80: 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
fc90: 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
fca0: 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 COLLECTIONZ;...e
fcb0: 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
fcc0: 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
fcd0: 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 GAIA_XY_M)...
fce0: 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
fcf0: 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
fd00: 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
fd10: 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
fd20: 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
fd30: 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
fd40: 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
fd50: 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 ECTIONZM;...else
fd60: 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
fd70: 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
fd80: 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 CTION;.. }..
fd90: 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 else.. {...i
fda0: 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
fdb0: 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
fdc0: 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
fdd0: 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e = GAIA_MULTILIN
fde0: 45 53 54 52 49 4e 47 5a 3b 0a 09 09 65 6c 73 65 ESTRINGZ;...else
fdf0: 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
fe00: 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
fe10: 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 A_XY_M)... ty
fe20: 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c pe = GAIA_MULTIL
fe30: 49 4e 45 53 54 52 49 4e 47 4d 3b 0a 09 09 65 6c INESTRINGM;...el
fe40: 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
fe50: 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
fe60: 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 AIA_XY_Z_M)...
fe70: 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 type = GAIA_MU
fe80: 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3b LTILINESTRINGZM;
fe90: 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 ...else... ty
fea0: 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c pe = GAIA_MULTIL
feb0: 49 4e 45 53 54 52 49 4e 47 3b 0a 09 20 20 20 20 INESTRING;..
fec0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c }. }. el
fed0: 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 se if (n_points
fee0: 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 == 0 && n_linest
fef0: 72 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f rings == 0 && n_
ff00: 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 31 29 0a 20 polygons == 1).
ff10: 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 {.. if (ge
ff20: 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 om->DeclaredType
ff30: 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f == GAIA_MULTIPO
ff40: 4c 59 47 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 LYGON).. {...
ff50: 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
ff60: 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
ff70: 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 _XY_Z)... typ
ff80: 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
ff90: 4c 59 47 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 LYGONZ;...else i
ffa0: 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
ffb0: 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
ffc0: 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 XY_M)... type
ffd0: 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c = GAIA_MULTIPOL
ffe0: 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 YGONM;...else if
fff0: 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
10000 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
10010 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 Y_Z_M)... typ
10020 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
10030 4c 59 47 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a LYGONZM;...else.
10040 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
10050 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3b 0a A_MULTIPOLYGON;.
10060 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 20 69 . }.. else i
10070 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 f (geom->Declare
10080 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 dType == GAIA_GE
10090 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
100a0 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 67 ).. {...if (g
100b0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
100c0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
100d0 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
100e0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
100f0 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 ECTIONZ;...else
10100 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
10110 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
10120 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 _XY_M)... typ
10130 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 e = GAIA_GEOMETR
10140 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 09 YCOLLECTIONM;...
10150 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
10160 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
10170 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 GAIA_XY_Z_M)...
10180 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
10190 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
101a0 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 ONZM;...else...
101b0 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
101c0 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
101d0 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 N;.. }.. els
101e0 65 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 67 e.. {...if (g
101f0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
10200 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
10210 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
10220 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3b 0a 09 09 AIA_POLYGONZ;...
10230 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
10240 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
10250 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 GAIA_XY_M)...
10260 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 50 4f type = GAIA_PO
10270 4c 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 LYGONM;...else i
10280 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
10290 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
102a0 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 XY_Z_M)... ty
102b0 70 65 20 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f pe = GAIA_POLYGO
102c0 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 NZM;...else...
102d0 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 50 4f type = GAIA_PO
102e0 4c 59 47 4f 4e 3b 0a 09 20 20 20 20 7d 0a 20 20 LYGON;.. }.
102f0 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 }. else i
10300 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 f (n_points == 0
10310 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 && n_linestring
10320 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f 6c 79 s == 0 && n_poly
10330 67 6f 6e 73 20 3e 20 31 29 0a 20 20 20 20 20 20 gons > 1).
10340 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 {.. if (geom->D
10350 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 eclaredType == G
10360 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
10370 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 ECTION).. {..
10380 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
10390 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
103a0 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 A_XY_Z)... ty
103b0 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 pe = GAIA_GEOMET
103c0 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 RYCOLLECTIONZ;..
103d0 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
103e0 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
103f0 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 = GAIA_XY_M)...
10400 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
10410 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
10420 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 NM;...else if (g
10430 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
10440 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
10450 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _M)... type =
10460 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
10470 4c 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c LLECTIONZM;...el
10480 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 se... type =
10490 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
104a0 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a LECTION;.. }.
104b0 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 . else.. {..
104c0 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
104d0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
104e0 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 A_XY_Z)... ty
104f0 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 pe = GAIA_MULTIP
10500 4f 4c 59 47 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 OLYGONZ;...else
10510 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
10520 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
10530 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 _XY_M)... typ
10540 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
10550 4c 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 LYGONM;...else i
10560 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
10570 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
10580 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 XY_Z_M)... ty
10590 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 pe = GAIA_MULTIP
105a0 4f 4c 59 47 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 OLYGONZM;...else
105b0 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
105c0 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3b IA_MULTIPOLYGON;
105d0 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a .. }. }.
105e0 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 7b else. {
105f0 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 .. if (geom->Di
10600 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
10610 47 41 49 41 5f 58 59 5f 5a 29 0a 09 20 20 20 20 GAIA_XY_Z)..
10620 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 type = GAIA_GE
10630 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
10640 5a 3b 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 Z;.. else if (g
10650 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
10660 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d del == GAIA_XY_M
10670 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 ).. type =
10680 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
10690 4c 45 43 54 49 4f 4e 4d 3b 0a 09 20 20 65 6c 73 LECTIONM;.. els
106a0 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
106b0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
106c0 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 20 20 IA_XY_Z_M)..
106d0 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 type = GAIA_GE
106e0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
106f0 5a 4d 3b 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 ZM;.. else..
10700 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
10710 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
10720 4e 3b 0a 20 20 20 20 20 20 7d 0a 2f 2a 20 61 6e N;. }./* an
10730 64 20 6e 6f 77 20 77 65 20 63 6f 6d 70 75 74 65 d now we compute
10740 20 74 68 65 20 73 69 7a 65 20 6f 66 20 42 4c 4f the size of BLO
10750 42 20 2a 2f 0a 20 20 20 20 2a 73 69 7a 65 20 3d B */. *size =
10760 20 34 34 3b 09 09 09 2f 2a 20 68 65 61 64 65 72 44;.../* header
10770 20 73 69 7a 65 20 2a 2f 0a 20 20 20 20 73 77 69 size */. swi
10780 74 63 68 20 28 74 79 70 65 29 0a 20 20 20 20 20 tch (type).
10790 20 7b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 {. case GA
107a0 49 41 5f 50 4f 49 4e 54 3a 0a 09 20 20 2a 73 69 IA_POINT:.. *si
107b0 7a 65 20 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 ze += (sizeof (d
107c0 6f 75 62 6c 65 29 20 2a 20 32 29 3b 09 2f 2a 20 ouble) * 2);./*
107d0 5b 78 2c 79 5d 20 63 6f 6f 72 64 73 20 2a 2f 0a [x,y] coords */.
107e0 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
107f0 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 5a case GAIA_POINTZ
10800 3a 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 73 :.. *size += (s
10810 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a izeof (double) *
10820 20 33 29 3b 09 2f 2a 20 5b 78 2c 79 2c 7a 5d 20 3);./* [x,y,z]
10830 63 6f 6f 72 64 73 20 2a 2f 0a 09 20 20 62 72 65 coords */.. bre
10840 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
10850 41 49 41 5f 50 4f 49 4e 54 4d 3a 0a 09 20 20 2a AIA_POINTM:.. *
10860 73 69 7a 65 20 2b 3d 20 28 73 69 7a 65 6f 66 20 size += (sizeof
10870 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 3b 09 2f (double) * 3);./
10880 2a 20 5b 78 2c 79 2c 6d 5d 20 63 6f 6f 72 64 73 * [x,y,m] coords
10890 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 */.. break;.
108a0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f case GAIA_PO
108b0 49 4e 54 5a 4d 3a 0a 09 20 20 2a 73 69 7a 65 20 INTZM:.. *size
108c0 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 += (sizeof (doub
108d0 6c 65 29 20 2a 20 34 29 3b 09 2f 2a 20 5b 78 2c le) * 4);./* [x,
108e0 79 2c 7a 2c 6d 5d 20 63 6f 6f 72 64 73 20 2a 2f y,z,m] coords */
108f0 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
10900 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 case GAIA_LINES
10910 54 52 49 4e 47 3a 0a 09 20 20 2a 73 69 7a 65 20 TRING:.. *size
10920 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 += (4 + ((sizeof
10930 20 28 64 6f 75 62 6c 65 29 20 2a 20 32 29 20 2a (double) * 2) *
10940 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b line->Points));
10950 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
10960 78 2c 79 5d 20 66 6f 72 20 65 61 63 68 20 76 65 x,y] for each ve
10970 72 74 65 78 20 2a 2f 0a 09 20 20 62 72 65 61 6b rtex */.. break
10980 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
10990 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 09 A_LINESTRINGZ:..
109a0 20 20 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 *size += (4 +
109b0 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 ((sizeof (double
109c0 29 20 2a 20 33 29 20 2a 20 6c 69 6e 65 2d 3e 50 ) * 3) * line->P
109d0 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 70 6f oints));./* # po
109e0 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 66 ints + [x,y,z] f
109f0 6f 72 20 65 61 63 68 20 76 65 72 74 65 78 20 2a or each vertex *
10a00 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 /.. break;.
10a10 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 case GAIA_LINE
10a20 53 54 52 49 4e 47 4d 3a 0a 09 20 20 2a 73 69 7a STRINGM:.. *siz
10a30 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 e += (4 + ((size
10a40 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 of (double) * 3)
10a50 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 29 * line->Points)
10a60 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b );./* # points +
10a70 20 5b 78 2c 79 2c 6d 5d 20 66 6f 72 20 65 61 63 [x,y,m] for eac
10a80 68 20 76 65 72 74 65 78 20 2a 2f 0a 09 20 20 62 h vertex */.. b
10a90 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
10aa0 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
10ab0 5a 4d 3a 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 ZM:.. *size +=
10ac0 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 (4 + ((sizeof (d
10ad0 6f 75 62 6c 65 29 20 2a 20 34 29 20 2a 20 6c 69 ouble) * 4) * li
10ae0 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a ne->Points));./*
10af0 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 # points + [x,y
10b00 2c 7a 2c 6d 5d 20 66 6f 72 20 65 61 63 68 20 76 ,z,m] for each v
10b10 65 72 74 65 78 20 2a 2f 0a 09 20 20 62 72 65 61 ertex */.. brea
10b20 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 k;. case GA
10b30 49 41 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 72 IA_POLYGON:.. r
10b40 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
10b50 72 69 6f 72 3b 0a 09 20 20 2a 73 69 7a 65 20 2b rior;.. *size +
10b60 3d 20 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 20 = (8 + ((sizeof
10b70 28 64 6f 75 62 6c 65 29 20 2a 20 32 29 20 2a 20 (double) * 2) *
10b80 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f rng->Points));./
10b90 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f * # rings + # po
10ba0 69 6e 74 73 20 2b 20 5b 78 2e 79 5d 20 61 72 72 ints + [x.y] arr
10bb0 61 79 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 ay - exterior ri
10bc0 6e 67 20 2a 2f 0a 09 20 20 66 6f 72 20 28 69 62 ng */.. for (ib
10bd0 20 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 = 0; ib < polyg
10be0 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 ->NumInteriors;
10bf0 69 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 72 ib++).. {...r
10c00 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 ng = polyg->Inte
10c10 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 2a 73 riors + ib;...*s
10c20 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 ize += (4 + ((si
10c30 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 zeof (double) *
10c40 32 29 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 2) * rng->Points
10c50 29 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 ));./* # points
10c60 2b 20 5b 78 2c 79 5d 20 61 72 72 61 79 20 2d 20 + [x,y] array -
10c70 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
10c80 0a 09 20 20 20 20 7d 0a 09 20 20 62 72 65 61 6b .. }.. break
10c90 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
10ca0 41 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 72 A_POLYGONZ:.. r
10cb0 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
10cc0 72 69 6f 72 3b 0a 09 20 20 2a 73 69 7a 65 20 2b rior;.. *size +
10cd0 3d 20 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 20 = (8 + ((sizeof
10ce0 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 20 2a 20 (double) * 3) *
10cf0 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f rng->Points));./
10d00 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f * # rings + # po
10d10 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 61 ints + [x,y,z] a
10d20 72 72 61 79 20 2d 20 65 78 74 65 72 69 6f 72 20 rray - exterior
10d30 72 69 6e 67 20 2a 2f 0a 09 20 20 66 6f 72 20 28 ring */.. for (
10d40 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c ib = 0; ib < pol
10d50 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 yg->NumInteriors
10d60 3b 20 69 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 ; ib++).. {..
10d70 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e .rng = polyg->In
10d80 74 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 teriors + ib;...
10d90 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 28 *size += (4 + ((
10da0 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 sizeof (double)
10db0 2a 20 33 29 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e * 3) * rng->Poin
10dc0 74 73 29 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 ts));./* # point
10dd0 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 61 72 72 61 s + [x,y,z] arra
10de0 79 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e y - interior rin
10df0 67 20 2a 2f 0a 09 20 20 20 20 7d 0a 09 20 20 62 g */.. }.. b
10e00 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
10e10 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a GAIA_POLYGONM:.
10e20 09 20 20 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e . rng = polyg->
10e30 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 2a 73 69 Exterior;.. *si
10e40 7a 65 20 2b 3d 20 28 38 20 2b 20 28 28 73 69 7a ze += (8 + ((siz
10e50 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 33 eof (double) * 3
10e60 29 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 ) * rng->Points)
10e70 29 3b 09 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 );./* # rings +
10e80 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c # points + [x,y,
10e90 6d 5d 20 61 72 72 61 79 20 2d 20 65 78 74 65 72 m] array - exter
10ea0 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 66 ior ring */.. f
10eb0 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c or (ib = 0; ib <
10ec0 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 polyg->NumInter
10ed0 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 20 iors; ib++)..
10ee0 20 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 {...rng = polyg
10ef0 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 62 ->Interiors + ib
10f00 3b 0a 09 09 2a 73 69 7a 65 20 2b 3d 20 28 34 20 ;...*size += (4
10f10 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 + ((sizeof (doub
10f20 6c 65 29 20 2a 20 33 29 20 2a 20 72 6e 67 2d 3e le) * 3) * rng->
10f30 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 70 Points));./* # p
10f40 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 6d 5d 20 oints + [x,y,m]
10f50 61 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 array - interior
10f60 20 72 69 6e 67 20 2a 2f 0a 09 20 20 20 20 7d 0a ring */.. }.
10f70 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
10f80 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f case GAIA_POLYGO
10f90 4e 5a 4d 3a 0a 09 20 20 72 6e 67 20 3d 20 70 6f NZM:.. rng = po
10fa0 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 lyg->Exterior;..
10fb0 20 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 2b 20 *size += (8 +
10fc0 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 ((sizeof (double
10fd0 29 20 2a 20 34 29 20 2a 20 72 6e 67 2d 3e 50 6f ) * 4) * rng->Po
10fe0 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 72 69 6e ints));./* # rin
10ff0 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b 20 gs + # points +
11000 5b 78 2c 79 2c 7a 2c 6d 5d 20 61 72 72 61 79 20 [x,y,z,m] array
11010 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 - exterior ring
11020 2a 2f 0a 09 20 20 66 6f 72 20 28 69 62 20 3d 20 */.. for (ib =
11030 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 0; ib < polyg->N
11040 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b umInteriors; ib+
11050 2b 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 +).. {...rng
11060 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f = polyg->Interio
11070 72 73 20 2b 20 69 62 3b 0a 09 09 2a 73 69 7a 65 rs + ib;...*size
11080 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 6f += (4 + ((sizeo
11090 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 20 f (double) * 4)
110a0 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b * rng->Points));
110b0 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
110c0 78 2c 79 2c 7a 2c 6d 5d 20 61 72 72 61 79 20 2d x,y,z,m] array -
110d0 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a interior ring *
110e0 2f 0a 09 20 20 20 20 7d 0a 09 20 20 62 72 65 61 /.. }.. brea
110f0 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 k;. default
11100 3a 0a 09 20 20 2f 2a 20 74 68 69 73 20 6f 6e 65 :.. /* this one
11110 20 69 73 20 6e 6f 74 20 61 20 73 69 6d 70 6c 65 is not a simple
11120 20 67 65 6f 6d 65 74 72 79 3b 20 73 68 6f 75 6c geometry; shoul
11130 64 20 62 65 20 61 20 4d 55 4c 54 49 78 78 78 78 d be a MULTIxxxx
11140 20 6f 72 20 61 20 47 45 4f 4d 45 54 52 59 43 4f or a GEOMETRYCO
11150 4c 4c 45 43 54 49 4f 4e 20 2a 2f 0a 09 20 20 2a LLECTION */.. *
11160 73 69 7a 65 20 2b 3d 20 34 3b 09 09 2f 2a 20 23 size += 4;../* #
11170 20 65 6e 74 69 74 69 65 73 20 2a 2f 0a 09 20 20 entities */..
11180 70 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 point = geom->Fi
11190 72 73 74 50 6f 69 6e 74 3b 0a 09 20 20 77 68 69 rstPoint;.. whi
111a0 6c 65 20 28 70 6f 69 6e 74 29 0a 09 20 20 20 20 le (point)..
111b0 7b 0a 09 09 2a 73 69 7a 65 20 2b 3d 20 35 3b 09 {...*size += 5;.
111c0 2f 2a 20 65 6e 74 69 74 79 20 68 65 61 64 65 72 /* entity header
111d0 20 2a 2f 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e */...if (geom->
111e0 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
111f0 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 09 20 20 = GAIA_XY_Z...
11200 20 20 7c 7c 20 67 65 6f 6d 2d 3e 44 69 6d 65 6e || geom->Dimen
11210 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
11220 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 2a 73 A_XY_M)... *s
11230 69 7a 65 20 2b 3d 20 28 73 69 7a 65 6f 66 20 28 ize += (sizeof (
11240 64 6f 75 62 6c 65 29 20 2a 20 33 29 3b 09 2f 2a double) * 3);./*
11250 20 74 68 72 65 65 20 64 6f 75 62 6c 65 73 20 66 three doubles f
11260 6f 72 20 65 61 63 68 20 50 4f 49 4e 54 20 2a 2f or each POINT */
11270 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
11280 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
11290 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 == GAIA_XY_Z_M)
112a0 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 ... *size +=
112b0 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 (sizeof (double)
112c0 20 2a 20 34 29 3b 09 2f 2a 20 66 6f 75 72 20 64 * 4);./* four d
112d0 6f 75 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 oubles for each
112e0 50 4f 49 4e 54 20 2a 2f 0a 09 09 65 6c 73 65 0a POINT */...else.
112f0 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 .. *size += (
11300 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 sizeof (double)
11310 2a 20 32 29 3b 09 2f 2a 20 74 77 6f 20 64 6f 75 * 2);./* two dou
11320 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 50 4f bles for each PO
11330 49 4e 54 20 2a 2f 0a 09 09 70 6f 69 6e 74 20 3d INT */...point =
11340 20 70 6f 69 6e 74 2d 3e 4e 65 78 74 3b 0a 09 20 point->Next;..
11350 20 20 20 7d 0a 09 20 20 6c 69 6e 65 20 3d 20 67 }.. line = g
11360 65 6f 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 73 74 eom->FirstLinest
11370 72 69 6e 67 3b 0a 09 20 20 77 68 69 6c 65 20 28 ring;.. while (
11380 6c 69 6e 65 29 0a 09 20 20 20 20 7b 0a 09 09 2a line).. {...*
11390 73 69 7a 65 20 2b 3d 20 35 3b 09 2f 2a 20 65 6e size += 5;./* en
113a0 74 69 74 79 20 68 65 61 64 65 72 20 2a 2f 0a 09 tity header */..
113b0 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
113c0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
113d0 41 5f 58 59 5f 5a 0a 09 09 20 20 20 20 7c 7c 20 A_XY_Z... ||
113e0 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
113f0 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
11400 4d 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b M)... *size +
11410 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 20 = (4 + ((sizeof
11420 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 20 2a 20 (double) * 3) *
11430 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 line->Points));.
11440 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 /* # points + [x
11450 2c 79 2c 7a 5d 20 66 6f 72 20 65 61 63 68 20 76 ,y,z] for each v
11460 65 72 74 65 78 20 2a 2f 0a 09 09 65 6c 73 65 20 ertex */...else
11470 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
11480 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
11490 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 2a _XY_Z_M)... *
114a0 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 size += (4 + ((s
114b0 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a izeof (double) *
114c0 20 34 29 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 6e 4) * line->Poin
114d0 74 73 29 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 ts));./* # point
114e0 73 20 2b 20 5b 78 2c 79 2c 7a 2c 6d 5d 20 66 6f s + [x,y,z,m] fo
114f0 72 20 65 61 63 68 20 76 65 72 74 65 78 20 2a 2f r each vertex */
11500 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 2a 73 ...else... *s
11510 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 ize += (4 + ((si
11520 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 zeof (double) *
11530 32 29 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 2) * line->Point
11540 73 29 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 s));./* # points
11550 20 2b 20 5b 78 2c 79 5d 20 66 6f 72 20 65 61 63 + [x,y] for eac
11560 68 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 6c 69 h vertex */...li
11570 6e 65 20 3d 20 6c 69 6e 65 2d 3e 4e 65 78 74 3b ne = line->Next;
11580 0a 09 20 20 20 20 7d 0a 09 20 20 70 6f 6c 79 67 .. }.. polyg
11590 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 6f = geom->FirstPo
115a0 6c 79 67 6f 6e 3b 0a 09 20 20 77 68 69 6c 65 20 lygon;.. while
115b0 28 70 6f 6c 79 67 29 0a 09 20 20 20 20 7b 0a 09 (polyg).. {..
115c0 09 2a 73 69 7a 65 20 2b 3d 20 35 3b 09 2f 2a 20 .*size += 5;./*
115d0 65 6e 74 69 74 79 20 68 65 61 64 65 72 20 2a 2f entity header */
115e0 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e ...rng = polyg->
115f0 45 78 74 65 72 69 6f 72 3b 0a 09 09 69 66 20 28 Exterior;...if (
11600 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
11610 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
11620 5a 0a 09 09 20 20 20 20 7c 7c 20 67 65 6f 6d 2d Z... || geom-
11630 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
11640 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
11650 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 *size += (8
11660 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 + ((sizeof (doub
11670 6c 65 29 20 2a 20 33 29 20 2a 20 72 6e 67 2d 3e le) * 3) * rng->
11680 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 72 Points));./* # r
11690 69 6e 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 ings + # points
116a0 2b 20 5b 78 2c 79 2c 7a 5d 20 61 72 72 61 79 20 + [x,y,z] array
116b0 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 - exterior ring
116c0 2a 2f 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 */...else if (ge
116d0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
116e0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
116f0 4d 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b M)... *size +
11700 3d 20 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 20 = (8 + ((sizeof
11710 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 20 2a 20 (double) * 4) *
11720 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f rng->Points));./
11730 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f * # rings + # po
11740 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 2c 6d 5d ints + [x,y,z,m]
11750 20 61 72 72 61 79 20 2d 20 65 78 74 65 72 69 6f array - exterio
11760 72 20 72 69 6e 67 20 2a 2f 0a 09 09 65 6c 73 65 r ring */...else
11770 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 ... *size +=
11780 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 (8 + ((sizeof (d
11790 6f 75 62 6c 65 29 20 2a 20 32 29 20 2a 20 72 6e ouble) * 2) * rn
117a0 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 g->Points));./*
117b0 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f 69 6e # rings + # poin
117c0 74 73 20 2b 20 5b 78 2c 79 5d 20 61 72 72 61 79 ts + [x,y] array
117d0 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 - exterior ring
117e0 20 2a 2f 0a 09 09 66 6f 72 20 28 69 62 20 3d 20 */...for (ib =
117f0 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 0; ib < polyg->N
11800 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b umInteriors; ib+
11810 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 +)... {...
11820 20 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e rng = polyg->In
11830 74 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 teriors + ib;...
11840 20 20 20 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e if (geom->
11850 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
11860 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 09 09 20 = GAIA_XY_Z....
11870 20 7c 7c 20 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 || geom->Dimens
11880 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
11890 5f 58 59 5f 4d 29 0a 09 09 09 20 20 2a 73 69 7a _XY_M).... *siz
118a0 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 e += (4 + ((size
118b0 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 of (double) * 3)
118c0 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 * rng->Points))
118d0 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 ;./* # points +
118e0 5b 78 2c 79 2c 7a 5d 20 61 72 72 61 79 20 2d 20 [x,y,z] array -
118f0 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
11900 0a 09 09 20 20 20 20 20 20 65 6c 73 65 20 69 66 ... else if
11910 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
11920 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
11930 59 5f 5a 5f 4d 29 0a 09 09 09 20 20 2a 73 69 7a Y_Z_M).... *siz
11940 65 20 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 e += (4 + ((size
11950 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 of (double) * 4)
11960 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 * rng->Points))
11970 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 ;./* # points +
11980 5b 78 2c 79 2c 7a 2c 6d 5d 20 61 72 72 61 79 20 [x,y,z,m] array
11990 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 - interior ring
119a0 2a 2f 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a */... else.
119b0 09 09 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 34 ... *size += (4
119c0 20 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 + ((sizeof (dou
119d0 62 6c 65 29 20 2a 20 32 29 20 2a 20 72 6e 67 2d ble) * 2) * rng-
119e0 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 >Points));./* #
119f0 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 5d 20 61 points + [x,y] a
11a00 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 20 rray - interior
11a10 72 69 6e 67 20 2a 2f 0a 09 09 20 20 7d 0a 09 09 ring */... }...
11a20 70 6f 6c 79 67 20 3d 20 70 6f 6c 79 67 2d 3e 4e polyg = polyg->N
11a30 65 78 74 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 ext;.. }.
11a40 20 20 7d 3b 0a 20 20 20 20 2a 72 65 73 75 6c 74 };. *result
11a50 20 3d 20 6d 61 6c 6c 6f 63 20 28 2a 73 69 7a 65 = malloc (*size
11a60 29 3b 0a 20 20 20 20 70 74 72 20 3d 20 2a 72 65 );. ptr = *re
11a70 73 75 6c 74 3b 0a 2f 2a 20 61 6e 64 20 66 69 6e sult;./* and fin
11a80 61 6c 6c 79 20 77 65 20 62 75 69 6c 64 20 74 68 ally we build th
11a90 65 20 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 73 77 e BLOB */. sw
11aa0 69 74 63 68 20 28 74 79 70 65 29 0a 20 20 20 20 itch (type).
11ab0 20 20 7b 0a 20 20 20 20 20 20 63 61 73 65 20 47 {. case G
11ac0 41 49 41 5f 50 4f 49 4e 54 3a 0a 09 20 20 2a 70 AIA_POINT:.. *p
11ad0 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 tr = GAIA_MARK_S
11ae0 54 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 TART;./* START s
11af0 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a ignature */.. *
11b00 28 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 (ptr + 1) = GAIA
11b10 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 _LITTLE_ENDIAN;.
11b20 2f 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 /* byte ordering
11b30 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
11b40 74 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 t32 (ptr + 2, ge
11b50 6f 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 om->Srid, 1, end
11b60 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 ian_arch);./* th
11b70 65 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 e SRID */.. gai
11b80 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
11b90 20 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 6, geom->MinX,
11ba0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
11bb0 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 ./* MBR - minimu
11bc0 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 m X */.. gaiaEx
11bd0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 port64 (ptr + 14
11be0 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c , geom->MinY, 1,
11bf0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
11c00 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 * MBR - minimum
11c10 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f Y */.. gaiaExpo
11c20 72 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 rt64 (ptr + 22,
11c30 67 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 geom->MaxX, 1, e
11c40 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
11c50 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 MBR - maximum X
11c60 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
11c70 36 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 64 (ptr + 30, ge
11c80 6f 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 om->MaxY, 1, end
11c90 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
11ca0 52 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f R - maximum Y */
11cb0 0a 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 .. *(ptr + 38)
11cc0 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b = GAIA_MARK_MBR;
11cd0 09 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 ./* MBR signatur
11ce0 65 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f e */.. gaiaExpo
11cf0 72 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 rt32 (ptr + 39,
11d00 47 41 49 41 5f 50 4f 49 4e 54 2c 20 31 2c 20 65 GAIA_POINT, 1, e
11d10 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
11d20 63 6c 61 73 73 20 50 4f 49 4e 54 20 2a 2f 0a 09 class POINT */..
11d30 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
11d40 70 74 72 20 2b 20 34 33 2c 20 70 6f 69 6e 74 2d ptr + 43, point-
11d50 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 >X, 1, endian_ar
11d60 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 20 20 ch);./* X */..
11d70 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
11d80 72 20 2b 20 35 31 2c 20 70 6f 69 6e 74 2d 3e 59 r + 51, point->Y
11d90 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
11da0 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 20 20 2a 28 );./* Y */.. *(
11db0 70 74 72 20 2b 20 35 39 29 20 3d 20 47 41 49 41 ptr + 59) = GAIA
11dc0 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e _MARK_END;./* EN
11dd0 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 D signature */..
11de0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
11df0 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 5a 3a ase GAIA_POINTZ:
11e00 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f .. *ptr = GAIA_
11e10 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 MARK_START;./* S
11e20 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a TART signature *
11e30 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 /.. *(ptr + 1)
11e40 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e = GAIA_LITTLE_EN
11e50 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 DIAN;./* byte or
11e60 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 dering */.. gai
11e70 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
11e80 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 2, geom->Srid,
11e90 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
11ea0 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a ./* the SRID */.
11eb0 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
11ec0 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e (ptr + 6, geom->
11ed0 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MinX, 1, endian_
11ee0 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
11ef0 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 minimum X */..
11f00 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
11f10 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 r + 14, geom->Mi
11f20 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 nY, 1, endian_ar
11f30 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 ch);./* MBR - mi
11f40 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 nimum Y */.. ga
11f50 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
11f60 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 + 22, geom->MaxX
11f70 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
11f80 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 );./* MBR - maxi
11f90 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 mum X */.. gaia
11fa0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
11fb0 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 30, geom->MaxY,
11fc0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
11fd0 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 ./* MBR - maximu
11fe0 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 m Y */.. *(ptr
11ff0 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 + 38) = GAIA_MAR
12000 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 K_MBR;./* MBR si
12010 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 gnature */.. ga
12020 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
12030 2b 20 33 39 2c 20 47 41 49 41 5f 50 4f 49 4e 54 + 39, GAIA_POINT
12040 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Z, 1, endian_arc
12050 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 49 h);./* class POI
12060 4e 54 20 58 59 5a 20 2a 2f 0a 09 20 20 67 61 69 NT XYZ */.. gai
12070 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
12080 20 34 33 2c 20 70 6f 69 6e 74 2d 3e 58 2c 20 31 43, point->X, 1
12090 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
120a0 2f 2a 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 /* X */.. gaiaE
120b0 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 35 xport64 (ptr + 5
120c0 31 2c 20 70 6f 69 6e 74 2d 3e 59 2c 20 31 2c 20 1, point->Y, 1,
120d0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
120e0 20 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 Y */.. gaiaExp
120f0 6f 72 74 36 34 20 28 70 74 72 20 2b 20 35 39 2c ort64 (ptr + 59,
12100 20 70 6f 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 6e point->Z, 1, en
12110 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a dian_arch);./* Z
12120 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 36 */.. *(ptr + 6
12130 37 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 7) = GAIA_MARK_E
12140 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 ND;./* END signa
12150 74 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b ture */.. break
12160 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
12170 41 5f 50 4f 49 4e 54 4d 3a 0a 09 20 20 2a 70 74 A_POINTM:.. *pt
12180 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 r = GAIA_MARK_ST
12190 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 ART;./* START si
121a0 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 gnature */.. *(
121b0 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f ptr + 1) = GAIA_
121c0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f LITTLE_ENDIAN;./
121d0 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 * byte ordering
121e0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
121f0 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 32 (ptr + 2, geo
12200 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 m->Srid, 1, endi
12210 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
12220 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 SRID */.. gaia
12230 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
12240 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 6, geom->MinX, 1
12250 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
12260 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d /* MBR - minimum
12270 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 X */.. gaiaExp
12280 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c ort64 (ptr + 14,
12290 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 geom->MinY, 1,
122a0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
122b0 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 MBR - minimum Y
122c0 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
122d0 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 t64 (ptr + 22, g
122e0 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e eom->MaxX, 1, en
122f0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
12300 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a BR - maximum X *
12310 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
12320 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 4 (ptr + 30, geo
12330 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 m->MaxY, 1, endi
12340 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
12350 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a - maximum Y */.
12360 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d . *(ptr + 38) =
12370 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 GAIA_MARK_MBR;.
12380 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 /* MBR signature
12390 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
123a0 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 t32 (ptr + 39, G
123b0 41 49 41 5f 50 4f 49 4e 54 4d 2c 20 31 2c 20 65 AIA_POINTM, 1, e
123c0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
123d0 63 6c 61 73 73 20 50 4f 49 4e 54 20 58 59 4d 20 class POINT XYM
123e0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
123f0 36 34 20 28 70 74 72 20 2b 20 34 33 2c 20 70 6f 64 (ptr + 43, po
12400 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 int->X, 1, endia
12410 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f n_arch);./* X */
12420 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
12430 20 28 70 74 72 20 2b 20 35 31 2c 20 70 6f 69 6e (ptr + 51, poin
12440 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->Y, 1, endian_
12450 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 arch);./* Y */..
12460 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
12470 70 74 72 20 2b 20 35 39 2c 20 70 6f 69 6e 74 2d ptr + 59, point-
12480 3e 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 >M, 1, endian_ar
12490 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 20 20 ch);./* M */..
124a0 2a 28 70 74 72 20 2b 20 36 37 29 20 3d 20 47 41 *(ptr + 67) = GA
124b0 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 IA_MARK_END;./*
124c0 45 4e 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f END signature */
124d0 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
124e0 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
124f0 5a 4d 3a 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 ZM:.. *ptr = GA
12500 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f IA_MARK_START;./
12510 2a 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 * START signatur
12520 65 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 e */.. *(ptr +
12530 31 29 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 1) = GAIA_LITTLE
12540 5f 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 _ENDIAN;./* byte
12550 20 6f 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 ordering */..
12560 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
12570 72 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 r + 2, geom->Sri
12580 64 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 d, 1, endian_arc
12590 68 29 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 20 h);./* the SRID
125a0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
125b0 36 34 20 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 64 (ptr + 6, geo
125c0 6d 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 m->MinX, 1, endi
125d0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
125e0 20 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a - minimum X */.
125f0 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
12600 28 70 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d (ptr + 14, geom-
12610 3e 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e >MinY, 1, endian
12620 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d _arch);./* MBR -
12630 20 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 minimum Y */..
12640 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
12650 74 72 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d tr + 22, geom->M
12660 61 78 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 axX, 1, endian_a
12670 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d rch);./* MBR - m
12680 61 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 aximum X */.. g
12690 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
126a0 20 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 + 30, geom->Max
126b0 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Y, 1, endian_arc
126c0 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 h);./* MBR - max
126d0 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 imum Y */.. *(p
126e0 74 72 20 2b 20 33 38 29 20 3d 20 47 41 49 41 5f tr + 38) = GAIA_
126f0 4d 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 MARK_MBR;./* MBR
12700 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
12710 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 gaiaExport32 (p
12720 74 72 20 2b 20 33 39 2c 20 47 41 49 41 5f 50 4f tr + 39, GAIA_PO
12730 49 4e 54 5a 4d 2c 20 31 2c 20 65 6e 64 69 61 6e INTZM, 1, endian
12740 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 _arch);./* class
12750 20 50 4f 49 4e 54 20 58 59 5a 4d 20 2a 2f 0a 09 POINT XYZM */..
12760 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
12770 70 74 72 20 2b 20 34 33 2c 20 70 6f 69 6e 74 2d ptr + 43, point-
12780 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 >X, 1, endian_ar
12790 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 20 20 ch);./* X */..
127a0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
127b0 72 20 2b 20 35 31 2c 20 70 6f 69 6e 74 2d 3e 59 r + 51, point->Y
127c0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
127d0 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 20 20 67 61 );./* Y */.. ga
127e0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
127f0 2b 20 35 39 2c 20 70 6f 69 6e 74 2d 3e 5a 2c 20 + 59, point->Z,
12800 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
12810 09 2f 2a 20 4d 20 2a 2f 0a 09 20 20 67 61 69 61 ./* M */.. gaia
12820 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
12830 36 37 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 67, point->M, 1,
12840 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
12850 2a 20 5a 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 * Z */.. *(ptr
12860 2b 20 37 35 29 20 3d 20 47 41 49 41 5f 4d 41 52 + 75) = GAIA_MAR
12870 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 K_END;./* END si
12880 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 62 72 gnature */.. br
12890 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
128a0 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 3a GAIA_LINESTRING:
128b0 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f .. *ptr = GAIA_
128c0 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 MARK_START;./* S
128d0 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a TART signature *
128e0 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 /.. *(ptr + 1)
128f0 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e = GAIA_LITTLE_EN
12900 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 DIAN;./* byte or
12910 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 dering */.. gai
12920 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
12930 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 2, geom->Srid,
12940 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
12950 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a ./* the SRID */.
12960 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
12970 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e (ptr + 6, geom->
12980 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MinX, 1, endian_
12990 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
129a0 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 minimum X */..
129b0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
129c0 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 r + 14, geom->Mi
129d0 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 nY, 1, endian_ar
129e0 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 ch);./* MBR - mi
129f0 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 nimum Y */.. ga
12a00 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
12a10 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 + 22, geom->MaxX
12a20 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
12a30 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 );./* MBR - maxi
12a40 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 mum X */.. gaia
12a50 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
12a60 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 30, geom->MaxY,
12a70 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
12a80 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 ./* MBR - maximu
12a90 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 m Y */.. *(ptr
12aa0 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 + 38) = GAIA_MAR
12ab0 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 K_MBR;./* MBR si
12ac0 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 gnature */.. ga
12ad0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
12ae0 2b 20 33 39 2c 20 47 41 49 41 5f 4c 49 4e 45 53 + 39, GAIA_LINES
12af0 54 52 49 4e 47 2c 20 31 2c 20 65 6e 64 69 61 6e TRING, 1, endian
12b00 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 _arch);./* class
12b10 20 4c 49 4e 45 53 54 52 49 4e 47 20 2a 2f 0a 09 LINESTRING */..
12b20 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
12b30 70 74 72 20 2b 20 34 33 2c 20 6c 69 6e 65 2d 3e ptr + 43, line->
12b40 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 Points, 1, endia
12b50 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f n_arch);./* # po
12b60 69 6e 74 73 20 2a 2f 0a 09 20 20 70 74 72 20 2b ints */.. ptr +
12b70 3d 20 34 37 3b 0a 09 20 20 66 6f 72 20 28 69 76 = 47;.. for (iv
12b80 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 6e 65 2d = 0; iv < line-
12b90 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 >Points; iv++)..
12ba0 20 20 20 20 7b 0a 09 09 67 61 69 61 47 65 74 50 {...gaiaGetP
12bb0 6f 69 6e 74 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 oint (line->Coor
12bc0 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 3b ds, iv, &x, &y);
12bd0 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 ...gaiaExport64
12be0 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 (ptr, x, 1, endi
12bf0 61 6e 5f 61 72 63 68 29 3b 0a 09 09 67 61 69 61 an_arch);...gaia
12c00 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
12c10 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 8, y, 1, endian_
12c20 61 72 63 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 arch);...ptr +=
12c30 31 36 3b 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 16;.. }.. *p
12c40 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 tr = GAIA_MARK_E
12c50 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 ND;./* END signa
12c60 74 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b ture */.. break
12c70 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
12c80 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 09 A_LINESTRINGZ:..
12c90 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 *ptr = GAIA_MA
12ca0 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 41 RK_START;./* STA
12cb0 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a RT signature */.
12cc0 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 3d 20 . *(ptr + 1) =
12cd0 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
12ce0 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 65 AN;./* byte orde
12cf0 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 61 45 ring */.. gaiaE
12d00 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 32 xport32 (ptr + 2
12d10 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 2c , geom->Srid, 1,
12d20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
12d30 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a 09 20 * the SRID */..
12d40 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
12d50 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e 4d 69 tr + 6, geom->Mi
12d60 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 nX, 1, endian_ar
12d70 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 ch);./* MBR - mi
12d80 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 nimum X */.. ga
12d90 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
12da0 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 59 + 14, geom->MinY
12db0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
12dc0 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 );./* MBR - mini
12dd0 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 69 61 mum Y */.. gaia
12de0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
12df0 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 2c 20 22, geom->MaxX,
12e00 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
12e10 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 ./* MBR - maximu
12e20 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 m X */.. gaiaEx
12e30 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 33 30 port64 (ptr + 30
12e40 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 31 2c , geom->MaxY, 1,
12e50 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
12e60 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 * MBR - maximum
12e70 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 Y */.. *(ptr +
12e80 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 38) = GAIA_MARK_
12e90 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 67 6e MBR;./* MBR sign
12ea0 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 69 61 ature */.. gaia
12eb0 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 Export32 (ptr +
12ec0 33 39 2c 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 39, GAIA_LINESTR
12ed0 49 4e 47 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f INGZ, 1, endian_
12ee0 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 arch);./* class
12ef0 4c 49 4e 45 53 54 52 49 4e 47 20 58 59 5a 20 2a LINESTRING XYZ *
12f00 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 /.. gaiaExport3
12f10 32 20 28 70 74 72 20 2b 20 34 33 2c 20 6c 69 6e 2 (ptr + 43, lin
12f20 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e e->Points, 1, en
12f30 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 dian_arch);./* #
12f40 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 20 70 74 points */.. pt
12f50 72 20 2b 3d 20 34 37 3b 0a 09 20 20 66 6f 72 20 r += 47;.. for
12f60 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 (iv = 0; iv < li
12f70 6e 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b ne->Points; iv++
12f80 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 69 61 47 ).. {...gaiaG
12f90 65 74 50 6f 69 6e 74 58 59 5a 20 28 6c 69 6e 65 etPointXYZ (line
12fa0 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 ->Coords, iv, &x
12fb0 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 67 61 69 , &y, &z);...gai
12fc0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
12fd0 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
12fe0 68 29 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 h);...gaiaExport
12ff0 36 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 64 (ptr + 8, y,
13000 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
13010 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 ...gaiaExport64
13020 28 70 74 72 20 2b 20 31 36 2c 20 7a 2c 20 31 2c (ptr + 16, z, 1,
13030 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
13040 09 70 74 72 20 2b 3d 20 32 34 3b 0a 09 20 20 20 .ptr += 24;..
13050 20 7d 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 }.. *ptr = GAI
13060 41 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 A_MARK_END;./* E
13070 4e 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a ND signature */.
13080 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
13090 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 case GAIA_LINEST
130a0 52 49 4e 47 4d 3a 0a 09 20 20 2a 70 74 72 20 3d RINGM:.. *ptr =
130b0 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 GAIA_MARK_START
130c0 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 67 6e 61 ;./* START signa
130d0 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 70 74 72 ture */.. *(ptr
130e0 20 2b 20 31 29 20 3d 20 47 41 49 41 5f 4c 49 54 + 1) = GAIA_LIT
130f0 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 TLE_ENDIAN;./* b
13100 79 74 65 20 6f 72 64 65 72 69 6e 67 20 2a 2f 0a yte ordering */.
13110 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
13120 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e (ptr + 2, geom->
13130 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 6e 5f Srid, 1, endian_
13140 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 53 52 arch);./* the SR
13150 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 ID */.. gaiaExp
13160 6f 72 74 36 34 20 28 70 74 72 20 2b 20 36 2c 20 ort64 (ptr + 6,
13170 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 geom->MinX, 1, e
13180 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
13190 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 MBR - minimum X
131a0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
131b0 36 34 20 28 70 74 72 20 2b 20 31 34 2c 20 67 65 64 (ptr + 14, ge
131c0 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 om->MinY, 1, end
131d0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
131e0 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f R - minimum Y */
131f0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
13200 20 28 70 74 72 20 2b 20 32 32 2c 20 67 65 6f 6d (ptr + 22, geom
13210 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e 64 69 61 ->MaxX, 1, endia
13220 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
13230 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 - maximum X */..
13240 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
13250 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e ptr + 30, geom->
13260 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MaxY, 1, endian_
13270 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
13280 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 maximum Y */..
13290 2a 28 70 74 72 20 2b 20 33 38 29 20 3d 20 47 41 *(ptr + 38) = GA
132a0 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 IA_MARK_MBR;./*
132b0 4d 42 52 20 73 69 67 6e 61 74 75 72 65 20 2a 2f MBR signature */
132c0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
132d0 20 28 70 74 72 20 2b 20 33 39 2c 20 47 41 49 41 (ptr + 39, GAIA
132e0 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 2c 20 31 2c _LINESTRINGM, 1,
132f0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
13300 2a 20 63 6c 61 73 73 20 4c 49 4e 45 53 54 52 49 * class LINESTRI
13310 4e 47 20 58 59 4d 20 2a 2f 0a 09 20 20 67 61 69 NG XYM */.. gai
13320 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
13330 20 34 33 2c 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 43, line->Point
13340 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 s, 1, endian_arc
13350 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 h);./* # points
13360 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 34 37 3b */.. ptr += 47;
13370 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 30 3b .. for (iv = 0;
13380 20 69 76 20 3c 20 6c 69 6e 65 2d 3e 50 6f 69 6e iv < line->Poin
13390 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
133a0 0a 09 09 67 61 69 61 47 65 74 50 6f 69 6e 74 58 ...gaiaGetPointX
133b0 59 4d 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 YM (line->Coords
133c0 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d , iv, &x, &y, &m
133d0 29 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 );...gaiaExport6
133e0 34 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 4 (ptr, x, 1, en
133f0 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 67 61 dian_arch);...ga
13400 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
13410 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 + 8, y, 1, endia
13420 6e 5f 61 72 63 68 29 3b 0a 09 09 67 61 69 61 45 n_arch);...gaiaE
13430 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 xport64 (ptr + 1
13440 36 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 6, m, 1, endian_
13450 61 72 63 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 arch);...ptr +=
13460 32 34 3b 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 24;.. }.. *p
13470 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 tr = GAIA_MARK_E
13480 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 ND;./* END signa
13490 74 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b ture */.. break
134a0 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
134b0 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a A_LINESTRINGZM:.
134c0 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d . *ptr = GAIA_M
134d0 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 ARK_START;./* ST
134e0 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a 2f ART signature */
134f0 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 3d .. *(ptr + 1) =
13500 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
13510 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 IAN;./* byte ord
13520 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 61 ering */.. gaia
13530 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 Export32 (ptr +
13540 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 2, geom->Srid, 1
13550 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
13560 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a 09 /* the SRID */..
13570 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
13580 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e 4d ptr + 6, geom->M
13590 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 inX, 1, endian_a
135a0 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d rch);./* MBR - m
135b0 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 inimum X */.. g
135c0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
135d0 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 6e + 14, geom->Min
135e0 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Y, 1, endian_arc
135f0 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e h);./* MBR - min
13600 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 69 imum Y */.. gai
13610 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
13620 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 2c 22, geom->MaxX,
13630 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
13640 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d ;./* MBR - maxim
13650 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 um X */.. gaiaE
13660 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 33 xport64 (ptr + 3
13670 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 31 0, geom->MaxY, 1
13680 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
13690 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d /* MBR - maximum
136a0 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b Y */.. *(ptr +
136b0 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 38) = GAIA_MARK
136c0 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 67 _MBR;./* MBR sig
136d0 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 69 nature */.. gai
136e0 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
136f0 20 33 39 2c 20 47 41 49 41 5f 4c 49 4e 45 53 54 39, GAIA_LINEST
13700 52 49 4e 47 5a 4d 2c 20 31 2c 20 65 6e 64 69 61 RINGZM, 1, endia
13710 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 n_arch);./* clas
13720 73 20 4c 49 4e 45 53 54 52 49 4e 47 20 58 59 5a s LINESTRING XYZ
13730 4d 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f M */.. gaiaExpo
13740 72 74 33 32 20 28 70 74 72 20 2b 20 34 33 2c 20 rt32 (ptr + 43,
13750 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c line->Points, 1,
13760 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
13770 2a 20 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 * # points */..
13780 20 70 74 72 20 2b 3d 20 34 37 3b 0a 09 20 20 66 ptr += 47;.. f
13790 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c or (iv = 0; iv <
137a0 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 line->Points; i
137b0 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 v++).. {...ga
137c0 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 iaGetPointXYZM (
137d0 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 line->Coords, iv
137e0 2c 20 26 78 2c 20 26 79 2c 20 26 7a 2c 20 26 6d , &x, &y, &z, &m
137f0 29 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 );...gaiaExport6
13800 34 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 4 (ptr, x, 1, en
13810 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 67 61 dian_arch);...ga
13820 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
13830 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 + 8, y, 1, endia
13840 6e 5f 61 72 63 68 29 3b 0a 09 09 67 61 69 61 45 n_arch);...gaiaE
13850 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 xport64 (ptr + 1
13860 36 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 6, z, 1, endian_
13870 61 72 63 68 29 3b 0a 09 09 67 61 69 61 45 78 70 arch);...gaiaExp
13880 6f 72 74 36 34 20 28 70 74 72 20 2b 20 32 34 2c ort64 (ptr + 24,
13890 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 m, 1, endian_ar
138a0 63 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 33 32 ch);...ptr += 32
138b0 3b 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 ;.. }.. *ptr
138c0 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 = GAIA_MARK_END
138d0 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 ;./* END signatu
138e0 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a re */.. break;.
138f0 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
13900 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 2a 70 74 72 POLYGON:.. *ptr
13910 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 = GAIA_MARK_STA
13920 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 67 RT;./* START sig
13930 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 70 nature */.. *(p
13940 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f 4c tr + 1) = GAIA_L
13950 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a ITTLE_ENDIAN;./*
13960 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 2a byte ordering *
13970 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 /.. gaiaExport3
13980 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2 (ptr + 2, geom
13990 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 ->Srid, 1, endia
139a0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 n_arch);./* the
139b0 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 45 SRID */.. gaiaE
139c0 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 36 xport64 (ptr + 6
139d0 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c , geom->MinX, 1,
139e0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
139f0 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 * MBR - minimum
13a00 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f X */.. gaiaExpo
13a10 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c 20 rt64 (ptr + 14,
13a20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 geom->MinY, 1, e
13a30 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
13a40 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 MBR - minimum Y
13a50 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
13a60 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 65 64 (ptr + 22, ge
13a70 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e 64 om->MaxX, 1, end
13a80 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
13a90 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a 2f R - maximum X */
13aa0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
13ab0 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 6d (ptr + 30, geom
13ac0 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 61 ->MaxY, 1, endia
13ad0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
13ae0 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 - maximum Y */..
13af0 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d 20 *(ptr + 38) =
13b00 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f GAIA_MARK_MBR;./
13b10 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 20 * MBR signature
13b20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
13b30 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 41 32 (ptr + 39, GA
13b40 49 41 5f 50 4f 4c 59 47 4f 4e 2c 20 31 2c 20 65 IA_POLYGON, 1, e
13b50 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
13b60 63 6c 61 73 73 20 50 4f 4c 59 47 4f 4e 20 2a 2f class POLYGON */
13b70 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
13b80 20 28 70 74 72 20 2b 20 34 33 2c 20 70 6f 6c 79 (ptr + 43, poly
13b90 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 20 g->NumInteriors
13ba0 2b 20 31 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 + 1, 1, endian_a
13bb0 72 63 68 29 3b 09 2f 2a 20 23 20 72 69 6e 67 73 rch);./* # rings
13bc0 20 2a 2f 0a 09 20 20 72 6e 67 20 3d 20 70 6f 6c */.. rng = pol
13bd0 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 yg->Exterior;..
13be0 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 gaiaExport32 (p
13bf0 74 72 20 2b 20 34 37 2c 20 72 6e 67 2d 3e 50 6f tr + 47, rng->Po
13c00 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f ints, 1, endian_
13c10 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e arch);./* # poin
13c20 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 ts - exterior ri
13c30 6e 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 ng */.. ptr +=
13c40 35 31 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 51;.. for (iv =
13c50 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 0; iv < rng->Po
13c60 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 ints; iv++)..
13c70 20 7b 0a 09 09 67 61 69 61 47 65 74 50 6f 69 6e {...gaiaGetPoin
13c80 74 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 t (rng->Coords,
13c90 69 76 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 67 iv, &x, &y);...g
13ca0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
13cb0 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , x, 1, endian_a
13cc0 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 65 78 74 rch);./* X - ext
13cd0 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 erior ring */...
13ce0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
13cf0 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 r + 8, y, 1, end
13d00 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 ian_arch);./* Y
13d10 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 - exterior ring
13d20 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 31 36 3b 0a */...ptr += 16;.
13d30 09 20 20 20 20 7d 0a 09 20 20 66 6f 72 20 28 69 . }.. for (i
13d40 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 b = 0; ib < poly
13d50 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b g->NumInteriors;
13d60 20 69 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 ib++).. {...
13d70 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 rng = polyg->Int
13d80 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 67 eriors + ib;...g
13d90 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
13da0 2c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 , rng->Points, 1
13db0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
13dc0 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2d 20 69 6e /* # points - in
13dd0 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
13de0 09 70 74 72 20 2b 3d 20 34 3b 0a 09 09 66 6f 72 .ptr += 4;...for
13df0 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 72 (iv = 0; iv < r
13e00 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b ng->Points; iv++
13e10 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
13e20 67 61 69 61 47 65 74 50 6f 69 6e 74 20 28 72 6e gaiaGetPoint (rn
13e30 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 g->Coords, iv, &
13e40 78 2c 20 26 79 29 3b 0a 09 09 20 20 20 20 20 20 x, &y);...
13e50 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
13e60 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f r, x, 1, endian_
13e70 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 69 6e arch);./* X - in
13e80 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
13e90 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
13ea0 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c t64 (ptr + 8, y,
13eb0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
13ec0 3b 09 2f 2a 20 59 20 2d 20 69 6e 74 65 72 69 6f ;./* Y - interio
13ed0 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 r ring */...
13ee0 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 20 ptr += 16;...
13ef0 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 }.. }.. *pt
13f00 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e r = GAIA_MARK_EN
13f10 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 D;./* END signat
13f20 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b ure */.. break;
13f30 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
13f40 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 2a 70 _POLYGONZ:.. *p
13f50 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 tr = GAIA_MARK_S
13f60 54 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 TART;./* START s
13f70 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a ignature */.. *
13f80 28 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 (ptr + 1) = GAIA
13f90 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 _LITTLE_ENDIAN;.
13fa0 2f 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 /* byte ordering
13fb0 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
13fc0 74 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 t32 (ptr + 2, ge
13fd0 6f 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 om->Srid, 1, end
13fe0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 ian_arch);./* th
13ff0 65 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 e SRID */.. gai
14000 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
14010 20 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 6, geom->MinX,
14020 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
14030 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 ./* MBR - minimu
14040 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 m X */.. gaiaEx
14050 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 port64 (ptr + 14
14060 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c , geom->MinY, 1,
14070 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
14080 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 * MBR - minimum
14090 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f Y */.. gaiaExpo
140a0 72 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 rt64 (ptr + 22,
140b0 67 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 geom->MaxX, 1, e
140c0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
140d0 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 MBR - maximum X
140e0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
140f0 36 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 64 (ptr + 30, ge
14100 6f 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 om->MaxY, 1, end
14110 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
14120 52 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f R - maximum Y */
14130 0a 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 .. *(ptr + 38)
14140 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b = GAIA_MARK_MBR;
14150 09 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 ./* MBR signatur
14160 65 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f e */.. gaiaExpo
14170 72 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 rt32 (ptr + 39,
14180 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 2c 20 31 GAIA_POLYGONZ, 1
14190 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
141a0 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 47 4f 4e /* class POLYGON
141b0 20 58 59 5a 20 2a 2f 0a 09 20 20 67 61 69 61 45 XYZ */.. gaiaE
141c0 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 34 xport32 (ptr + 4
141d0 33 2c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 3, polyg->NumInt
141e0 65 72 69 6f 72 73 20 2b 20 31 2c 20 31 2c 20 65 eriors + 1, 1, e
141f0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
14200 23 20 72 69 6e 67 73 20 2a 2f 0a 09 20 20 72 6e # rings */.. rn
14210 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 g = polyg->Exter
14220 69 6f 72 3b 0a 09 20 20 67 61 69 61 45 78 70 6f ior;.. gaiaExpo
14230 72 74 33 32 20 28 70 74 72 20 2b 20 34 37 2c 20 rt32 (ptr + 47,
14240 72 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 rng->Points, 1,
14250 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
14260 20 23 20 70 6f 69 6e 74 73 20 2d 20 65 78 74 65 # points - exte
14270 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 rior ring */..
14280 70 74 72 20 2b 3d 20 35 31 3b 0a 09 20 20 66 6f ptr += 51;.. fo
14290 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 r (iv = 0; iv <
142a0 72 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b rng->Points; iv+
142b0 2b 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 69 61 +).. {...gaia
142c0 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 72 6e 67 GetPointXYZ (rng
142d0 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 ->Coords, iv, &x
142e0 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 67 61 69 , &y, &z);...gai
142f0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
14300 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
14310 68 29 3b 09 2f 2a 20 58 20 2d 20 65 78 74 65 72 h);./* X - exter
14320 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 67 61 ior ring */...ga
14330 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
14340 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 + 8, y, 1, endia
14350 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d 20 n_arch);./* Y -
14360 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f exterior ring */
14370 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 ...gaiaExport64
14380 28 70 74 72 20 2b 20 31 36 2c 20 7a 2c 20 31 2c (ptr + 16, z, 1,
14390 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
143a0 2a 20 5a 20 2d 20 65 78 74 65 72 69 6f 72 20 72 * Z - exterior r
143b0 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 ing */...ptr +=
143c0 32 34 3b 0a 09 20 20 20 20 7d 0a 09 20 20 66 6f 24;.. }.. fo
143d0 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 r (ib = 0; ib <
143e0 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 polyg->NumInteri
143f0 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 20 20 ors; ib++)..
14400 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d {...rng = polyg-
14410 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 62 3b >Interiors + ib;
14420 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 20 ...gaiaExport32
14430 28 70 74 72 2c 20 72 6e 67 2d 3e 50 6f 69 6e 74 (ptr, rng->Point
14440 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 s, 1, endian_arc
14450 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 h);./* # points
14460 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 - interior ring
14470 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 34 3b 0a 09 */...ptr += 4;..
14480 09 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 .for (iv = 0; iv
14490 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 < rng->Points;
144a0 69 76 2b 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 iv++)... {...
144b0 20 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 gaiaGetPoint
144c0 58 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 XYZ (rng->Coords
144d0 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 7a , iv, &x, &y, &z
144e0 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 );... gaiaE
144f0 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 78 2c xport64 (ptr, x,
14500 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
14510 3b 09 2f 2a 20 58 20 2d 20 69 6e 74 65 72 69 6f ;./* X - interio
14520 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 r ring */...
14530 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
14540 70 74 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 ptr + 8, y, 1, e
14550 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
14560 59 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e Y - interior rin
14570 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 g */... gai
14580 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
14590 20 31 36 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 16, z, 1, endia
145a0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2d 20 n_arch);./* Z -
145b0 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
145c0 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 ... ptr +=
145d0 32 34 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d 24;... }.. }
145e0 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f .. *ptr = GAIA_
145f0 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 MARK_END;./* END
14600 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
14610 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
14620 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d se GAIA_POLYGONM
14630 3a 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 :.. *ptr = GAIA
14640 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 _MARK_START;./*
14650 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 START signature
14660 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 */.. *(ptr + 1)
14670 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 = GAIA_LITTLE_E
14680 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f NDIAN;./* byte o
14690 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 rdering */.. ga
146a0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
146b0 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c + 2, geom->Srid,
146c0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
146d0 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f ;./* the SRID */
146e0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
146f0 20 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d (ptr + 6, geom-
14700 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e >MinX, 1, endian
14710 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d _arch);./* MBR -
14720 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 minimum X */..
14730 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
14740 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d tr + 14, geom->M
14750 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 inY, 1, endian_a
14760 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d rch);./* MBR - m
14770 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 inimum Y */.. g
14780 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
14790 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 + 22, geom->Max
147a0 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 X, 1, endian_arc
147b0 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 h);./* MBR - max
147c0 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 imum X */.. gai
147d0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
147e0 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 30, geom->MaxY,
147f0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
14800 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d ;./* MBR - maxim
14810 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 um Y */.. *(ptr
14820 20 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 + 38) = GAIA_MA
14830 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 RK_MBR;./* MBR s
14840 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 ignature */.. g
14850 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
14860 20 2b 20 33 39 2c 20 47 41 49 41 5f 50 4f 4c 59 + 39, GAIA_POLY
14870 47 4f 4e 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f GONM, 1, endian_
14880 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 arch);./* class
14890 50 4f 4c 59 47 4f 4e 20 58 59 4d 20 2a 2f 0a 09 POLYGON XYM */..
148a0 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
148b0 70 74 72 20 2b 20 34 33 2c 20 70 6f 6c 79 67 2d ptr + 43, polyg-
148c0 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 20 2b 20 >NumInteriors +
148d0 31 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 1, 1, endian_arc
148e0 68 29 3b 09 2f 2a 20 23 20 72 69 6e 67 73 20 2a h);./* # rings *
148f0 2f 0a 09 20 20 72 6e 67 20 3d 20 70 6f 6c 79 67 /.. rng = polyg
14900 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 67 ->Exterior;.. g
14910 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
14920 20 2b 20 34 37 2c 20 72 6e 67 2d 3e 50 6f 69 6e + 47, rng->Poin
14930 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 ts, 1, endian_ar
14940 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 ch);./* # points
14950 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 - exterior ring
14960 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 35 31 */.. ptr += 51
14970 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 30 ;.. for (iv = 0
14980 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e ; iv < rng->Poin
14990 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
149a0 0a 09 09 67 61 69 61 47 65 74 50 6f 69 6e 74 58 ...gaiaGetPointX
149b0 59 4d 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c YM (rng->Coords,
149c0 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 iv, &x, &y, &m)
149d0 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 ;...gaiaExport64
149e0 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 (ptr, x, 1, end
149f0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
14a00 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 - exterior ring
14a10 2a 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 */...gaiaExport6
14a20 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 31 4 (ptr + 8, y, 1
14a30 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
14a40 2f 2a 20 59 20 2d 20 65 78 74 65 72 69 6f 72 20 /* Y - exterior
14a50 72 69 6e 67 20 2a 2f 0a 09 09 67 61 69 61 45 78 ring */...gaiaEx
14a60 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 36 port64 (ptr + 16
14a70 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , m, 1, endian_a
14a80 72 63 68 29 3b 09 2f 2a 20 4d 20 2d 20 65 78 74 rch);./* M - ext
14a90 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 erior ring */...
14aa0 70 74 72 20 2b 3d 20 32 34 3b 0a 09 20 20 20 20 ptr += 24;..
14ab0 7d 0a 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 }.. for (ib = 0
14ac0 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 ; ib < polyg->Nu
14ad0 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b mInteriors; ib++
14ae0 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d ).. {...rng =
14af0 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 polyg->Interior
14b00 73 20 2b 20 69 62 3b 0a 09 09 67 61 69 61 45 78 s + ib;...gaiaEx
14b10 70 6f 72 74 33 32 20 28 70 74 72 2c 20 72 6e 67 port32 (ptr, rng
14b20 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 ->Points, 1, end
14b30 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
14b40 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 6f points - interio
14b50 72 20 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 r ring */...ptr
14b60 2b 3d 20 34 3b 0a 09 09 66 6f 72 20 28 69 76 20 += 4;...for (iv
14b70 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 = 0; iv < rng->P
14b80 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 oints; iv++)...
14b90 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 47 {... gaiaG
14ba0 65 74 50 6f 69 6e 74 58 59 4d 20 28 72 6e 67 2d etPointXYM (rng-
14bb0 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c >Coords, iv, &x,
14bc0 20 26 79 2c 20 26 6d 29 3b 0a 09 09 20 20 20 20 &y, &m);...
14bd0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
14be0 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 ptr, x, 1, endia
14bf0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 n_arch);./* X -
14c00 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
14c10 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
14c20 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 ort64 (ptr + 8,
14c30 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 y, 1, endian_arc
14c40 68 29 3b 09 2f 2a 20 59 20 2d 20 69 6e 74 65 72 h);./* Y - inter
14c50 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 ior ring */...
14c60 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
14c70 20 28 70 74 72 20 2b 20 31 36 2c 20 6d 2c 20 31 (ptr + 16, m, 1
14c80 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
14c90 2f 2a 20 4d 20 2d 20 69 6e 74 65 72 69 6f 72 20 /* M - interior
14ca0 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 ring */...
14cb0 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 20 20 7d ptr += 24;... }
14cc0 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 20 .. }.. *ptr
14cd0 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b = GAIA_MARK_END;
14ce0 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 72 ./* END signatur
14cf0 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 e */.. break;.
14d00 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 case GAIA_P
14d10 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 2a 70 74 OLYGONZM:.. *pt
14d20 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 r = GAIA_MARK_ST
14d30 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 ART;./* START si
14d40 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 gnature */.. *(
14d50 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f ptr + 1) = GAIA_
14d60 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f LITTLE_ENDIAN;./
14d70 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 * byte ordering
14d80 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
14d90 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 32 (ptr + 2, geo
14da0 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 m->Srid, 1, endi
14db0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
14dc0 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 SRID */.. gaia
14dd0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
14de0 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 6, geom->MinX, 1
14df0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
14e00 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d /* MBR - minimum
14e10 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 X */.. gaiaExp
14e20 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c ort64 (ptr + 14,
14e30 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 geom->MinY, 1,
14e40 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
14e50 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 MBR - minimum Y
14e60 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
14e70 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 t64 (ptr + 22, g
14e80 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e eom->MaxX, 1, en
14e90 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
14ea0 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a BR - maximum X *
14eb0 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
14ec0 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 4 (ptr + 30, geo
14ed0 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 m->MaxY, 1, endi
14ee0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
14ef0 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a - maximum Y */.
14f00 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d . *(ptr + 38) =
14f10 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 GAIA_MARK_MBR;.
14f20 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 /* MBR signature
14f30 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
14f40 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 t32 (ptr + 39, G
14f50 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 2c 20 31 AIA_POLYGONZM, 1
14f60 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
14f70 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 47 4f 4e /* class POLYGON
14f80 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
14f90 74 33 32 20 28 70 74 72 20 2b 20 34 33 2c 20 70 t32 (ptr + 43, p
14fa0 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f olyg->NumInterio
14fb0 72 73 20 2b 20 31 2c 20 31 2c 20 65 6e 64 69 61 rs + 1, 1, endia
14fc0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 72 69 n_arch);./* # ri
14fd0 6e 67 73 20 2a 2f 0a 09 20 20 72 6e 67 20 3d 20 ngs */.. rng =
14fe0 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b polyg->Exterior;
14ff0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
15000 20 28 70 74 72 20 2b 20 34 37 2c 20 72 6e 67 2d (ptr + 47, rng-
15010 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 >Points, 1, endi
15020 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 an_arch);./* # p
15030 6f 69 6e 74 73 20 2d 20 65 78 74 65 72 69 6f 72 oints - exterior
15040 20 72 69 6e 67 20 2a 2f 0a 09 20 20 70 74 72 20 ring */.. ptr
15050 2b 3d 20 35 31 3b 0a 09 20 20 66 6f 72 20 28 69 += 51;.. for (i
15060 76 20 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d v = 0; iv < rng-
15070 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 >Points; iv++)..
15080 20 20 20 20 7b 0a 09 09 67 61 69 61 47 65 74 50 {...gaiaGetP
15090 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e 43 ointXYZM (rng->C
150a0 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
150b0 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 67 61 y, &z, &m);...ga
150c0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
150d0 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 x, 1, endian_ar
150e0 63 68 29 3b 09 2f 2a 20 58 20 2d 20 65 78 74 65 ch);./* X - exte
150f0 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 67 rior ring */...g
15100 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
15110 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 + 8, y, 1, endi
15120 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d an_arch);./* Y -
15130 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a exterior ring *
15140 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 /...gaiaExport64
15150 20 28 70 74 72 20 2b 20 31 36 2c 20 7a 2c 20 31 (ptr + 16, z, 1
15160 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
15170 2f 2a 20 5a 20 2d 20 65 78 74 65 72 69 6f 72 20 /* Z - exterior
15180 72 69 6e 67 20 2a 2f 0a 09 09 67 61 69 61 45 78 ring */...gaiaEx
15190 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 32 34 port64 (ptr + 24
151a0 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , m, 1, endian_a
151b0 72 63 68 29 3b 09 2f 2a 20 4d 20 2d 20 65 78 74 rch);./* M - ext
151c0 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 erior ring */...
151d0 70 74 72 20 2b 3d 20 33 32 3b 0a 09 20 20 20 20 ptr += 32;..
151e0 7d 0a 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 }.. for (ib = 0
151f0 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 ; ib < polyg->Nu
15200 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b mInteriors; ib++
15210 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d ).. {...rng =
15220 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 polyg->Interior
15230 73 20 2b 20 69 62 3b 0a 09 09 67 61 69 61 45 78 s + ib;...gaiaEx
15240 70 6f 72 74 33 32 20 28 70 74 72 2c 20 72 6e 67 port32 (ptr, rng
15250 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 ->Points, 1, end
15260 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
15270 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 6f points - interio
15280 72 20 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 r ring */...ptr
15290 2b 3d 20 34 3b 0a 09 09 66 6f 72 20 28 69 76 20 += 4;...for (iv
152a0 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 = 0; iv < rng->P
152b0 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 oints; iv++)...
152c0 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 47 {... gaiaG
152d0 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 etPointXYZM (rng
152e0 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 ->Coords, iv, &x
152f0 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 , &y, &z, &m);..
15300 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
15310 74 36 34 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 t64 (ptr, x, 1,
15320 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
15330 20 58 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 X - interior ri
15340 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 ng */... ga
15350 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
15360 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 + 8, y, 1, endia
15370 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d 20 n_arch);./* Y -
15380 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
15390 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
153a0 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 36 2c ort64 (ptr + 16,
153b0 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 z, 1, endian_ar
153c0 63 68 29 3b 09 2f 2a 20 5a 20 2d 20 65 78 74 65 ch);./* Z - exte
153d0 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 rior ring */...
153e0 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 gaiaExport6
153f0 34 20 28 70 74 72 20 2b 20 32 34 2c 20 6d 2c 20 4 (ptr + 24, m,
15400 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
15410 09 2f 2a 20 4d 20 2d 20 65 78 74 65 72 69 6f 72 ./* M - exterior
15420 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 ring */...
15430 20 70 74 72 20 2b 3d 20 33 32 3b 0a 09 09 20 20 ptr += 32;...
15440 7d 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 }.. }.. *ptr
15450 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 = GAIA_MARK_END
15460 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 ;./* END signatu
15470 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a re */.. break;.
15480 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 default:..
15490 20 20 2f 2a 20 74 68 69 73 20 6f 6e 65 20 69 73 /* this one is
154a0 20 61 20 4d 55 4c 54 49 78 78 78 78 20 6f 72 20 a MULTIxxxx or
154b0 61 20 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 a GEOMETRYCOLLEC
154c0 54 49 4f 4e 20 2d 20 62 75 69 6c 64 69 6e 67 20 TION - building
154d0 74 68 65 20 6d 61 69 6e 20 68 65 61 64 65 72 20 the main header
154e0 2a 2f 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 */.. *ptr = GAI
154f0 41 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a A_MARK_START;./*
15500 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 START signature
15510 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 */.. *(ptr + 1
15520 29 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f ) = GAIA_LITTLE_
15530 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 ENDIAN;./* byte
15540 6f 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 ordering */.. g
15550 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
15560 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 + 2, geom->Srid
15570 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
15580 29 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a );./* the SRID *
15590 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
155a0 34 20 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 4 (ptr + 6, geom
155b0 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 ->MinX, 1, endia
155c0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
155d0 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 - minimum X */..
155e0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
155f0 70 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e ptr + 14, geom->
15600 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MinY, 1, endian_
15610 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
15620 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 minimum Y */..
15630 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
15640 72 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 r + 22, geom->Ma
15650 78 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 xX, 1, endian_ar
15660 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 ch);./* MBR - ma
15670 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 ximum X */.. ga
15680 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
15690 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 + 30, geom->MaxY
156a0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
156b0 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 );./* MBR - maxi
156c0 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 mum Y */.. *(pt
156d0 72 20 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d r + 38) = GAIA_M
156e0 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 ARK_MBR;./* MBR
156f0 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 signature */..
15700 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
15710 72 20 2b 20 33 39 2c 20 74 79 70 65 2c 20 31 2c r + 39, type, 1,
15720 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
15730 2a 20 67 65 6f 6d 65 74 72 69 63 20 63 6c 61 73 * geometric clas
15740 73 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f s */.. gaiaExpo
15750 72 74 33 32 20 28 70 74 72 20 2b 20 34 33 2c 20 rt32 (ptr + 43,
15760 65 6e 74 69 74 69 65 73 2c 20 31 2c 20 65 6e 64 entities, 1, end
15770 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
15780 65 6e 74 69 74 69 65 73 20 2a 2f 0a 09 20 20 70 entities */.. p
15790 74 72 20 2b 3d 20 34 37 3b 0a 09 20 20 70 6f 69 tr += 47;.. poi
157a0 6e 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 nt = geom->First
157b0 50 6f 69 6e 74 3b 0a 09 20 20 77 68 69 6c 65 20 Point;.. while
157c0 28 70 6f 69 6e 74 29 0a 09 20 20 20 20 7b 0a 09 (point).. {..
157d0 09 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 .*ptr = GAIA_MAR
157e0 4b 5f 45 4e 54 49 54 59 3b 09 2f 2a 20 45 4e 54 K_ENTITY;./* ENT
157f0 49 54 59 20 73 69 67 6e 61 74 75 72 65 20 2a 2f ITY signature */
15800 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d ...if (geom->Dim
15810 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
15820 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 7b 0a AIA_XY_Z)... {.
15830 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
15840 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 47 rt32 (ptr + 1, G
15850 41 49 41 5f 50 4f 49 4e 54 5a 2c 20 31 2c 20 65 AIA_POINTZ, 1, e
15860 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
15870 63 6c 61 73 73 20 50 4f 49 4e 54 20 58 59 5a 20 class POINT XYZ
15880 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
15890 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 35 xport64 (ptr + 5
158a0 2c 20 70 6f 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 , point->X, 1, e
158b0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
158c0 58 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 X */... gai
158d0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
158e0 20 31 33 2c 20 70 6f 69 6e 74 2d 3e 59 2c 20 31 13, point->Y, 1
158f0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
15900 2f 2a 20 59 20 2a 2f 0a 09 09 20 20 20 20 20 20 /* Y */...
15910 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
15920 72 20 2b 20 32 31 2c 20 70 6f 69 6e 74 2d 3e 5a r + 21, point->Z
15930 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
15940 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 20 20 20 );./* Z */...
15950 20 20 20 70 74 72 20 2b 3d 20 32 39 3b 0a 09 09 ptr += 29;...
15960 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 67 }...else if (g
15970 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
15980 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d del == GAIA_XY_M
15990 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
159a0 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
159b0 72 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e r + 1, GAIA_POIN
159c0 54 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 TM, 1, endian_ar
159d0 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f ch);./* class PO
159e0 49 4e 54 20 58 59 4d 20 2a 2f 0a 09 09 20 20 20 INT XYM */...
159f0 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
15a00 28 70 74 72 20 2b 20 35 2c 20 70 6f 69 6e 74 2d (ptr + 5, point-
15a10 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 >X, 1, endian_ar
15a20 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 09 20 ch);./* X */...
15a30 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 gaiaExport6
15a40 34 20 28 70 74 72 20 2b 20 31 33 2c 20 70 6f 69 4 (ptr + 13, poi
15a50 6e 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 6e nt->Y, 1, endian
15a60 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a _arch);./* Y */.
15a70 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
15a80 72 74 36 34 20 28 70 74 72 20 2b 20 32 31 2c 20 rt64 (ptr + 21,
15a90 70 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 20 65 6e 64 point->M, 1, end
15aa0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 ian_arch);./* M
15ab0 2a 2f 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b */... ptr +
15ac0 3d 20 32 39 3b 0a 09 09 20 20 7d 0a 09 09 65 6c = 29;... }...el
15ad0 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
15ae0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
15af0 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 AIA_XY_Z_M)...
15b00 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 {... gaiaEx
15b10 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c port32 (ptr + 1,
15b20 20 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 2c 20 31 GAIA_POINTZM, 1
15b30 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
15b40 2f 2a 20 63 6c 61 73 73 20 50 4f 49 4e 54 20 58 /* class POINT X
15b50 59 5a 4d 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 YZM */... g
15b60 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
15b70 20 2b 20 35 2c 20 70 6f 69 6e 74 2d 3e 58 2c 20 + 5, point->X,
15b80 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
15b90 09 2f 2a 20 58 20 2a 2f 0a 09 09 20 20 20 20 20 ./* X */...
15ba0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
15bb0 74 72 20 2b 20 31 33 2c 20 70 6f 69 6e 74 2d 3e tr + 13, point->
15bc0 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Y, 1, endian_arc
15bd0 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 20 20 h);./* Y */...
15be0 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
15bf0 20 28 70 74 72 20 2b 20 32 31 2c 20 70 6f 69 6e (ptr + 21, poin
15c00 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->Z, 1, endian_
15c10 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 arch);./* Z */..
15c20 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
15c30 74 36 34 20 28 70 74 72 20 2b 20 32 39 2c 20 70 t64 (ptr + 29, p
15c40 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 20 65 6e 64 69 oint->M, 1, endi
15c50 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a an_arch);./* M *
15c60 2f 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d /... ptr +=
15c70 20 33 37 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 37;... }...els
15c80 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 e... {...
15c90 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
15ca0 72 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e r + 1, GAIA_POIN
15cb0 54 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 T, 1, endian_arc
15cc0 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 49 h);./* class POI
15cd0 4e 54 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 NT */... ga
15ce0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
15cf0 2b 20 35 2c 20 70 6f 69 6e 74 2d 3e 58 2c 20 31 + 5, point->X, 1
15d00 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
15d10 2f 2a 20 58 20 2a 2f 0a 09 09 20 20 20 20 20 20 /* X */...
15d20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
15d30 72 20 2b 20 31 33 2c 20 70 6f 69 6e 74 2d 3e 59 r + 13, point->Y
15d40 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
15d50 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 20 20 20 );./* Y */...
15d60 20 20 20 70 74 72 20 2b 3d 20 32 31 3b 0a 09 09 ptr += 21;...
15d70 20 20 7d 0a 09 09 70 6f 69 6e 74 20 3d 20 70 6f }...point = po
15d80 69 6e 74 2d 3e 4e 65 78 74 3b 0a 09 20 20 20 20 int->Next;..
15d90 7d 0a 09 20 20 6c 69 6e 65 20 3d 20 67 65 6f 6d }.. line = geom
15da0 2d 3e 46 69 72 73 74 4c 69 6e 65 73 74 72 69 6e ->FirstLinestrin
15db0 67 3b 0a 09 20 20 77 68 69 6c 65 20 28 6c 69 6e g;.. while (lin
15dc0 65 29 0a 09 20 20 20 20 7b 0a 09 09 2a 70 74 72 e).. {...*ptr
15dd0 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 54 = GAIA_MARK_ENT
15de0 49 54 59 3b 09 2f 2a 20 45 4e 54 49 54 59 20 73 ITY;./* ENTITY s
15df0 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 09 69 66 ignature */...if
15e00 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
15e10 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
15e20 59 5f 5a 29 0a 09 09 20 20 20 20 67 61 69 61 45 Y_Z)... gaiaE
15e30 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 xport32 (ptr + 1
15e40 2c 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e , GAIA_LINESTRIN
15e50 47 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 GZ, 1, endian_ar
15e60 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 4c 49 ch);./* class LI
15e70 4e 45 53 54 52 49 4e 47 20 58 59 5a 20 2a 2f 0a NESTRING XYZ */.
15e80 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
15e90 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
15ea0 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
15eb0 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 gaiaExport32
15ec0 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 41 5f (ptr + 1, GAIA_
15ed0 4c 49 4e 45 53 54 52 49 4e 47 4d 2c 20 31 2c 20 LINESTRINGM, 1,
15ee0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
15ef0 20 63 6c 61 73 73 20 4c 49 4e 45 53 54 52 49 4e class LINESTRIN
15f00 47 20 58 59 4d 20 2a 2f 0a 09 09 65 6c 73 65 20 G XYM */...else
15f10 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
15f20 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
15f30 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 67 _XY_Z_M)... g
15f40 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
15f50 20 2b 20 31 2c 20 47 41 49 41 5f 4c 49 4e 45 53 + 1, GAIA_LINES
15f60 54 52 49 4e 47 5a 4d 2c 20 31 2c 20 65 6e 64 69 TRINGZM, 1, endi
15f70 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 an_arch);./* cla
15f80 73 73 20 4c 49 4e 45 53 54 52 49 4e 47 20 58 59 ss LINESTRING XY
15f90 5a 4d 20 2a 2f 0a 09 09 65 6c 73 65 0a 09 09 20 ZM */...else...
15fa0 20 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 gaiaExport32
15fb0 28 70 74 72 20 2b 20 31 2c 20 47 41 49 41 5f 4c (ptr + 1, GAIA_L
15fc0 49 4e 45 53 54 52 49 4e 47 2c 20 31 2c 20 65 6e INESTRING, 1, en
15fd0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 dian_arch);./* c
15fe0 6c 61 73 73 20 4c 49 4e 45 53 54 52 49 4e 47 20 lass LINESTRING
15ff0 2a 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 */...gaiaExport3
16000 32 20 28 70 74 72 20 2b 20 35 2c 20 6c 69 6e 65 2 (ptr + 5, line
16010 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 ->Points, 1, end
16020 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
16030 70 6f 69 6e 74 73 20 2a 2f 0a 09 09 70 74 72 20 points */...ptr
16040 2b 3d 20 39 3b 0a 09 09 66 6f 72 20 28 69 76 20 += 9;...for (iv
16050 3d 20 30 3b 20 69 76 20 3c 20 6c 69 6e 65 2d 3e = 0; iv < line->
16060 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 Points; iv++)...
16070 20 20 7b 0a 09 09 20 20 20 20 20 20 69 66 20 28 {... if (
16080 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
16090 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
160a0 5a 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 Z)....{.... g
160b0 61 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 aiaGetPointXYZ (
160c0 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 line->Coords, iv
160d0 2c 20 26 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 , &x, &y, &z);..
160e0 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 65 ..}... else
160f0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
16100 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
16110 41 5f 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 A_XY_M)....{....
16120 20 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 gaiaGetPoint
16130 58 59 4d 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 XYM (line->Coord
16140 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 s, iv, &x, &y, &
16150 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 m);....}...
16160 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e else if (geom->
16170 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
16180 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 = GAIA_XY_Z_M)..
16190 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 ..{.... gaiaG
161a0 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 6c 69 6e etPointXYZM (lin
161b0 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 e->Coords, iv, &
161c0 78 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a x, &y, &z, &m);.
161d0 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 ...}... els
161e0 65 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 e....{.... ga
161f0 69 61 47 65 74 50 6f 69 6e 74 20 28 6c 69 6e 65 iaGetPoint (line
16200 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 ->Coords, iv, &x
16210 2c 20 26 79 29 3b 0a 09 09 09 7d 0a 09 09 20 20 , &y);....}...
16220 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
16230 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 (ptr, x, 1, end
16240 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
16250 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
16260 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 xport64 (ptr + 8
16270 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , y, 1, endian_a
16280 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 rch);./* Y */...
16290 20 20 20 20 20 20 70 74 72 20 2b 3d 20 31 36 3b ptr += 16;
162a0 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 65 6f ... if (geo
162b0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
162c0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a l == GAIA_XY_Z).
162d0 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 ...{.... gaia
162e0 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 7a Export64 (ptr, z
162f0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
16300 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 09 20 20 );./* Z */....
16310 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 7d ptr += 8;....}
16320 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 65 6f ... if (geo
16330 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
16340 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
16350 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 ...{.... gaia
16360 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 6d Export64 (ptr, m
16370 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
16380 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 09 20 20 );./* M */....
16390 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 7d ptr += 8;....}
163a0 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 65 6f ... if (geo
163b0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
163c0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
163d0 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 )....{.... ga
163e0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
163f0 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 z, 1, endian_ar
16400 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 09 ch);./* Z */....
16410 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
16420 20 28 70 74 72 20 2b 20 38 2c 20 6d 2c 20 31 2c (ptr + 8, m, 1,
16430 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
16440 2a 20 4d 20 2a 2f 0a 09 09 09 20 20 20 20 70 74 * M */.... pt
16450 72 20 2b 3d 20 31 36 3b 0a 09 09 09 7d 0a 09 09 r += 16;....}...
16460 20 20 7d 0a 09 09 6c 69 6e 65 20 3d 20 6c 69 6e }...line = lin
16470 65 2d 3e 4e 65 78 74 3b 0a 09 20 20 20 20 7d 0a e->Next;.. }.
16480 09 20 20 70 6f 6c 79 67 20 3d 20 67 65 6f 6d 2d . polyg = geom-
16490 3e 46 69 72 73 74 50 6f 6c 79 67 6f 6e 3b 0a 09 >FirstPolygon;..
164a0 20 20 77 68 69 6c 65 20 28 70 6f 6c 79 67 29 0a while (polyg).
164b0 09 20 20 20 20 7b 0a 09 09 2a 70 74 72 20 3d 20 . {...*ptr =
164c0 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 54 49 54 59 GAIA_MARK_ENTITY
164d0 3b 09 2f 2a 20 45 4e 54 49 54 59 20 73 69 67 6e ;./* ENTITY sign
164e0 61 74 75 72 65 20 2a 2f 0a 09 09 69 66 20 28 67 ature */...if (g
164f0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
16500 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
16510 29 0a 09 09 20 20 20 20 67 61 69 61 45 78 70 6f )... gaiaExpo
16520 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 47 rt32 (ptr + 1, G
16530 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 2c 20 31 2c AIA_POLYGONZ, 1,
16540 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
16550 2a 20 63 6c 61 73 73 20 50 4f 4c 59 47 4f 4e 20 * class POLYGON
16560 58 59 5a 20 2a 2f 0a 09 09 65 6c 73 65 20 69 66 XYZ */...else if
16570 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
16580 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
16590 59 5f 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 Y_M)... gaiaE
165a0 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 xport32 (ptr + 1
165b0 2c 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 2c , GAIA_POLYGONM,
165c0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
165d0 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 47 ;./* class POLYG
165e0 4f 4e 20 58 59 4d 20 2a 2f 0a 09 09 65 6c 73 65 ON XYM */...else
165f0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
16600 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
16610 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
16620 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
16630 72 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 4c 59 r + 1, GAIA_POLY
16640 47 4f 4e 5a 4d 2c 20 31 2c 20 65 6e 64 69 61 6e GONZM, 1, endian
16650 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 _arch);./* class
16660 20 50 4f 4c 59 47 4f 4e 20 58 59 5a 4d 20 2a 2f POLYGON XYZM */
16670 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 67 61 ...else... ga
16680 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
16690 2b 20 31 2c 20 47 41 49 41 5f 50 4f 4c 59 47 4f + 1, GAIA_POLYGO
166a0 4e 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 N, 1, endian_arc
166b0 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 4c h);./* class POL
166c0 59 47 4f 4e 20 2a 2f 0a 09 09 67 61 69 61 45 78 YGON */...gaiaEx
166d0 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 35 2c port32 (ptr + 5,
166e0 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 polyg->NumInter
166f0 69 6f 72 73 20 2b 20 31 2c 20 31 2c 20 65 6e 64 iors + 1, 1, end
16700 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
16710 72 69 6e 67 73 20 2a 2f 0a 09 09 72 6e 67 20 3d rings */...rng =
16720 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 polyg->Exterior
16730 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 ;...gaiaExport32
16740 20 28 70 74 72 20 2b 20 39 2c 20 72 6e 67 2d 3e (ptr + 9, rng->
16750 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 Points, 1, endia
16760 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f n_arch);./* # po
16770 69 6e 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 ints - exterior
16780 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d ring */...ptr +=
16790 20 31 33 3b 0a 09 09 66 6f 72 20 28 69 76 20 3d 13;...for (iv =
167a0 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 0; iv < rng->Po
167b0 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 ints; iv++)...
167c0 7b 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 65 {... if (ge
167d0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
167e0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 el == GAIA_XY_Z)
167f0 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 ....{.... gai
16800 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 72 6e aGetPointXYZ (rn
16810 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 g->Coords, iv, &
16820 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 09 7d x, &y, &z);....}
16830 0a 09 09 20 20 20 20 20 20 65 6c 73 65 20 69 66 ... else if
16840 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
16850 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
16860 59 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 Y_M)....{....
16870 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d gaiaGetPointXYM
16880 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 (rng->Coords, i
16890 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a v, &x, &y, &m);.
168a0 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 ...}... els
168b0 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
168c0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
168d0 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b 0a IA_XY_Z_M)....{.
168e0 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 6f ... gaiaGetPo
168f0 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e 43 6f intXYZM (rng->Co
16900 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 ords, iv, &x, &y
16910 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 09 7d 0a , &z, &m);....}.
16920 09 09 20 20 20 20 20 20 65 6c 73 65 0a 09 09 09 .. else....
16930 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 {.... gaiaGet
16940 50 6f 69 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f 72 Point (rng->Coor
16950 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 3b ds, iv, &x, &y);
16960 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 67 61 ....}... ga
16970 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
16980 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 x, 1, endian_ar
16990 63 68 29 3b 09 2f 2a 20 58 20 2d 20 65 78 74 65 ch);./* X - exte
169a0 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 rior ring */...
169b0 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 gaiaExport6
169c0 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 31 4 (ptr + 8, y, 1
169d0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
169e0 2f 2a 20 59 20 2d 20 65 78 74 65 72 69 6f 72 20 /* Y - exterior
169f0 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 ring */...
16a00 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 20 20 20 ptr += 16;...
16a10 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d if (geom->Dim
16a20 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
16a30 41 49 41 5f 58 59 5f 5a 29 0a 09 09 09 7b 0a 09 AIA_XY_Z)....{..
16a40 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
16a50 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 2c 20 65 64 (ptr, z, 1, e
16a60 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
16a70 5a 20 2a 2f 0a 09 09 09 20 20 20 20 70 74 72 20 Z */.... ptr
16a80 2b 3d 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 += 8;....}...
16a90 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d if (geom->Dim
16aa0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
16ab0 41 49 41 5f 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 AIA_XY_M)....{..
16ac0 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
16ad0 36 34 20 28 70 74 72 2c 20 6d 2c 20 31 2c 20 65 64 (ptr, m, 1, e
16ae0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
16af0 4d 20 2a 2f 0a 09 09 09 20 20 20 20 70 74 72 20 M */.... ptr
16b00 2b 3d 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 += 8;....}...
16b10 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d if (geom->Dim
16b20 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
16b30 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b AIA_XY_Z_M)....{
16b40 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 6f .... gaiaExpo
16b50 72 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 2c rt64 (ptr, z, 1,
16b60 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
16b70 2a 20 5a 20 2a 2f 0a 09 09 09 20 20 20 20 67 61 * Z */.... ga
16b80 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
16b90 2b 20 38 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 + 8, m, 1, endia
16ba0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f n_arch);./* M */
16bb0 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 31 .... ptr += 1
16bc0 36 3b 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 09 6;....}... }...
16bd0 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 for (ib = 0; ib
16be0 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 < polyg->NumInte
16bf0 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 09 20 riors; ib++)...
16c00 20 7b 0a 09 09 20 20 20 20 20 20 72 6e 67 20 3d {... rng =
16c10 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 polyg->Interior
16c20 73 20 2b 20 69 62 3b 0a 09 09 20 20 20 20 20 20 s + ib;...
16c30 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
16c40 72 2c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 r, rng->Points,
16c50 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
16c60 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2d 20 69 ./* # points - i
16c70 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a nterior ring */.
16c80 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 34 .. ptr += 4
16c90 3b 0a 09 09 20 20 20 20 20 20 66 6f 72 20 28 69 ;... for (i
16ca0 76 20 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d v = 0; iv < rng-
16cb0 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 >Points; iv++)..
16cc0 09 09 7b 0a 09 09 09 20 20 20 20 69 66 20 28 67 ..{.... if (g
16cd0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
16ce0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
16cf0 29 0a 09 09 09 20 20 20 20 20 20 7b 0a 09 09 09 ).... {....
16d00 09 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 . gaiaGetPointX
16d10 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c YZ (rng->Coords,
16d20 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 7a 29 iv, &x, &y, &z)
16d30 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 ;.... }....
16d40 20 20 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f else if (geo
16d50 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
16d60 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
16d70 09 09 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 ... {.....
16d80 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d gaiaGetPointXYM
16d90 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 (rng->Coords, i
16da0 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a v, &x, &y, &m);.
16db0 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 ... }....
16dc0 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d else if (geom-
16dd0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
16de0 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
16df0 09 09 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 ... {.....
16e00 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 5a gaiaGetPointXYZ
16e10 4d 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 M (rng->Coords,
16e20 69 76 2c 20 26 78 2c 20 26 79 2c 0a 09 09 09 09 iv, &x, &y,.....
16e30 09 09 20 20 20 20 26 7a 2c 20 26 6d 29 3b 0a 09 .. &z, &m);..
16e40 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 .. }....
16e50 20 65 6c 73 65 0a 09 09 09 20 20 20 20 20 20 7b else.... {
16e60 0a 09 09 09 09 20 20 67 61 69 61 47 65 74 50 6f ..... gaiaGetPo
16e70 69 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 int (rng->Coords
16e80 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 3b 0a 09 , iv, &x, &y);..
16e90 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 .. }....
16ea0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
16eb0 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e tr, x, 1, endian
16ec0 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 69 _arch);./* X - i
16ed0 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a nterior ring */.
16ee0 09 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 ... gaiaExpor
16ef0 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c t64 (ptr + 8, y,
16f00 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
16f10 3b 09 2f 2a 20 59 20 2d 20 69 6e 74 65 72 69 6f ;./* Y - interio
16f20 72 20 72 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 r ring */....
16f30 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 09 20 ptr += 16;....
16f40 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d if (geom->Dim
16f50 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
16f60 41 49 41 5f 58 59 5f 5a 29 0a 09 09 09 20 20 20 AIA_XY_Z)....
16f70 20 20 20 7b 0a 09 09 09 09 20 20 67 61 69 61 45 {..... gaiaE
16f80 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 7a 2c xport64 (ptr, z,
16f90 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
16fa0 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 09 09 20 20 ;./* Z */.....
16fb0 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 20 20 20 ptr += 8;....
16fc0 20 20 20 7d 0a 09 09 09 20 20 20 20 69 66 20 28 }.... if (
16fd0 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
16fe0 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
16ff0 4d 29 0a 09 09 09 20 20 20 20 20 20 7b 0a 09 09 M).... {...
17000 09 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
17010 20 28 70 74 72 2c 20 6d 2c 20 31 2c 20 65 6e 64 (ptr, m, 1, end
17020 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 ian_arch);./* M
17030 2a 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 */..... ptr +=
17040 38 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 8;.... }...
17050 09 20 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 . if (geom->D
17060 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
17070 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 GAIA_XY_Z_M)...
17080 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 67 . {..... g
17090 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
170a0 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , z, 1, endian_a
170b0 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 rch);./* Z */...
170c0 09 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
170d0 20 28 70 74 72 20 2b 20 38 2c 20 6d 2c 20 31 2c (ptr + 8, m, 1,
170e0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
170f0 2a 20 4d 20 2a 2f 0a 09 09 09 09 20 20 70 74 72 * M */..... ptr
17100 20 2b 3d 20 31 36 3b 0a 09 09 09 20 20 20 20 20 += 16;....
17110 20 7d 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 09 }....}... }...
17120 70 6f 6c 79 67 20 3d 20 70 6f 6c 79 67 2d 3e 4e polyg = polyg->N
17130 65 78 74 3b 0a 09 20 20 20 20 7d 0a 09 20 20 2a ext;.. }.. *
17140 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f ptr = GAIA_MARK_
17150 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e END;./* END sign
17160 61 74 75 72 65 20 2a 2f 0a 20 20 20 20 20 20 7d ature */. }
17170 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 ;.}..GAIAGEO_DEC
17180 4c 41 52 45 20 76 6f 69 64 0a 67 61 69 61 54 6f LARE void.gaiaTo
17190 53 70 61 74 69 61 4c 69 74 65 42 6c 6f 62 57 6b SpatiaLiteBlobWk
171a0 62 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 b (gaiaGeomCollP
171b0 74 72 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 tr geom, unsigne
171c0 64 20 63 68 61 72 20 2a 2a 72 65 73 75 6c 74 2c d char **result,
171d0 0a 09 09 09 20 69 6e 74 20 2a 73 69 7a 65 29 0a .... int *size).
171e0 7b 0a 2f 2a 20 0a 2a 20 62 75 69 6c 64 73 20 74 {./* .* builds t
171f0 68 65 20 53 70 61 74 69 61 4c 69 74 65 20 42 4c he SpatiaLite BL
17200 4f 42 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f OB representatio
17210 6e 20 66 6f 72 20 74 68 69 73 20 47 45 4f 4d 45 n for this GEOME
17220 54 52 59 20 0a 2a 20 63 6f 6e 76 65 6e 69 65 6e TRY .* convenien
17230 63 65 20 6d 65 74 68 6f 64 20 2d 20 61 6c 77 61 ce method - alwa
17240 79 73 20 64 69 73 61 62 6c 69 6e 67 20 47 50 4b ys disabling GPK
17250 47 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 G compatibility
17260 4d 6f 64 65 73 0a 2a 2f 0a 20 20 20 20 67 61 69 Modes.*/. gai
17270 61 54 6f 53 70 61 74 69 61 4c 69 74 65 42 6c 6f aToSpatiaLiteBlo
17280 62 57 6b 62 45 78 20 28 67 65 6f 6d 2c 20 72 65 bWkbEx (geom, re
17290 73 75 6c 74 2c 20 73 69 7a 65 2c 20 30 29 3b 0a sult, size, 0);.
172a0 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 }..GAIAGEO_DECLA
172b0 52 45 20 76 6f 69 64 0a 67 61 69 61 54 6f 43 6f RE void.gaiaToCo
172c0 6d 70 72 65 73 73 65 64 42 6c 6f 62 57 6b 62 20 mpressedBlobWkb
172d0 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
172e0 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 20 geom, unsigned
172f0 63 68 61 72 20 2a 2a 72 65 73 75 6c 74 2c 0a 09 char **result,..
17300 09 09 20 69 6e 74 20 2a 73 69 7a 65 29 0a 7b 0a .. int *size).{.
17310 2f 2a 20 0a 2f 20 62 75 69 6c 64 73 20 74 68 65 /* ./ builds the
17320 20 53 70 61 74 69 61 4c 69 74 65 20 42 4c 4f 42 SpatiaLite BLOB
17330 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 representation
17340 66 6f 72 20 74 68 69 73 20 47 45 4f 4d 45 54 52 for this GEOMETR
17350 59 20 0a 2f 20 67 65 6f 6d 65 74 72 79 2d 63 6f Y ./ geometry-co
17360 6d 70 72 65 73 73 69 6f 6e 20 77 69 6c 6c 20 62 mpression will b
17370 65 20 61 70 70 6c 69 65 64 20 74 6f 20 4c 49 4e e applied to LIN
17380 45 53 54 52 49 4e 47 73 20 61 6e 64 20 52 49 4e ESTRINGs and RIN
17390 47 73 0a 2a 2f 0a 20 20 20 20 69 6e 74 20 69 62 Gs.*/. int ib
173a0 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 ;. int iv;.
173b0 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 double x;.
173c0 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f double y;. do
173d0 75 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 uble z;. doub
173e0 6c 65 20 6d 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le m;. double
173f0 20 6c 61 73 74 5f 78 20 3d 20 30 2e 30 3b 0a 20 last_x = 0.0;.
17400 20 20 20 64 6f 75 62 6c 65 20 6c 61 73 74 5f 79 double last_y
17410 20 3d 20 30 2e 30 3b 0a 20 20 20 20 64 6f 75 62 = 0.0;. doub
17420 6c 65 20 6c 61 73 74 5f 7a 20 3d 20 30 2e 30 3b le last_z = 0.0;
17430 0a 20 20 20 20 66 6c 6f 61 74 20 66 78 3b 0a 20 . float fx;.
17440 20 20 20 66 6c 6f 61 74 20 66 79 3b 0a 20 20 20 float fy;.
17450 20 66 6c 6f 61 74 20 66 7a 3b 0a 20 20 20 20 69 float fz;. i
17460 6e 74 20 65 6e 74 69 74 69 65 73 20 3d 20 30 3b nt entities = 0;
17470 0a 20 20 20 20 69 6e 74 20 6e 5f 70 6f 69 6e 74 . int n_point
17480 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e s = 0;. int n
17490 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d 20 30 _linestrings = 0
174a0 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 70 6f 6c 79 ;. int n_poly
174b0 67 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e gons = 0;. in
174c0 74 20 74 79 70 65 3b 0a 20 20 20 20 75 6e 73 69 t type;. unsi
174d0 67 6e 65 64 20 63 68 61 72 20 2a 70 74 72 3b 0a gned char *ptr;.
174e0 20 20 20 20 67 61 69 61 50 6f 69 6e 74 50 74 72 gaiaPointPtr
174f0 20 70 74 3b 0a 20 20 20 20 67 61 69 61 4c 69 6e pt;. gaiaLin
17500 65 73 74 72 69 6e 67 50 74 72 20 6c 6e 3b 0a 20 estringPtr ln;.
17510 20 20 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 gaiaPolygonPt
17520 72 20 70 67 3b 0a 20 20 20 20 67 61 69 61 52 69 r pg;. gaiaRi
17530 6e 67 50 74 72 20 72 6e 67 3b 0a 20 20 20 20 67 ngPtr rng;. g
17540 61 69 61 50 6f 69 6e 74 50 74 72 20 70 6f 69 6e aiaPointPtr poin
17550 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 t = NULL;. ga
17560 69 61 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 iaLinestringPtr
17570 6c 69 6e 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 line = NULL;.
17580 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 gaiaPolygonPtr
17590 70 6f 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 polyg = NULL;.
175a0 20 20 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 int endian_arc
175b0 68 20 3d 20 67 61 69 61 45 6e 64 69 61 6e 41 72 h = gaiaEndianAr
175c0 63 68 20 28 29 3b 0a 20 20 20 20 67 61 69 61 4d ch ();. gaiaM
175d0 62 72 47 65 6f 6d 65 74 72 79 20 28 67 65 6f 6d brGeometry (geom
175e0 29 3b 0a 2f 2a 20 68 6f 77 20 6d 61 6e 79 20 65 );./* how many e
175f0 6e 74 69 74 69 65 73 2c 20 61 6e 64 20 6f 66 20 ntities, and of
17600 77 68 61 74 20 6b 69 6e 64 2c 20 64 6f 20 77 65 what kind, do we
17610 20 68 61 76 65 20 3f 20 2a 2f 0a 20 20 20 20 70 have ? */. p
17620 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 t = geom->FirstP
17630 6f 69 6e 74 3b 0a 20 20 20 20 77 68 69 6c 65 20 oint;. while
17640 28 70 74 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 (pt). {..
17650 70 6f 69 6e 74 20 3d 20 70 74 3b 0a 09 20 20 65 point = pt;.. e
17660 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 20 20 6e 5f ntities++;.. n_
17670 70 6f 69 6e 74 73 2b 2b 3b 0a 09 20 20 70 74 20 points++;.. pt
17680 3d 20 70 74 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 = pt->Next;.
17690 20 20 7d 0a 20 20 20 20 6c 6e 20 3d 20 67 65 6f }. ln = geo
176a0 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 73 74 72 69 m->FirstLinestri
176b0 6e 67 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6c ng;. while (l
176c0 6e 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 6c 69 n). {.. li
176d0 6e 65 20 3d 20 6c 6e 3b 0a 09 20 20 65 6e 74 69 ne = ln;.. enti
176e0 74 69 65 73 2b 2b 3b 0a 09 20 20 6e 5f 6c 69 6e ties++;.. n_lin
176f0 65 73 74 72 69 6e 67 73 2b 2b 3b 0a 09 20 20 6c estrings++;.. l
17700 6e 20 3d 20 6c 6e 2d 3e 4e 65 78 74 3b 0a 20 20 n = ln->Next;.
17710 20 20 20 20 7d 0a 20 20 20 20 70 67 20 3d 20 67 }. pg = g
17720 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c 79 67 6f eom->FirstPolygo
17730 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 67 n;. while (pg
17740 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 70 6f 6c ). {.. pol
17750 79 67 20 3d 20 70 67 3b 0a 09 20 20 65 6e 74 69 yg = pg;.. enti
17760 74 69 65 73 2b 2b 3b 0a 09 20 20 6e 5f 70 6f 6c ties++;.. n_pol
17770 79 67 6f 6e 73 2b 2b 3b 0a 09 20 20 70 67 20 3d ygons++;.. pg =
17780 20 70 67 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 pg->Next;.
17790 20 7d 0a 20 20 20 20 2a 73 69 7a 65 20 3d 20 30 }. *size = 0
177a0 3b 0a 20 20 20 20 2a 72 65 73 75 6c 74 20 3d 20 ;. *result =
177b0 4e 55 4c 4c 3b 0a 20 20 20 20 69 66 20 28 6e 5f NULL;. if (n_
177c0 70 6f 69 6e 74 73 20 3d 3d 20 30 20 26 26 20 6e points == 0 && n
177d0 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 20 26 _polygons == 0 &
177e0 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 & n_linestrings
177f0 3d 3d 20 30 29 0a 09 72 65 74 75 72 6e 3b 0a 2f == 0)..return;./
17800 2a 20 6f 6b 2c 20 77 65 20 63 61 6e 20 64 65 74 * ok, we can det
17810 65 72 6d 69 6e 65 20 74 68 65 20 67 65 6f 6d 65 ermine the geome
17820 74 72 79 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 try class */.
17830 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d if (n_points ==
17840 20 31 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 1 && n_linestri
17850 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f ngs == 0 && n_po
17860 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 20 lygons == 0).
17870 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d {.. if (geom
17880 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d ->DeclaredType =
17890 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e = GAIA_MULTIPOIN
178a0 54 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 T).. {...if (
178b0 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
178c0 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
178d0 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 Z)... type =
178e0 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a GAIA_MULTIPOINTZ
178f0 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
17900 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
17910 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
17920 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
17930 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 3b 0a 09 A_MULTIPOINTM;..
17940 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
17950 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
17960 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 = GAIA_XY_Z_M)..
17970 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
17980 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 3b 0a 09 _MULTIPOINTZM;..
17990 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 .else... type
179a0 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 = GAIA_MULTIPOI
179b0 4e 54 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c NT;.. }.. el
179c0 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 se if (geom->Dec
179d0 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
179e0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
179f0 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 TION).. {...i
17a00 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
17a10 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
17a20 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
17a30 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
17a40 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 COLLECTIONZ;...e
17a50 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
17a60 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
17a70 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 GAIA_XY_M)...
17a80 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
17a90 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
17aa0 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
17ab0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
17ac0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
17ad0 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
17ae0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
17af0 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 ECTIONZM;...else
17b00 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
17b10 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
17b20 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 CTION;.. }..
17b30 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 else.. {...i
17b40 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
17b50 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
17b60 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
17b70 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 5a 3b 0a = GAIA_POINTZ;.
17b80 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
17b90 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
17ba0 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
17bb0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
17bc0 50 4f 49 4e 54 4d 3b 0a 09 09 65 6c 73 65 20 69 POINTM;...else i
17bd0 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
17be0 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
17bf0 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 XY_Z_M)... ty
17c00 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 5a pe = GAIA_POINTZ
17c10 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 M;...else...
17c20 74 79 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e type = GAIA_POIN
17c30 54 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 T;.. }.
17c40 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e }. else if (n
17c50 5f 70 6f 69 6e 74 73 20 3e 20 31 20 26 26 20 6e _points > 1 && n
17c60 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 _linestrings ==
17c70 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 0 && n_polygons
17c80 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 == 0). {..
17c90 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 if (geom->Decla
17ca0 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f redType == GAIA_
17cb0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
17cc0 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 ON).. {...if
17cd0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
17ce0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
17cf0 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
17d00 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
17d10 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 6c 73 LLECTIONZ;...els
17d20 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
17d30 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
17d40 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
17d50 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
17d60 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a TRYCOLLECTIONM;.
17d70 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
17d80 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
17d90 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
17da0 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
17db0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
17dc0 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 TIONZM;...else..
17dd0 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
17de0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
17df0 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 ION;.. }.. e
17e00 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 lse.. {...if
17e10 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
17e20 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
17e30 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
17e40 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 GAIA_MULTIPOINT
17e50 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 Z;...else if (ge
17e60 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
17e70 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 el == GAIA_XY_M)
17e80 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
17e90 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 3b 0a IA_MULTIPOINTM;.
17ea0 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
17eb0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
17ec0 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
17ed0 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
17ee0 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 3b 0a A_MULTIPOINTZM;.
17ef0 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 ..else... typ
17f00 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
17f10 49 4e 54 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 INT;.. }.
17f20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
17f30 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 20 26 (n_points == 0 &
17f40 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 & n_linestrings
17f50 3d 3d 20 31 20 26 26 20 6e 5f 70 6f 6c 79 67 6f == 1 && n_polygo
17f60 6e 73 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b ns == 0). {
17f70 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 .. if (geom->De
17f80 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 claredType == GA
17f90 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 IA_MULTILINESTRI
17fa0 4e 47 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 NG).. {...if
17fb0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
17fc0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
17fd0 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
17fe0 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
17ff0 54 52 49 4e 47 5a 3b 0a 09 09 65 6c 73 65 20 69 TRINGZ;...else i
18000 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
18010 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
18020 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 XY_M)... type
18030 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e = GAIA_MULTILIN
18040 45 53 54 52 49 4e 47 4d 3b 0a 09 09 65 6c 73 65 ESTRINGM;...else
18050 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
18060 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
18070 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
18080 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
18090 49 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3b 0a 09 ILINESTRINGZM;..
180a0 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 .else... type
180b0 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e = GAIA_MULTILIN
180c0 45 53 54 52 49 4e 47 3b 0a 09 20 20 20 20 7d 0a ESTRING;.. }.
180d0 09 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d . else if (geom
180e0 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d ->DeclaredType =
180f0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
18100 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 OLLECTION)..
18110 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 {...if (geom->Di
18120 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
18130 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 GAIA_XY_Z)...
18140 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
18150 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
18160 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
18170 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
18180 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
18190 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
181a0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
181b0 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 TIONM;...else if
181c0 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
181d0 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
181e0 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 Y_Z_M)... typ
181f0 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 e = GAIA_GEOMETR
18200 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 YCOLLECTIONZM;..
18210 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 .else... type
18220 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
18230 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 20 COLLECTION;..
18240 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 }.. else..
18250 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 {...if (geom->Di
18260 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
18270 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 GAIA_XY_Z)...
18280 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4c 49 4e type = GAIA_LIN
18290 45 53 54 52 49 4e 47 5a 3b 0a 09 09 65 6c 73 65 ESTRINGZ;...else
182a0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
182b0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
182c0 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 A_XY_M)... ty
182d0 70 65 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 pe = GAIA_LINEST
182e0 52 49 4e 47 4d 3b 0a 09 09 65 6c 73 65 20 69 66 RINGM;...else if
182f0 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
18300 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
18310 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 Y_Z_M)... typ
18320 65 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 e = GAIA_LINESTR
18330 49 4e 47 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 INGZM;...else...
18340 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
18350 4c 49 4e 45 53 54 52 49 4e 47 3b 0a 09 20 20 20 LINESTRING;..
18360 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 }. }. e
18370 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 lse if (n_points
18380 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 == 0 && n_lines
18390 74 72 69 6e 67 73 20 3e 20 31 20 26 26 20 6e 5f trings > 1 && n_
183a0 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 polygons == 0).
183b0 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 {.. if (ge
183c0 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 om->DeclaredType
183d0 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 == GAIA_GEOMETR
183e0 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 YCOLLECTION)..
183f0 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e {...if (geom->
18400 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
18410 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 = GAIA_XY_Z)...
18420 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
18430 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
18440 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 NZ;...else if (g
18450 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
18460 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d del == GAIA_XY_M
18470 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
18480 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
18490 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 ECTIONM;...else
184a0 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
184b0 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
184c0 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 _XY_Z_M)... t
184d0 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
184e0 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3b TRYCOLLECTIONZM;
184f0 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 ...else... ty
18500 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 pe = GAIA_GEOMET
18510 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 RYCOLLECTION;..
18520 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 }.. else..
18530 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e {...if (geom->
18540 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
18550 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 = GAIA_XY_Z)...
18560 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d type = GAIA_M
18570 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 3b ULTILINESTRINGZ;
18580 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
18590 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
185a0 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 == GAIA_XY_M)..
185b0 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
185c0 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
185d0 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 M;...else if (ge
185e0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
185f0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
18600 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 M)... type =
18610 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
18620 52 49 4e 47 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 RINGZM;...else..
18630 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
18640 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
18650 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 7d ;.. }. }
18660 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e 5f . else if (n_
18670 70 6f 69 6e 74 73 20 3d 3d 20 30 20 26 26 20 6e points == 0 && n
18680 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 _linestrings ==
18690 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 0 && n_polygons
186a0 3d 3d 20 31 29 0a 20 20 20 20 20 20 7b 0a 09 20 == 1). {..
186b0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 if (geom->Decla
186c0 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f redType == GAIA_
186d0 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 29 0a 09 20 MULTIPOLYGON)..
186e0 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d {...if (geom-
186f0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
18700 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 == GAIA_XY_Z)...
18710 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
18720 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 3b 0a 09 MULTIPOLYGONZ;..
18730 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
18740 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
18750 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 = GAIA_XY_M)...
18760 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d type = GAIA_M
18770 55 4c 54 49 50 4f 4c 59 47 4f 4e 4d 3b 0a 09 09 ULTIPOLYGONM;...
18780 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
18790 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
187a0 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 GAIA_XY_Z_M)...
187b0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
187c0 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3b 0a MULTIPOLYGONZM;.
187d0 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 ..else... typ
187e0 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
187f0 4c 59 47 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 LYGON;.. }..
18800 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e else if (geom->
18810 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 DeclaredType ==
18820 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
18830 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a LECTION).. {.
18840 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 ..if (geom->Dime
18850 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
18860 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 IA_XY_Z)... t
18870 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
18880 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a TRYCOLLECTIONZ;.
18890 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
188a0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
188b0 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
188c0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
188d0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
188e0 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 ONM;...else if (
188f0 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
18900 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
18910 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 Z_M)... type
18920 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
18930 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 OLLECTIONZM;...e
18940 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d lse... type =
18950 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
18960 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d LLECTION;.. }
18970 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a .. else.. {.
18980 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 ..if (geom->Dime
18990 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
189a0 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 IA_XY_Z)... t
189b0 79 70 65 20 3d 20 47 41 49 41 5f 50 4f 4c 59 47 ype = GAIA_POLYG
189c0 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 ONZ;...else if (
189d0 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
189e0 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
189f0 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 M)... type =
18a00 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3b 0a 09 GAIA_POLYGONM;..
18a10 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
18a20 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
18a30 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 = GAIA_XY_Z_M)..
18a40 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
18a50 5f 50 4f 4c 59 47 4f 4e 5a 4d 3b 0a 09 09 65 6c _POLYGONZM;...el
18a60 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 se... type =
18a70 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 3b 0a 09 20 GAIA_POLYGON;..
18a80 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
18a90 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e else if (n_poin
18aa0 74 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e ts == 0 && n_lin
18ab0 65 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 26 26 estrings == 0 &&
18ac0 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3e 20 31 29 n_polygons > 1)
18ad0 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 . {.. if (
18ae0 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 geom->DeclaredTy
18af0 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
18b00 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 TRYCOLLECTION)..
18b10 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
18b20 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
18b30 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
18b40 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
18b50 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
18b60 49 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 IONZ;...else if
18b70 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
18b80 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
18b90 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _M)... type =
18ba0 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
18bb0 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 LLECTIONM;...els
18bc0 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
18bd0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
18be0 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
18bf0 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
18c00 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
18c10 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 M;...else...
18c20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d type = GAIA_GEOM
18c30 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a ETRYCOLLECTION;.
18c40 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
18c50 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
18c60 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
18c70 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
18c80 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
18c90 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 3b 0a _MULTIPOLYGONZ;.
18ca0 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
18cb0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
18cc0 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
18cd0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
18ce0 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 4d 3b 0a 09 MULTIPOLYGONM;..
18cf0 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
18d00 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
18d10 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 = GAIA_XY_Z_M)..
18d20 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
18d30 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3b _MULTIPOLYGONZM;
18d40 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 79 ...else... ty
18d50 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 pe = GAIA_MULTIP
18d60 4f 4c 59 47 4f 4e 3b 0a 09 20 20 20 20 7d 0a 20 OLYGON;.. }.
18d70 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 0a }. else.
18d80 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 {.. if (g
18d90 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
18da0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
18db0 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 ).. type =
18dc0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
18dd0 4c 45 43 54 49 4f 4e 5a 3b 0a 09 20 20 65 6c 73 LECTIONZ;.. els
18de0 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
18df0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
18e00 49 41 5f 58 59 5f 4d 29 0a 09 20 20 20 20 20 20 IA_XY_M)..
18e10 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d type = GAIA_GEOM
18e20 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b ETRYCOLLECTIONM;
18e30 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f .. else if (geo
18e40 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
18e50 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
18e60 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 ).. type =
18e70 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
18e80 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 20 20 65 6c LECTIONZM;.. el
18e90 73 65 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d se.. type =
18ea0 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
18eb0 4c 4c 45 43 54 49 4f 4e 3b 0a 20 20 20 20 20 20 LLECTION;.
18ec0 7d 0a 2f 2a 20 61 6e 64 20 6e 6f 77 20 77 65 20 }./* and now we
18ed0 63 6f 6d 70 75 74 65 20 74 68 65 20 73 69 7a 65 compute the size
18ee0 20 6f 66 20 42 4c 4f 42 20 2a 2f 0a 20 20 20 20 of BLOB */.
18ef0 2a 73 69 7a 65 20 3d 20 34 34 3b 09 09 09 2f 2a *size = 44;.../*
18f00 20 68 65 61 64 65 72 20 73 69 7a 65 20 2a 2f 0a header size */.
18f10 20 20 20 20 73 77 69 74 63 68 20 28 74 79 70 65 switch (type
18f20 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 ). {.
18f30 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 3a case GAIA_POINT:
18f40 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 73 69 .. *size += (si
18f50 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 zeof (double) *
18f60 32 29 3b 09 2f 2a 20 5b 78 2c 79 5d 20 63 6f 6f 2);./* [x,y] coo
18f70 72 64 73 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b rds */.. break;
18f80 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
18f90 5f 50 4f 49 4e 54 5a 3a 0a 09 20 20 2a 73 69 7a _POINTZ:.. *siz
18fa0 65 20 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 6f e += (sizeof (do
18fb0 75 62 6c 65 29 20 2a 20 33 29 3b 09 2f 2a 20 5b uble) * 3);./* [
18fc0 78 2c 79 2c 7a 5d 20 63 6f 6f 72 64 73 20 2a 2f x,y,z] coords */
18fd0 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
18fe0 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 case GAIA_POINT
18ff0 4d 3a 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 M:.. *size += (
19000 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 sizeof (double)
19010 2a 20 33 29 3b 09 2f 2a 20 5b 78 2c 79 2c 6d 5d * 3);./* [x,y,m]
19020 20 63 6f 6f 72 64 73 20 2a 2f 0a 09 20 20 62 72 coords */.. br
19030 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
19040 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 3a 0a 09 20 GAIA_POINTZM:..
19050 20 2a 73 69 7a 65 20 2b 3d 20 28 73 69 7a 65 6f *size += (sizeo
19060 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 3b f (double) * 4);
19070 09 2f 2a 20 5b 78 2c 79 2c 7a 2c 6d 5d 20 63 6f ./* [x,y,z,m] co
19080 6f 72 64 73 20 2a 2f 0a 09 20 20 62 72 65 61 6b ords */.. break
19090 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
190a0 41 5f 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 20 A_LINESTRING:..
190b0 20 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 *size += (4 + (
190c0 38 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 8 * line->Points
190d0 29 20 2b 20 31 36 29 3b 09 2f 2a 20 23 20 70 6f ) + 16);./* # po
190e0 69 6e 74 73 20 2b 20 5b 78 2c 79 5d 20 66 6f 72 ints + [x,y] for
190f0 20 65 61 63 68 20 76 65 72 74 65 78 20 2a 2f 0a each vertex */.
19100 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
19110 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 case GAIA_LINEST
19120 52 49 4e 47 5a 3a 0a 09 20 20 2a 73 69 7a 65 20 RINGZ:.. *size
19130 2b 3d 20 28 34 20 2b 20 28 31 32 20 2a 20 6c 69 += (4 + (12 * li
19140 6e 65 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 32 34 ne->Points) + 24
19150 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b );./* # points +
19160 20 5b 78 2c 79 2c 7a 5d 20 66 6f 72 20 65 61 63 [x,y,z] for eac
19170 68 20 76 65 72 74 65 78 20 2a 2f 0a 09 20 20 62 h vertex */.. b
19180 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
19190 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
191a0 4d 3a 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 M:.. *size += (
191b0 34 20 2b 20 28 31 36 20 2a 20 6c 69 6e 65 2d 3e 4 + (16 * line->
191c0 50 6f 69 6e 74 73 29 20 2b 20 31 36 29 3b 09 2f Points) + 16);./
191d0 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c * # points + [x,
191e0 79 2c 6d 5d 20 66 6f 72 20 65 61 63 68 20 76 65 y,m] for each ve
191f0 72 74 65 78 20 2a 2f 0a 09 20 20 62 72 65 61 6b rtex */.. break
19200 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
19210 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a A_LINESTRINGZM:.
19220 09 20 20 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b . *size += (4 +
19230 20 28 32 30 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 (20 * line->Poi
19240 6e 74 73 29 20 2b 20 32 34 29 3b 09 2f 2a 20 23 nts) + 24);./* #
19250 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a points + [x,y,z
19260 2c 6d 5d 20 66 6f 72 20 65 61 63 68 20 76 65 72 ,m] for each ver
19270 74 65 78 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b tex */.. break;
19280 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
19290 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 72 6e 67 _POLYGON:.. rng
192a0 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 = polyg->Exteri
192b0 6f 72 3b 0a 09 20 20 2a 73 69 7a 65 20 2b 3d 20 or;.. *size +=
192c0 28 38 20 2b 20 28 38 20 2a 20 72 6e 67 2d 3e 50 (8 + (8 * rng->P
192d0 6f 69 6e 74 73 29 20 2b 20 31 36 29 3b 09 2f 2a oints) + 16);./*
192e0 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f 69 # rings + # poi
192f0 6e 74 73 20 2b 20 5b 78 2e 79 5d 20 61 72 72 61 nts + [x.y] arra
19300 79 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e y - exterior rin
19310 67 20 2a 2f 0a 09 20 20 66 6f 72 20 28 69 62 20 g */.. for (ib
19320 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d = 0; ib < polyg-
19330 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 >NumInteriors; i
19340 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e b++).. {...rn
19350 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 g = polyg->Inter
19360 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 2a 73 69 iors + ib;...*si
19370 7a 65 20 2b 3d 20 28 34 20 2b 20 28 38 20 2a 20 ze += (4 + (8 *
19380 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 31 rng->Points) + 1
19390 36 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 6);./* # points
193a0 2b 20 5b 78 2c 79 5d 20 61 72 72 61 79 20 2d 20 + [x,y] array -
193b0 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
193c0 0a 09 20 20 20 20 7d 0a 09 20 20 62 72 65 61 6b .. }.. break
193d0 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
193e0 41 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 72 A_POLYGONZ:.. r
193f0 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
19400 72 69 6f 72 3b 0a 09 20 20 2a 73 69 7a 65 20 2b rior;.. *size +
19410 3d 20 28 38 20 2b 20 28 31 32 20 2a 20 72 6e 67 = (8 + (12 * rng
19420 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 32 34 29 3b ->Points) + 24);
19430 09 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 ./* # rings + #
19440 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d points + [x,y,z]
19450 20 61 72 72 61 79 20 2d 20 65 78 74 65 72 69 6f array - exterio
19460 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 66 6f 72 r ring */.. for
19470 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 (ib = 0; ib < p
19480 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f olyg->NumInterio
19490 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 20 20 7b rs; ib++).. {
194a0 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e ...rng = polyg->
194b0 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a Interiors + ib;.
194c0 09 09 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 ..*size += (4 +
194d0 28 31 32 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 (12 * rng->Point
194e0 73 29 20 2b 20 32 34 29 3b 09 2f 2a 20 23 20 70 s) + 24);./* # p
194f0 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 oints + [x,y,z]
19500 61 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 array - interior
19510 20 72 69 6e 67 20 2a 2f 0a 09 20 20 20 20 7d 0a ring */.. }.
19520 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
19530 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f case GAIA_POLYGO
19540 4e 4d 3a 0a 09 20 20 72 6e 67 20 3d 20 70 6f 6c NM:.. rng = pol
19550 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 yg->Exterior;..
19560 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 2b 20 28 *size += (8 + (
19570 31 36 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 16 * rng->Points
19580 29 20 2b 20 31 36 29 3b 09 2f 2a 20 23 20 72 69 ) + 16);./* # ri
19590 6e 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b ngs + # points +
195a0 20 5b 78 2c 79 2c 6d 5d 20 61 72 72 61 79 20 2d [x,y,m] array -
195b0 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a exterior ring *
195c0 2f 0a 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 /.. for (ib = 0
195d0 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 ; ib < polyg->Nu
195e0 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b mInteriors; ib++
195f0 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d ).. {...rng =
19600 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 polyg->Interior
19610 73 20 2b 20 69 62 3b 0a 09 09 2a 73 69 7a 65 20 s + ib;...*size
19620 2b 3d 20 28 34 20 2b 20 28 31 36 20 2a 20 72 6e += (4 + (16 * rn
19630 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 31 36 29 g->Points) + 16)
19640 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 ;./* # points +
19650 5b 78 2c 79 2c 6d 5d 20 61 72 72 61 79 20 2d 20 [x,y,m] array -
19660 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f interior ring */
19670 0a 09 20 20 20 20 7d 0a 09 20 20 62 72 65 61 6b .. }.. break
19680 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 ;. case GAI
19690 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 A_POLYGONZM:..
196a0 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 rng = polyg->Ext
196b0 65 72 69 6f 72 3b 0a 09 20 20 2a 73 69 7a 65 20 erior;.. *size
196c0 2b 3d 20 28 38 20 2b 20 28 32 30 20 2a 20 72 6e += (8 + (20 * rn
196d0 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 32 34 29 g->Points) + 24)
196e0 3b 09 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 ;./* # rings + #
196f0 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a points + [x,y,z
19700 2c 6d 5d 20 61 72 72 61 79 20 2d 20 65 78 74 65 ,m] array - exte
19710 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 rior ring */..
19720 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 for (ib = 0; ib
19730 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 < polyg->NumInte
19740 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 riors; ib++)..
19750 20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 {...rng = poly
19760 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 g->Interiors + i
19770 62 3b 0a 09 09 2a 73 69 7a 65 20 2b 3d 20 28 34 b;...*size += (4
19780 20 2b 20 28 32 30 20 2a 20 72 6e 67 2d 3e 50 6f + (20 * rng->Po
19790 69 6e 74 73 29 20 2b 20 32 34 29 3b 09 2f 2a 20 ints) + 24);./*
197a0 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c # points + [x,y,
197b0 7a 2c 6d 5d 20 61 72 72 61 79 20 2d 20 69 6e 74 z,m] array - int
197c0 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 erior ring */..
197d0 20 20 20 7d 0a 09 20 20 62 72 65 61 6b 3b 0a 20 }.. break;.
197e0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 default:..
197f0 20 2f 2a 20 74 68 69 73 20 6f 6e 65 20 69 73 20 /* this one is
19800 6e 6f 74 20 61 20 73 69 6d 70 6c 65 20 67 65 6f not a simple geo
19810 6d 65 74 72 79 3b 20 73 68 6f 75 6c 64 20 62 65 metry; should be
19820 20 61 20 4d 55 4c 54 49 78 78 78 78 20 6f 72 20 a MULTIxxxx or
19830 61 20 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 a GEOMETRYCOLLEC
19840 54 49 4f 4e 20 2a 2f 0a 09 20 20 2a 73 69 7a 65 TION */.. *size
19850 20 2b 3d 20 34 3b 09 09 2f 2a 20 23 20 65 6e 74 += 4;../* # ent
19860 69 74 69 65 73 20 2a 2f 0a 09 20 20 70 6f 69 6e ities */.. poin
19870 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 t = geom->FirstP
19880 6f 69 6e 74 3b 0a 09 20 20 77 68 69 6c 65 20 28 oint;.. while (
19890 70 6f 69 6e 74 29 0a 09 20 20 20 20 7b 0a 09 09 point).. {...
198a0 2a 73 69 7a 65 20 2b 3d 20 35 3b 09 2f 2a 20 65 *size += 5;./* e
198b0 6e 74 69 74 79 20 68 65 61 64 65 72 20 2a 2f 0a ntity header */.
198c0 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 ..if (geom->Dime
198d0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
198e0 49 41 5f 58 59 5f 5a 0a 09 09 20 20 20 20 7c 7c IA_XY_Z... ||
198f0 20 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e geom->Dimension
19900 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
19910 5f 4d 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 _M)... *size
19920 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 += (sizeof (doub
19930 6c 65 29 20 2a 20 33 29 3b 09 2f 2a 20 74 68 72 le) * 3);./* thr
19940 65 65 20 64 6f 75 62 6c 65 73 20 66 6f 72 20 65 ee doubles for e
19950 61 63 68 20 50 4f 49 4e 54 20 2a 2f 0a 09 09 65 ach POINT */...e
19960 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
19970 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
19980 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 GAIA_XY_Z_M)...
19990 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 73 69 7a *size += (siz
199a0 65 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 34 eof (double) * 4
199b0 29 3b 09 2f 2a 20 66 6f 75 72 20 64 6f 75 62 6c );./* four doubl
199c0 65 73 20 66 6f 72 20 65 61 63 68 20 50 4f 49 4e es for each POIN
199d0 54 20 2a 2f 0a 09 09 65 6c 73 65 0a 09 09 20 20 T */...else...
199e0 20 20 2a 73 69 7a 65 20 2b 3d 20 28 73 69 7a 65 *size += (size
199f0 6f 66 20 28 64 6f 75 62 6c 65 29 20 2a 20 32 29 of (double) * 2)
19a00 3b 09 2f 2a 20 74 77 6f 20 64 6f 75 62 6c 65 73 ;./* two doubles
19a10 20 66 6f 72 20 65 61 63 68 20 50 4f 49 4e 54 20 for each POINT
19a20 2a 2f 0a 09 09 70 6f 69 6e 74 20 3d 20 70 6f 69 */...point = poi
19a30 6e 74 2d 3e 4e 65 78 74 3b 0a 09 20 20 20 20 7d nt->Next;.. }
19a40 0a 09 20 20 6c 69 6e 65 20 3d 20 67 65 6f 6d 2d .. line = geom-
19a50 3e 46 69 72 73 74 4c 69 6e 65 73 74 72 69 6e 67 >FirstLinestring
19a60 3b 0a 09 20 20 77 68 69 6c 65 20 28 6c 69 6e 65 ;.. while (line
19a70 29 0a 09 20 20 20 20 7b 0a 09 09 2a 73 69 7a 65 ).. {...*size
19a80 20 2b 3d 20 35 3b 09 2f 2a 20 65 6e 74 69 74 79 += 5;./* entity
19a90 20 68 65 61 64 65 72 20 2a 2f 0a 09 09 69 66 20 header */...if
19aa0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
19ab0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
19ac0 5f 5a 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 _Z)... *size
19ad0 2b 3d 20 28 34 20 2b 20 28 31 32 20 2a 20 6c 69 += (4 + (12 * li
19ae0 6e 65 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 32 34 ne->Points) + 24
19af0 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b );./* # points +
19b00 20 5b 78 2c 79 2c 7a 5d 20 66 6f 72 20 65 61 63 [x,y,z] for eac
19b10 68 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 65 6c h vertex */...el
19b20 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
19b30 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
19b40 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 AIA_XY_M)...
19b50 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 31 *size += (4 + (1
19b60 36 20 2a 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 6 * line->Points
19b70 29 20 2b 20 31 36 29 3b 09 2f 2a 20 23 20 70 6f ) + 16);./* # po
19b80 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 6d 5d 20 66 ints + [x,y,m] f
19b90 6f 72 20 65 61 63 68 20 76 65 72 74 65 78 20 2a or each vertex *
19ba0 2f 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f /...else if (geo
19bb0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
19bc0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
19bd0 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d )... *size +=
19be0 20 28 34 20 2b 20 28 32 30 20 2a 20 6c 69 6e 65 (4 + (20 * line
19bf0 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 32 34 29 3b ->Points) + 24);
19c00 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
19c10 78 2c 79 2c 7a 2c 6d 5d 20 66 6f 72 20 65 61 63 x,y,z,m] for eac
19c20 68 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 65 6c h vertex */...el
19c30 73 65 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b se... *size +
19c40 3d 20 28 34 20 2b 20 28 38 20 2a 20 6c 69 6e 65 = (4 + (8 * line
19c50 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 31 36 29 3b ->Points) + 16);
19c60 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
19c70 78 2c 79 5d 20 66 6f 72 20 65 61 63 68 20 76 65 x,y] for each ve
19c80 72 74 65 78 20 2a 2f 0a 09 09 6c 69 6e 65 20 3d rtex */...line =
19c90 20 6c 69 6e 65 2d 3e 4e 65 78 74 3b 0a 09 20 20 line->Next;..
19ca0 20 20 7d 0a 09 20 20 70 6f 6c 79 67 20 3d 20 67 }.. polyg = g
19cb0 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c 79 67 6f eom->FirstPolygo
19cc0 6e 3b 0a 09 20 20 77 68 69 6c 65 20 28 70 6f 6c n;.. while (pol
19cd0 79 67 29 0a 09 20 20 20 20 7b 0a 09 09 2a 73 69 yg).. {...*si
19ce0 7a 65 20 2b 3d 20 35 3b 09 2f 2a 20 65 6e 74 69 ze += 5;./* enti
19cf0 74 79 20 68 65 61 64 65 72 20 2a 2f 0a 09 09 72 ty header */...r
19d00 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
19d10 72 69 6f 72 3b 0a 09 09 69 66 20 28 67 65 6f 6d rior;...if (geom
19d20 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
19d30 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
19d40 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 38 . *size += (8
19d50 20 2b 20 28 31 32 20 2a 20 72 6e 67 2d 3e 50 6f + (12 * rng->Po
19d60 69 6e 74 73 29 20 2b 20 32 34 29 3b 09 2f 2a 20 ints) + 24);./*
19d70 23 20 72 69 6e 67 73 20 2b 20 23 20 70 6f 69 6e # rings + # poin
19d80 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 61 72 72 ts + [x,y,z] arr
19d90 61 79 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 ay - exterior ri
19da0 6e 67 20 2a 2f 0a 09 09 65 6c 73 65 20 69 66 20 ng */...else if
19db0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
19dc0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
19dd0 5f 4d 29 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 _M)... *size
19de0 2b 3d 20 28 38 20 2b 20 28 31 36 20 2a 20 72 6e += (8 + (16 * rn
19df0 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 31 36 29 g->Points) + 16)
19e00 3b 09 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 ;./* # rings + #
19e10 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 6d points + [x,y,m
19e20 5d 20 61 72 72 61 79 20 2d 20 65 78 74 65 72 69 ] array - exteri
19e30 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 65 6c 73 or ring */...els
19e40 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
19e50 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
19e60 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
19e70 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 2b 20 28 *size += (8 + (
19e80 32 30 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 * rng->Points
19e90 29 20 2b 20 32 34 29 3b 09 2f 2a 20 23 20 72 69 ) + 24);./* # ri
19ea0 6e 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b ngs + # points +
19eb0 20 5b 78 2c 79 2c 7a 2c 6d 5d 20 61 72 72 61 79 [x,y,z,m] array
19ec0 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 - exterior ring
19ed0 20 2a 2f 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 */...else...
19ee0 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 2b 20 28 *size += (8 + (
19ef0 38 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 8 * rng->Points)
19f00 20 2b 20 31 36 29 3b 09 2f 2a 20 23 20 72 69 6e + 16);./* # rin
19f10 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b 20 gs + # points +
19f20 5b 78 2c 79 5d 20 61 72 72 61 79 20 2d 20 65 78 [x,y] array - ex
19f30 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
19f40 09 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 .for (ib = 0; ib
19f50 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 < polyg->NumInt
19f60 65 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 09 eriors; ib++)...
19f70 20 20 7b 0a 09 09 20 20 20 20 20 20 72 6e 67 20 {... rng
19f80 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f = polyg->Interio
19f90 72 73 20 2b 20 69 62 3b 0a 09 09 20 20 20 20 20 rs + ib;...
19fa0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
19fb0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
19fc0 41 5f 58 59 5f 5a 29 0a 09 09 09 20 20 2a 73 69 A_XY_Z).... *si
19fd0 7a 65 20 2b 3d 20 28 34 20 2b 20 28 31 32 20 2a ze += (4 + (12 *
19fe0 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 rng->Points) +
19ff0 32 34 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 24);./* # points
1a000 20 2b 20 5b 78 2c 79 2c 7a 5d 20 61 72 72 61 79 + [x,y,z] array
1a010 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 - interior ring
1a020 20 2a 2f 0a 09 09 20 20 20 20 20 20 65 6c 73 65 */... else
1a030 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
1a040 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
1a050 41 5f 58 59 5f 4d 29 0a 09 09 09 20 20 2a 73 69 A_XY_M).... *si
1a060 7a 65 20 2b 3d 20 28 34 20 2b 20 28 31 36 20 2a ze += (4 + (16 *
1a070 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 rng->Points) +
1a080 31 36 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 16);./* # points
1a090 20 2b 20 5b 78 2c 79 2c 6d 5d 20 61 72 72 61 79 + [x,y,m] array
1a0a0 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 - interior ring
1a0b0 20 2a 2f 0a 09 09 20 20 20 20 20 20 65 6c 73 65 */... else
1a0c0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
1a0d0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
1a0e0 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 20 20 2a A_XY_Z_M).... *
1a0f0 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 32 30 size += (4 + (20
1a100 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 20 * rng->Points)
1a110 2b 20 32 34 29 3b 09 2f 2a 20 23 20 70 6f 69 6e + 24);./* # poin
1a120 74 73 20 2b 20 5b 78 2c 79 2c 7a 2c 6d 5d 20 61 ts + [x,y,z,m] a
1a130 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 20 rray - interior
1a140 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 ring */...
1a150 65 6c 73 65 0a 09 09 09 20 20 2a 73 69 7a 65 20 else.... *size
1a160 2b 3d 20 28 34 20 2b 20 28 38 20 2a 20 72 6e 67 += (4 + (8 * rng
1a170 2d 3e 50 6f 69 6e 74 73 29 20 2b 20 31 36 29 3b ->Points) + 16);
1a180 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
1a190 78 2c 79 5d 20 61 72 72 61 79 20 2d 20 69 6e 74 x,y] array - int
1a1a0 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 erior ring */...
1a1b0 20 20 7d 0a 09 09 70 6f 6c 79 67 20 3d 20 70 6f }...polyg = po
1a1c0 6c 79 67 2d 3e 4e 65 78 74 3b 0a 09 20 20 20 20 lyg->Next;..
1a1d0 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 2a }. };. *
1a1e0 72 65 73 75 6c 74 20 3d 20 6d 61 6c 6c 6f 63 20 result = malloc
1a1f0 28 2a 73 69 7a 65 29 3b 0a 20 20 20 20 70 74 72 (*size);. ptr
1a200 20 3d 20 2a 72 65 73 75 6c 74 3b 0a 2f 2a 20 61 = *result;./* a
1a210 6e 64 20 66 69 6e 61 6c 6c 79 20 77 65 20 62 75 nd finally we bu
1a220 69 6c 64 20 74 68 65 20 42 4c 4f 42 20 2a 2f 0a ild the BLOB */.
1a230 20 20 20 20 73 77 69 74 63 68 20 28 74 79 70 65 switch (type
1a240 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 ). {.
1a250 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 3a case GAIA_POINT:
1a260 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f .. *ptr = GAIA_
1a270 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 MARK_START;./* S
1a280 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a TART signature *
1a290 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 /.. *(ptr + 1)
1a2a0 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e = GAIA_LITTLE_EN
1a2b0 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 DIAN;./* byte or
1a2c0 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 dering */.. gai
1a2d0 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
1a2e0 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 2, geom->Srid,
1a2f0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1a300 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a ./* the SRID */.
1a310 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
1a320 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e (ptr + 6, geom->
1a330 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MinX, 1, endian_
1a340 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
1a350 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 minimum X */..
1a360 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
1a370 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 r + 14, geom->Mi
1a380 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 nY, 1, endian_ar
1a390 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 ch);./* MBR - mi
1a3a0 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 nimum Y */.. ga
1a3b0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
1a3c0 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 + 22, geom->MaxX
1a3d0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1a3e0 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 );./* MBR - maxi
1a3f0 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 mum X */.. gaia
1a400 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1a410 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 30, geom->MaxY,
1a420 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1a430 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 ./* MBR - maximu
1a440 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 m Y */.. *(ptr
1a450 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 + 38) = GAIA_MAR
1a460 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 K_MBR;./* MBR si
1a470 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 gnature */.. ga
1a480 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
1a490 2b 20 33 39 2c 20 47 41 49 41 5f 50 4f 49 4e 54 + 39, GAIA_POINT
1a4a0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1a4b0 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 49 4e );./* class POIN
1a4c0 54 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f T */.. gaiaExpo
1a4d0 72 74 36 34 20 28 70 74 72 20 2b 20 34 33 2c 20 rt64 (ptr + 43,
1a4e0 70 6f 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 point->X, 1, end
1a4f0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
1a500 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1a510 36 34 20 28 70 74 72 20 2b 20 35 31 2c 20 70 6f 64 (ptr + 51, po
1a520 69 6e 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 int->Y, 1, endia
1a530 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f n_arch);./* Y */
1a540 0a 09 20 20 2a 28 70 74 72 20 2b 20 35 39 29 20 .. *(ptr + 59)
1a550 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b = GAIA_MARK_END;
1a560 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 72 ./* END signatur
1a570 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 e */.. break;.
1a580 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 case GAIA_P
1a590 4f 49 4e 54 5a 3a 0a 09 20 20 2a 70 74 72 20 3d OINTZ:.. *ptr =
1a5a0 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 GAIA_MARK_START
1a5b0 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 67 6e 61 ;./* START signa
1a5c0 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 70 74 72 ture */.. *(ptr
1a5d0 20 2b 20 31 29 20 3d 20 47 41 49 41 5f 4c 49 54 + 1) = GAIA_LIT
1a5e0 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 TLE_ENDIAN;./* b
1a5f0 79 74 65 20 6f 72 64 65 72 69 6e 67 20 2a 2f 0a yte ordering */.
1a600 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
1a610 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e (ptr + 2, geom->
1a620 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 6e 5f Srid, 1, endian_
1a630 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 53 52 arch);./* the SR
1a640 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 ID */.. gaiaExp
1a650 6f 72 74 36 34 20 28 70 74 72 20 2b 20 36 2c 20 ort64 (ptr + 6,
1a660 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 geom->MinX, 1, e
1a670 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1a680 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 MBR - minimum X
1a690 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1a6a0 36 34 20 28 70 74 72 20 2b 20 31 34 2c 20 67 65 64 (ptr + 14, ge
1a6b0 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 om->MinY, 1, end
1a6c0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
1a6d0 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f R - minimum Y */
1a6e0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1a6f0 20 28 70 74 72 20 2b 20 32 32 2c 20 67 65 6f 6d (ptr + 22, geom
1a700 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e 64 69 61 ->MaxX, 1, endia
1a710 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
1a720 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 - maximum X */..
1a730 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1a740 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e ptr + 30, geom->
1a750 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MaxY, 1, endian_
1a760 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
1a770 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 maximum Y */..
1a780 2a 28 70 74 72 20 2b 20 33 38 29 20 3d 20 47 41 *(ptr + 38) = GA
1a790 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 IA_MARK_MBR;./*
1a7a0 4d 42 52 20 73 69 67 6e 61 74 75 72 65 20 2a 2f MBR signature */
1a7b0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
1a7c0 20 28 70 74 72 20 2b 20 33 39 2c 20 47 41 49 41 (ptr + 39, GAIA
1a7d0 5f 50 4f 49 4e 54 5a 2c 20 31 2c 20 65 6e 64 69 _POINTZ, 1, endi
1a7e0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 an_arch);./* cla
1a7f0 73 73 20 50 4f 49 4e 54 20 58 59 5a 20 2a 2f 0a ss POINT XYZ */.
1a800 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
1a810 28 70 74 72 20 2b 20 34 33 2c 20 70 6f 69 6e 74 (ptr + 43, point
1a820 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 ->X, 1, endian_a
1a830 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 20 rch);./* X */..
1a840 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1a850 74 72 20 2b 20 35 31 2c 20 70 6f 69 6e 74 2d 3e tr + 51, point->
1a860 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Y, 1, endian_arc
1a870 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 20 20 67 h);./* Y */.. g
1a880 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1a890 20 2b 20 35 39 2c 20 70 6f 69 6e 74 2d 3e 5a 2c + 59, point->Z,
1a8a0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1a8b0 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 20 20 2a 28 70 ;./* Z */.. *(p
1a8c0 74 72 20 2b 20 36 37 29 20 3d 20 47 41 49 41 5f tr + 67) = GAIA_
1a8d0 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 MARK_END;./* END
1a8e0 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
1a8f0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
1a900 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 4d 3a 0a se GAIA_POINTM:.
1a910 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d . *ptr = GAIA_M
1a920 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 ARK_START;./* ST
1a930 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 2a 2f ART signature */
1a940 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 20 3d .. *(ptr + 1) =
1a950 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
1a960 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 IAN;./* byte ord
1a970 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 69 61 ering */.. gaia
1a980 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 Export32 (ptr +
1a990 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 2, geom->Srid, 1
1a9a0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1a9b0 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f 0a 09 /* the SRID */..
1a9c0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1a9d0 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e 4d ptr + 6, geom->M
1a9e0 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 inX, 1, endian_a
1a9f0 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d rch);./* MBR - m
1aa00 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 inimum X */.. g
1aa10 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1aa20 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 6e + 14, geom->Min
1aa30 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Y, 1, endian_arc
1aa40 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e h);./* MBR - min
1aa50 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 61 69 imum Y */.. gai
1aa60 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1aa70 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 2c 22, geom->MaxX,
1aa80 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1aa90 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d ;./* MBR - maxim
1aaa0 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 um X */.. gaiaE
1aab0 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 33 xport64 (ptr + 3
1aac0 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 31 0, geom->MaxY, 1
1aad0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1aae0 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d /* MBR - maximum
1aaf0 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b Y */.. *(ptr +
1ab00 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 38) = GAIA_MARK
1ab10 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 69 67 _MBR;./* MBR sig
1ab20 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 61 69 nature */.. gai
1ab30 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
1ab40 20 33 39 2c 20 47 41 49 41 5f 50 4f 49 4e 54 4d 39, GAIA_POINTM
1ab50 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1ab60 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 49 4e );./* class POIN
1ab70 54 20 58 59 4d 20 2a 2f 0a 09 20 20 67 61 69 61 T XYM */.. gaia
1ab80 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1ab90 34 33 2c 20 70 6f 69 6e 74 2d 3e 58 2c 20 31 2c 43, point->X, 1,
1aba0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
1abb0 2a 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 * X */.. gaiaEx
1abc0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 35 31 port64 (ptr + 51
1abd0 2c 20 70 6f 69 6e 74 2d 3e 59 2c 20 31 2c 20 65 , point->Y, 1, e
1abe0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1abf0 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f Y */.. gaiaExpo
1ac00 72 74 36 34 20 28 70 74 72 20 2b 20 35 39 2c 20 rt64 (ptr + 59,
1ac10 70 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 20 65 6e 64 point->M, 1, end
1ac20 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 ian_arch);./* M
1ac30 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 36 37 */.. *(ptr + 67
1ac40 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e ) = GAIA_MARK_EN
1ac50 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 D;./* END signat
1ac60 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b ure */.. break;
1ac70 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
1ac80 5f 50 4f 49 4e 54 5a 4d 3a 0a 09 20 20 2a 70 74 _POINTZM:.. *pt
1ac90 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 r = GAIA_MARK_ST
1aca0 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 ART;./* START si
1acb0 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 gnature */.. *(
1acc0 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f ptr + 1) = GAIA_
1acd0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f LITTLE_ENDIAN;./
1ace0 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 * byte ordering
1acf0 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1ad00 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 32 (ptr + 2, geo
1ad10 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 m->Srid, 1, endi
1ad20 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
1ad30 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 SRID */.. gaia
1ad40 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1ad50 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 6, geom->MinX, 1
1ad60 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1ad70 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d /* MBR - minimum
1ad80 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 X */.. gaiaExp
1ad90 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c ort64 (ptr + 14,
1ada0 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 geom->MinY, 1,
1adb0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1adc0 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 MBR - minimum Y
1add0 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1ade0 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 t64 (ptr + 22, g
1adf0 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e eom->MaxX, 1, en
1ae00 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
1ae10 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a BR - maximum X *
1ae20 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
1ae30 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 4 (ptr + 30, geo
1ae40 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 m->MaxY, 1, endi
1ae50 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
1ae60 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a - maximum Y */.
1ae70 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d . *(ptr + 38) =
1ae80 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 GAIA_MARK_MBR;.
1ae90 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 /* MBR signature
1aea0 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1aeb0 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 t32 (ptr + 39, G
1aec0 41 49 41 5f 50 4f 49 4e 54 5a 4d 2c 20 31 2c 20 AIA_POINTZM, 1,
1aed0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1aee0 20 63 6c 61 73 73 20 50 4f 49 4e 54 20 58 59 5a class POINT XYZ
1aef0 4d 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f M */.. gaiaExpo
1af00 72 74 36 34 20 28 70 74 72 20 2b 20 34 33 2c 20 rt64 (ptr + 43,
1af10 70 6f 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 point->X, 1, end
1af20 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
1af30 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1af40 36 34 20 28 70 74 72 20 2b 20 35 31 2c 20 70 6f 64 (ptr + 51, po
1af50 69 6e 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 int->Y, 1, endia
1af60 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f n_arch);./* Y */
1af70 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1af80 20 28 70 74 72 20 2b 20 35 39 2c 20 70 6f 69 6e (ptr + 59, poin
1af90 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->Z, 1, endian_
1afa0 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 arch);./* M */..
1afb0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1afc0 70 74 72 20 2b 20 36 37 2c 20 70 6f 69 6e 74 2d ptr + 67, point-
1afd0 3e 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 >M, 1, endian_ar
1afe0 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 20 20 ch);./* Z */..
1aff0 2a 28 70 74 72 20 2b 20 37 35 29 20 3d 20 47 41 *(ptr + 75) = GA
1b000 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 IA_MARK_END;./*
1b010 45 4e 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f END signature */
1b020 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
1b030 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 case GAIA_LINES
1b040 54 52 49 4e 47 3a 0a 09 20 20 2a 70 74 72 20 3d TRING:.. *ptr =
1b050 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 GAIA_MARK_START
1b060 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 67 6e 61 ;./* START signa
1b070 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 70 74 72 ture */.. *(ptr
1b080 20 2b 20 31 29 20 3d 20 47 41 49 41 5f 4c 49 54 + 1) = GAIA_LIT
1b090 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 TLE_ENDIAN;./* b
1b0a0 79 74 65 20 6f 72 64 65 72 69 6e 67 20 2a 2f 0a yte ordering */.
1b0b0 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
1b0c0 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e (ptr + 2, geom->
1b0d0 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 6e 5f Srid, 1, endian_
1b0e0 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 53 52 arch);./* the SR
1b0f0 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 ID */.. gaiaExp
1b100 6f 72 74 36 34 20 28 70 74 72 20 2b 20 36 2c 20 ort64 (ptr + 6,
1b110 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 geom->MinX, 1, e
1b120 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1b130 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 MBR - minimum X
1b140 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1b150 36 34 20 28 70 74 72 20 2b 20 31 34 2c 20 67 65 64 (ptr + 14, ge
1b160 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 om->MinY, 1, end
1b170 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
1b180 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f R - minimum Y */
1b190 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1b1a0 20 28 70 74 72 20 2b 20 32 32 2c 20 67 65 6f 6d (ptr + 22, geom
1b1b0 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e 64 69 61 ->MaxX, 1, endia
1b1c0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
1b1d0 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 - maximum X */..
1b1e0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1b1f0 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e ptr + 30, geom->
1b200 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MaxY, 1, endian_
1b210 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
1b220 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 maximum Y */..
1b230 2a 28 70 74 72 20 2b 20 33 38 29 20 3d 20 47 41 *(ptr + 38) = GA
1b240 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 IA_MARK_MBR;./*
1b250 4d 42 52 20 73 69 67 6e 61 74 75 72 65 20 2a 2f MBR signature */
1b260 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
1b270 20 28 70 74 72 20 2b 20 33 39 2c 20 47 41 49 41 (ptr + 39, GAIA
1b280 5f 43 4f 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 _COMPRESSED_LINE
1b290 53 54 52 49 4e 47 2c 20 31 2c 20 65 6e 64 69 61 STRING, 1, endia
1b2a0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 n_arch);./* clas
1b2b0 73 20 4c 49 4e 45 53 54 52 49 4e 47 20 2a 2f 0a s LINESTRING */.
1b2c0 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
1b2d0 28 70 74 72 20 2b 20 34 33 2c 20 6c 69 6e 65 2d (ptr + 43, line-
1b2e0 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 >Points, 1, endi
1b2f0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 an_arch);./* # p
1b300 6f 69 6e 74 73 20 2a 2f 0a 09 20 20 70 74 72 20 oints */.. ptr
1b310 2b 3d 20 34 37 3b 0a 09 20 20 66 6f 72 20 28 69 += 47;.. for (i
1b320 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 6e 65 v = 0; iv < line
1b330 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a ->Points; iv++).
1b340 09 20 20 20 20 7b 0a 09 09 67 61 69 61 47 65 74 . {...gaiaGet
1b350 50 6f 69 6e 74 20 28 6c 69 6e 65 2d 3e 43 6f 6f Point (line->Coo
1b360 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 rds, iv, &x, &y)
1b370 3b 0a 09 09 69 66 20 28 69 76 20 3d 3d 20 30 20 ;...if (iv == 0
1b380 7c 7c 20 69 76 20 3d 3d 20 28 6c 69 6e 65 2d 3e || iv == (line->
1b390 50 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 20 Points - 1))...
1b3a0 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 66 69 {... /* fi
1b3b0 72 73 74 20 61 6e 64 20 6c 61 73 74 20 76 65 72 rst and last ver
1b3c0 74 69 63 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 tices are uncomp
1b3d0 72 65 73 73 65 64 20 2a 2f 0a 09 09 20 20 20 20 ressed */...
1b3e0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1b3f0 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 ptr, x, 1, endia
1b400 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
1b410 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1b420 74 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e tr + 8, y, 1, en
1b430 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
1b440 20 20 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 ptr += 16;..
1b450 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 20 . }...else...
1b460 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 63 6f 6d {... /* com
1b470 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 pressing any oth
1b480 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 er intermediate
1b490 76 65 72 74 65 78 20 2a 2f 0a 09 09 20 20 20 20 vertex */...
1b4a0 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 28 fx = (float) (
1b4b0 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 20 x - last_x);...
1b4c0 20 20 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 fy = (float
1b4d0 29 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a ) (y - last_y);.
1b4e0 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
1b4f0 72 74 46 33 32 20 28 70 74 72 2c 20 66 78 2c 20 rtF32 (ptr, fx,
1b500 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1b510 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
1b520 6f 72 74 46 33 32 20 28 70 74 72 20 2b 20 34 2c ortF32 (ptr + 4,
1b530 20 66 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 fy, 1, endian_a
1b540 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 70 74 rch);... pt
1b550 72 20 2b 3d 20 38 3b 0a 09 09 20 20 7d 0a 09 09 r += 8;... }...
1b560 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 last_x = x;...la
1b570 73 74 5f 79 20 3d 20 79 3b 0a 09 20 20 20 20 7d st_y = y;.. }
1b580 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f .. *ptr = GAIA_
1b590 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 MARK_END;./* END
1b5a0 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
1b5b0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
1b5c0 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 se GAIA_LINESTRI
1b5d0 4e 47 5a 3a 0a 09 20 20 2a 70 74 72 20 3d 20 47 NGZ:.. *ptr = G
1b5e0 41 49 41 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 AIA_MARK_START;.
1b5f0 2f 2a 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 /* START signatu
1b600 72 65 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b re */.. *(ptr +
1b610 20 31 29 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 1) = GAIA_LITTL
1b620 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 E_ENDIAN;./* byt
1b630 65 20 6f 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 e ordering */..
1b640 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 gaiaExport32 (p
1b650 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 tr + 2, geom->Sr
1b660 69 64 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 id, 1, endian_ar
1b670 63 68 29 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 ch);./* the SRID
1b680 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1b690 74 36 34 20 28 70 74 72 20 2b 20 36 2c 20 67 65 t64 (ptr + 6, ge
1b6a0 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 om->MinX, 1, end
1b6b0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
1b6c0 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f R - minimum X */
1b6d0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1b6e0 20 28 70 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d (ptr + 14, geom
1b6f0 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 ->MinY, 1, endia
1b700 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
1b710 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 - minimum Y */..
1b720 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1b730 70 74 72 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e ptr + 22, geom->
1b740 4d 61 78 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MaxX, 1, endian_
1b750 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
1b760 6d 61 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 maximum X */..
1b770 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
1b780 72 20 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 r + 30, geom->Ma
1b790 78 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 xY, 1, endian_ar
1b7a0 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 ch);./* MBR - ma
1b7b0 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 ximum Y */.. *(
1b7c0 70 74 72 20 2b 20 33 38 29 20 3d 20 47 41 49 41 ptr + 38) = GAIA
1b7d0 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 _MARK_MBR;./* MB
1b7e0 52 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 R signature */..
1b7f0 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
1b800 70 74 72 20 2b 20 33 39 2c 20 47 41 49 41 5f 43 ptr + 39, GAIA_C
1b810 4f 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 OMPRESSED_LINEST
1b820 52 49 4e 47 5a 2c 20 31 2c 20 65 6e 64 69 61 6e RINGZ, 1, endian
1b830 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 _arch);./* class
1b840 20 4c 49 4e 45 53 54 52 49 4e 47 20 58 59 5a 20 LINESTRING XYZ
1b850 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1b860 33 32 20 28 70 74 72 20 2b 20 34 33 2c 20 6c 69 32 (ptr + 43, li
1b870 6e 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 ne->Points, 1, e
1b880 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1b890 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 20 70 # points */.. p
1b8a0 74 72 20 2b 3d 20 34 37 3b 0a 09 20 20 66 6f 72 tr += 47;.. for
1b8b0 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c (iv = 0; iv < l
1b8c0 69 6e 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b ine->Points; iv+
1b8d0 2b 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 69 61 +).. {...gaia
1b8e0 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 6c 69 6e GetPointXYZ (lin
1b8f0 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 e->Coords, iv, &
1b900 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 69 66 x, &y, &z);...if
1b910 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 (iv == 0 || iv
1b920 3d 3d 20 28 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 == (line->Points
1b930 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 09 20 - 1))... {...
1b940 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 61 6e /* first an
1b950 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 d last vertices
1b960 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 are uncompressed
1b970 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 */... gaia
1b980 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 78 Export64 (ptr, x
1b990 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1b9a0 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 );... gaiaE
1b9b0 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 xport64 (ptr + 8
1b9c0 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , y, 1, endian_a
1b9d0 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 rch);... ga
1b9e0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
1b9f0 2b 20 31 36 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 + 16, z, 1, endi
1ba00 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
1ba10 20 20 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 20 ptr += 24;...
1ba20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 20 7b 0a }...else... {.
1ba30 09 09 20 20 20 20 20 20 2f 2a 20 63 6f 6d 70 72 .. /* compr
1ba40 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 essing any other
1ba50 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 76 65 intermediate ve
1ba60 72 74 65 78 20 2a 2f 0a 09 09 20 20 20 20 20 20 rtex */...
1ba70 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 28 78 20 fx = (float) (x
1ba80 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 20 20 20 - last_x);...
1ba90 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 29 20 fy = (float)
1baa0 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a 09 09 (y - last_y);...
1bab0 20 20 20 20 20 20 66 7a 20 3d 20 28 66 6c 6f 61 fz = (floa
1bac0 74 29 20 28 7a 20 2d 20 6c 61 73 74 5f 7a 29 3b t) (z - last_z);
1bad0 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
1bae0 6f 72 74 46 33 32 20 28 70 74 72 2c 20 66 78 2c ortF32 (ptr, fx,
1baf0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1bb00 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 ;... gaiaEx
1bb10 70 6f 72 74 46 33 32 20 28 70 74 72 20 2b 20 34 portF32 (ptr + 4
1bb20 2c 20 66 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f , fy, 1, endian_
1bb30 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 arch);... g
1bb40 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 aiaExportF32 (pt
1bb50 72 20 2b 20 38 2c 20 66 7a 2c 20 31 2c 20 65 6e r + 8, fz, 1, en
1bb60 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
1bb70 20 20 20 20 70 74 72 20 2b 3d 20 31 32 3b 0a 09 ptr += 12;..
1bb80 09 20 20 7d 0a 09 09 6c 61 73 74 5f 78 20 3d 20 . }...last_x =
1bb90 78 3b 0a 09 09 6c 61 73 74 5f 79 20 3d 20 79 3b x;...last_y = y;
1bba0 0a 09 09 6c 61 73 74 5f 7a 20 3d 20 7a 3b 0a 09 ...last_z = z;..
1bbb0 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 20 3d 20 }.. *ptr =
1bbc0 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f GAIA_MARK_END;./
1bbd0 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 72 65 20 * END signature
1bbe0 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 */.. break;.
1bbf0 20 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e case GAIA_LIN
1bc00 45 53 54 52 49 4e 47 4d 3a 0a 09 20 20 2a 70 74 ESTRINGM:.. *pt
1bc10 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 r = GAIA_MARK_ST
1bc20 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 ART;./* START si
1bc30 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 gnature */.. *(
1bc40 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f ptr + 1) = GAIA_
1bc50 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f LITTLE_ENDIAN;./
1bc60 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 * byte ordering
1bc70 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1bc80 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 32 (ptr + 2, geo
1bc90 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 m->Srid, 1, endi
1bca0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
1bcb0 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 SRID */.. gaia
1bcc0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1bcd0 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 6, geom->MinX, 1
1bce0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1bcf0 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d /* MBR - minimum
1bd00 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 X */.. gaiaExp
1bd10 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c ort64 (ptr + 14,
1bd20 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 geom->MinY, 1,
1bd30 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1bd40 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 MBR - minimum Y
1bd50 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1bd60 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 t64 (ptr + 22, g
1bd70 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e eom->MaxX, 1, en
1bd80 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
1bd90 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a BR - maximum X *
1bda0 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
1bdb0 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 4 (ptr + 30, geo
1bdc0 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 m->MaxY, 1, endi
1bdd0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
1bde0 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a - maximum Y */.
1bdf0 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d . *(ptr + 38) =
1be00 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 GAIA_MARK_MBR;.
1be10 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 /* MBR signature
1be20 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1be30 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 t32 (ptr + 39, G
1be40 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f 4c AIA_COMPRESSED_L
1be50 49 4e 45 53 54 52 49 4e 47 4d 2c 20 31 2c 20 65 INESTRINGM, 1, e
1be60 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1be70 63 6c 61 73 73 20 4c 49 4e 45 53 54 52 49 4e 47 class LINESTRING
1be80 20 58 59 4d 20 2a 2f 0a 09 20 20 67 61 69 61 45 XYM */.. gaiaE
1be90 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 34 xport32 (ptr + 4
1bea0 33 2c 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 2c 3, line->Points,
1beb0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1bec0 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2a 2f ;./* # points */
1bed0 0a 09 20 20 70 74 72 20 2b 3d 20 34 37 3b 0a 09 .. ptr += 47;..
1bee0 20 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 for (iv = 0; i
1bef0 76 20 3c 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 v < line->Points
1bf00 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 ; iv++).. {..
1bf10 09 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d .gaiaGetPointXYM
1bf20 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 (line->Coords,
1bf30 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b iv, &x, &y, &m);
1bf40 0a 09 09 69 66 20 28 69 76 20 3d 3d 20 30 20 7c ...if (iv == 0 |
1bf50 7c 20 69 76 20 3d 3d 20 28 6c 69 6e 65 2d 3e 50 | iv == (line->P
1bf60 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 20 20 oints - 1))...
1bf70 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 66 69 72 {... /* fir
1bf80 73 74 20 61 6e 64 20 6c 61 73 74 20 76 65 72 74 st and last vert
1bf90 69 63 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 ices are uncompr
1bfa0 65 73 73 65 64 20 2a 2f 0a 09 09 20 20 20 20 20 essed */...
1bfb0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1bfc0 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e tr, x, 1, endian
1bfd0 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
1bfe0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
1bff0 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 r + 8, y, 1, end
1c000 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
1c010 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
1c020 28 70 74 72 20 2b 20 31 36 2c 20 6d 2c 20 31 2c (ptr + 16, m, 1,
1c030 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1c040 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 32 34 . ptr += 24
1c050 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 ;... }...else..
1c060 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 . {... /*
1c070 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 20 compressing any
1c080 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 other intermedia
1c090 74 65 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 20 te vertex */...
1c0a0 20 20 20 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 fx = (float
1c0b0 29 20 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a ) (x - last_x);.
1c0c0 09 09 20 20 20 20 20 20 66 79 20 3d 20 28 66 6c .. fy = (fl
1c0d0 6f 61 74 29 20 28 79 20 2d 20 6c 61 73 74 5f 79 oat) (y - last_y
1c0e0 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 );... gaiaE
1c0f0 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c 20 66 xportF32 (ptr, f
1c100 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
1c110 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 h);... gaia
1c120 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 20 2b ExportF32 (ptr +
1c130 20 34 2c 20 66 79 2c 20 31 2c 20 65 6e 64 69 61 4, fy, 1, endia
1c140 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
1c150 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1c160 74 72 20 2b 20 38 2c 20 6d 2c 20 31 2c 20 65 6e tr + 8, m, 1, en
1c170 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
1c180 20 20 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 ptr += 16;..
1c190 09 20 20 7d 0a 09 09 6c 61 73 74 5f 78 20 3d 20 . }...last_x =
1c1a0 78 3b 0a 09 09 6c 61 73 74 5f 79 20 3d 20 79 3b x;...last_y = y;
1c1b0 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 20 .. }.. *ptr
1c1c0 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 3b = GAIA_MARK_END;
1c1d0 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 72 ./* END signatur
1c1e0 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a 20 e */.. break;.
1c1f0 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4c case GAIA_L
1c200 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 09 20 20 INESTRINGZM:..
1c210 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b *ptr = GAIA_MARK
1c220 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 _START;./* START
1c230 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
1c240 20 2a 28 70 74 72 20 2b 20 31 29 20 3d 20 47 41 *(ptr + 1) = GA
1c250 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
1c260 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 65 72 69 ;./* byte orderi
1c270 6e 67 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 ng */.. gaiaExp
1c280 6f 72 74 33 32 20 28 70 74 72 20 2b 20 32 2c 20 ort32 (ptr + 2,
1c290 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 geom->Srid, 1, e
1c2a0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1c2b0 74 68 65 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 the SRID */.. g
1c2c0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1c2d0 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 + 6, geom->MinX
1c2e0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1c2f0 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 );./* MBR - mini
1c300 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 mum X */.. gaia
1c310 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1c320 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 14, geom->MinY,
1c330 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1c340 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 ./* MBR - minimu
1c350 6d 20 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 m Y */.. gaiaEx
1c360 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 32 32 port64 (ptr + 22
1c370 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c , geom->MaxX, 1,
1c380 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
1c390 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 * MBR - maximum
1c3a0 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f X */.. gaiaExpo
1c3b0 72 74 36 34 20 28 70 74 72 20 2b 20 33 30 2c 20 rt64 (ptr + 30,
1c3c0 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 geom->MaxY, 1, e
1c3d0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1c3e0 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 MBR - maximum Y
1c3f0 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 33 38 */.. *(ptr + 38
1c400 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 ) = GAIA_MARK_MB
1c410 52 3b 09 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 R;./* MBR signat
1c420 75 72 65 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 ure */.. gaiaEx
1c430 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 33 39 port32 (ptr + 39
1c440 2c 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 , GAIA_COMPRESSE
1c450 44 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 2c 20 D_LINESTRINGZM,
1c460 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1c470 09 2f 2a 20 63 6c 61 73 73 20 4c 49 4e 45 53 54 ./* class LINEST
1c480 52 49 4e 47 20 58 59 5a 4d 20 2a 2f 0a 09 20 20 RING XYZM */..
1c490 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
1c4a0 72 20 2b 20 34 33 2c 20 6c 69 6e 65 2d 3e 50 6f r + 43, line->Po
1c4b0 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f ints, 1, endian_
1c4c0 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e arch);./* # poin
1c4d0 74 73 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 ts */.. ptr +=
1c4e0 34 37 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 47;.. for (iv =
1c4f0 20 30 3b 20 69 76 20 3c 20 6c 69 6e 65 2d 3e 50 0; iv < line->P
1c500 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 oints; iv++)..
1c510 20 20 7b 0a 09 09 67 61 69 61 47 65 74 50 6f 69 {...gaiaGetPoi
1c520 6e 74 58 59 5a 4d 20 28 6c 69 6e 65 2d 3e 43 6f ntXYZM (line->Co
1c530 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 ords, iv, &x, &y
1c540 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 69 66 20 , &z, &m);...if
1c550 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d (iv == 0 || iv =
1c560 3d 20 28 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 20 = (line->Points
1c570 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 09 20 20 - 1))... {...
1c580 20 20 20 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 /* first and
1c590 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 61 last vertices a
1c5a0 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 re uncompressed
1c5b0 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
1c5c0 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 78 2c xport64 (ptr, x,
1c5d0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1c5e0 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 ;... gaiaEx
1c5f0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c port64 (ptr + 8,
1c600 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 y, 1, endian_ar
1c610 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 ch);... gai
1c620 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1c630 20 31 36 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 16, z, 1, endia
1c640 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
1c650 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1c660 74 72 20 2b 20 32 34 2c 20 6d 2c 20 31 2c 20 65 tr + 24, m, 1, e
1c670 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 ndian_arch);...
1c680 20 20 20 20 20 70 74 72 20 2b 3d 20 33 32 3b 0a ptr += 32;.
1c690 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 .. }...else...
1c6a0 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 63 6f {... /* co
1c6b0 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 mpressing any ot
1c6c0 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 her intermediate
1c6d0 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 20 20 20 vertex */...
1c6e0 20 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 fx = (float)
1c6f0 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 (x - last_x);...
1c700 20 20 20 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 fy = (floa
1c710 74 29 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b t) (y - last_y);
1c720 0a 09 09 20 20 20 20 20 20 66 7a 20 3d 20 28 66 ... fz = (f
1c730 6c 6f 61 74 29 20 28 7a 20 2d 20 6c 61 73 74 5f loat) (z - last_
1c740 7a 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 z);... gaia
1c750 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c 20 ExportF32 (ptr,
1c760 66 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 fx, 1, endian_ar
1c770 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 ch);... gai
1c780 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 20 aExportF32 (ptr
1c790 2b 20 34 2c 20 66 79 2c 20 31 2c 20 65 6e 64 69 + 4, fy, 1, endi
1c7a0 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
1c7b0 20 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 gaiaExportF32
1c7c0 28 70 74 72 20 2b 20 38 2c 20 66 7a 2c 20 31 2c (ptr + 8, fz, 1,
1c7d0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1c7e0 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
1c7f0 74 36 34 20 28 70 74 72 20 2b 20 31 32 2c 20 6d t64 (ptr + 12, m
1c800 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1c810 29 3b 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b );... ptr +
1c820 3d 20 32 30 3b 0a 09 09 20 20 7d 0a 09 09 6c 61 = 20;... }...la
1c830 73 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 73 74 st_x = x;...last
1c840 5f 79 20 3d 20 79 3b 0a 09 09 6c 61 73 74 5f 7a _y = y;...last_z
1c850 20 3d 20 7a 3b 0a 09 20 20 20 20 7d 0a 09 20 20 = z;.. }..
1c860 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b *ptr = GAIA_MARK
1c870 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 _END;./* END sig
1c880 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 62 72 65 nature */.. bre
1c890 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
1c8a0 41 49 41 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 AIA_POLYGON:..
1c8b0 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b *ptr = GAIA_MARK
1c8c0 5f 53 54 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 _START;./* START
1c8d0 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 signature */..
1c8e0 20 2a 28 70 74 72 20 2b 20 31 29 20 3d 20 47 41 *(ptr + 1) = GA
1c8f0 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
1c900 3b 09 2f 2a 20 62 79 74 65 20 6f 72 64 65 72 69 ;./* byte orderi
1c910 6e 67 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 ng */.. gaiaExp
1c920 6f 72 74 33 32 20 28 70 74 72 20 2b 20 32 2c 20 ort32 (ptr + 2,
1c930 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 geom->Srid, 1, e
1c940 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1c950 74 68 65 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 the SRID */.. g
1c960 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1c970 20 2b 20 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 + 6, geom->MinX
1c980 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1c990 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 );./* MBR - mini
1c9a0 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 mum X */.. gaia
1c9b0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1c9c0 31 34 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 14, geom->MinY,
1c9d0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1c9e0 09 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 ./* MBR - minimu
1c9f0 6d 20 59 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 m Y */.. gaiaEx
1ca00 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 32 32 port64 (ptr + 22
1ca10 2c 20 67 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c , geom->MaxX, 1,
1ca20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
1ca30 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 * MBR - maximum
1ca40 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f X */.. gaiaExpo
1ca50 72 74 36 34 20 28 70 74 72 20 2b 20 33 30 2c 20 rt64 (ptr + 30,
1ca60 67 65 6f 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 geom->MaxY, 1, e
1ca70 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1ca80 4d 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 MBR - maximum Y
1ca90 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 33 38 */.. *(ptr + 38
1caa0 29 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 ) = GAIA_MARK_MB
1cab0 52 3b 09 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 R;./* MBR signat
1cac0 75 72 65 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 ure */.. gaiaEx
1cad0 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 33 39 port32 (ptr + 39
1cae0 2c 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 , GAIA_COMPRESSE
1caf0 44 5f 50 4f 4c 59 47 4f 4e 2c 20 31 2c 20 65 6e D_POLYGON, 1, en
1cb00 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 dian_arch);./* c
1cb10 6c 61 73 73 20 50 4f 4c 59 47 4f 4e 20 2a 2f 0a lass POLYGON */.
1cb20 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
1cb30 28 70 74 72 20 2b 20 34 33 2c 20 70 6f 6c 79 67 (ptr + 43, polyg
1cb40 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 20 2b ->NumInteriors +
1cb50 20 31 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 1, 1, endian_ar
1cb60 63 68 29 3b 09 2f 2a 20 23 20 72 69 6e 67 73 20 ch);./* # rings
1cb70 2a 2f 0a 09 20 20 72 6e 67 20 3d 20 70 6f 6c 79 */.. rng = poly
1cb80 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 20 g->Exterior;..
1cb90 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
1cba0 72 20 2b 20 34 37 2c 20 72 6e 67 2d 3e 50 6f 69 r + 47, rng->Poi
1cbb0 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 nts, 1, endian_a
1cbc0 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 rch);./* # point
1cbd0 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e s - exterior rin
1cbe0 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 35 g */.. ptr += 5
1cbf0 31 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 1;.. for (iv =
1cc00 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
1cc10 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 nts; iv++)..
1cc20 7b 0a 09 09 67 61 69 61 47 65 74 50 6f 69 6e 74 {...gaiaGetPoint
1cc30 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 (rng->Coords, i
1cc40 76 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 69 66 v, &x, &y);...if
1cc50 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 (iv == 0 || iv
1cc60 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 == (rng->Points
1cc70 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 09 20 20 - 1))... {...
1cc80 20 20 20 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 /* first and
1cc90 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 61 last vertices a
1cca0 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 re uncompressed
1ccb0 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
1ccc0 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 78 2c xport64 (ptr, x,
1ccd0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1cce0 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 ;... gaiaEx
1ccf0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c port64 (ptr + 8,
1cd00 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 y, 1, endian_ar
1cd10 63 68 29 3b 0a 09 09 20 20 20 20 20 20 70 74 72 ch);... ptr
1cd20 20 2b 3d 20 31 36 3b 0a 09 09 20 20 7d 0a 09 09 += 16;... }...
1cd30 65 6c 73 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 else... {...
1cd40 20 20 20 2f 2a 20 63 6f 6d 70 72 65 73 73 69 6e /* compressin
1cd50 67 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 65 g any other inte
1cd60 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 20 rmediate vertex
1cd70 2a 2f 0a 09 09 20 20 20 20 20 20 66 78 20 3d 20 */... fx =
1cd80 28 66 6c 6f 61 74 29 20 28 78 20 2d 20 6c 61 73 (float) (x - las
1cd90 74 5f 78 29 3b 0a 09 09 20 20 20 20 20 20 66 79 t_x);... fy
1cda0 20 3d 20 28 66 6c 6f 61 74 29 20 28 79 20 2d 20 = (float) (y -
1cdb0 6c 61 73 74 5f 79 29 3b 0a 09 09 20 20 20 20 20 last_y);...
1cdc0 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1cdd0 70 74 72 2c 20 66 78 2c 20 31 2c 20 65 6e 64 69 ptr, fx, 1, endi
1cde0 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
1cdf0 20 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 gaiaExportF32
1ce00 28 70 74 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c (ptr + 4, fy, 1,
1ce10 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1ce20 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b . ptr += 8;
1ce30 0a 09 09 20 20 7d 0a 09 09 6c 61 73 74 5f 78 20 ... }...last_x
1ce40 3d 20 78 3b 0a 09 09 6c 61 73 74 5f 79 20 3d 20 = x;...last_y =
1ce50 79 3b 0a 09 20 20 20 20 7d 0a 09 20 20 66 6f 72 y;.. }.. for
1ce60 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 (ib = 0; ib < p
1ce70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f olyg->NumInterio
1ce80 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 20 20 7b rs; ib++).. {
1ce90 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e ...rng = polyg->
1cea0 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a Interiors + ib;.
1ceb0 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 ..gaiaExport32 (
1cec0 70 74 72 2c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 ptr, rng->Points
1ced0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1cee0 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2d );./* # points -
1cef0 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 20 2a interior ring *
1cf00 2f 0a 09 09 70 74 72 20 2b 3d 20 34 3b 0a 09 09 /...ptr += 4;...
1cf10 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 for (iv = 0; iv
1cf20 3c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 69 < rng->Points; i
1cf30 76 2b 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 v++)... {...
1cf40 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 20 gaiaGetPoint
1cf50 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (rng->Coords, iv
1cf60 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 20 20 20 , &x, &y);...
1cf70 20 20 20 69 66 20 28 69 76 20 3d 3d 20 30 20 7c if (iv == 0 |
1cf80 7c 20 69 76 20 3d 3d 20 28 72 6e 67 2d 3e 50 6f | iv == (rng->Po
1cf90 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 09 7b 0a ints - 1))....{.
1cfa0 09 09 09 20 20 20 20 2f 2a 20 66 69 72 73 74 20 ... /* first
1cfb0 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 and last vertice
1cfc0 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 s are uncompress
1cfd0 65 64 20 2a 2f 0a 09 09 09 20 20 20 20 67 61 69 ed */.... gai
1cfe0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
1cff0 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
1d000 68 29 3b 0a 09 09 09 20 20 20 20 67 61 69 61 45 h);.... gaiaE
1d010 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 xport64 (ptr + 8
1d020 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , y, 1, endian_a
1d030 72 63 68 29 3b 0a 09 09 09 20 20 20 20 70 74 72 rch);.... ptr
1d040 20 2b 3d 20 31 36 3b 0a 09 09 09 7d 0a 09 09 20 += 16;....}...
1d050 20 20 20 20 20 65 6c 73 65 0a 09 09 09 7b 0a 09 else....{..
1d060 09 09 20 20 20 20 2f 2a 20 63 6f 6d 70 72 65 73 .. /* compres
1d070 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 69 sing any other i
1d080 6e 74 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 ntermediate vert
1d090 65 78 20 2a 2f 0a 09 09 09 20 20 20 20 66 78 20 ex */.... fx
1d0a0 3d 20 28 66 6c 6f 61 74 29 20 28 78 20 2d 20 6c = (float) (x - l
1d0b0 61 73 74 5f 78 29 3b 0a 09 09 09 20 20 20 20 66 ast_x);.... f
1d0c0 79 20 3d 20 28 66 6c 6f 61 74 29 20 28 79 20 2d y = (float) (y -
1d0d0 20 6c 61 73 74 5f 79 29 3b 0a 09 09 09 20 20 20 last_y);....
1d0e0 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1d0f0 70 74 72 2c 20 66 78 2c 20 31 2c 20 65 6e 64 69 ptr, fx, 1, endi
1d100 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 an_arch);....
1d110 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1d120 70 74 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c 20 ptr + 4, fy, 1,
1d130 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
1d140 09 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 . ptr += 8;..
1d150 09 09 7d 0a 09 09 20 20 20 20 20 20 6c 61 73 74 ..}... last
1d160 5f 78 20 3d 20 78 3b 0a 09 09 20 20 20 20 20 20 _x = x;...
1d170 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 20 20 last_y = y;...
1d180 7d 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 72 }.. }.. *ptr
1d190 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 44 = GAIA_MARK_END
1d1a0 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 75 ;./* END signatu
1d1b0 72 65 20 2a 2f 0a 09 20 20 62 72 65 61 6b 3b 0a re */.. break;.
1d1c0 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
1d1d0 50 4f 4c 59 47 4f 4e 5a 3a 0a 09 20 20 2a 70 74 POLYGONZ:.. *pt
1d1e0 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 r = GAIA_MARK_ST
1d1f0 41 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 ART;./* START si
1d200 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 gnature */.. *(
1d210 70 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f ptr + 1) = GAIA_
1d220 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f LITTLE_ENDIAN;./
1d230 2a 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 * byte ordering
1d240 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1d250 33 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 32 (ptr + 2, geo
1d260 6d 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 m->Srid, 1, endi
1d270 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
1d280 20 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 SRID */.. gaia
1d290 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1d2a0 36 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 6, geom->MinX, 1
1d2b0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1d2c0 2f 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d /* MBR - minimum
1d2d0 20 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 X */.. gaiaExp
1d2e0 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c ort64 (ptr + 14,
1d2f0 20 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 geom->MinY, 1,
1d300 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1d310 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 MBR - minimum Y
1d320 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1d330 74 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 t64 (ptr + 22, g
1d340 65 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e eom->MaxX, 1, en
1d350 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
1d360 42 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a BR - maximum X *
1d370 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
1d380 34 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 4 (ptr + 30, geo
1d390 6d 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 m->MaxY, 1, endi
1d3a0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 an_arch);./* MBR
1d3b0 20 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a - maximum Y */.
1d3c0 09 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d . *(ptr + 38) =
1d3d0 20 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 GAIA_MARK_MBR;.
1d3e0 2f 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 /* MBR signature
1d3f0 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 */.. gaiaExpor
1d400 74 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 47 t32 (ptr + 39, G
1d410 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f 50 AIA_COMPRESSED_P
1d420 4f 4c 59 47 4f 4e 5a 2c 20 31 2c 20 65 6e 64 69 OLYGONZ, 1, endi
1d430 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 an_arch);./* cla
1d440 73 73 20 50 4f 4c 59 47 4f 4e 20 58 59 5a 20 2a ss POLYGON XYZ *
1d450 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 /.. gaiaExport3
1d460 32 20 28 70 74 72 20 2b 20 34 33 2c 20 70 6f 6c 2 (ptr + 43, pol
1d470 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 yg->NumInteriors
1d480 20 2b 20 31 2c 20 31 2c 20 65 6e 64 69 61 6e 5f + 1, 1, endian_
1d490 61 72 63 68 29 3b 09 2f 2a 20 23 20 72 69 6e 67 arch);./* # ring
1d4a0 73 20 2a 2f 0a 09 20 20 72 6e 67 20 3d 20 70 6f s */.. rng = po
1d4b0 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 lyg->Exterior;..
1d4c0 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
1d4d0 70 74 72 20 2b 20 34 37 2c 20 72 6e 67 2d 3e 50 ptr + 47, rng->P
1d4e0 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e oints, 1, endian
1d4f0 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 _arch);./* # poi
1d500 6e 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 nts - exterior r
1d510 69 6e 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d ing */.. ptr +=
1d520 20 35 31 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 51;.. for (iv
1d530 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 = 0; iv < rng->P
1d540 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 oints; iv++)..
1d550 20 20 7b 0a 09 09 67 61 69 61 47 65 74 50 6f 69 {...gaiaGetPoi
1d560 6e 74 58 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f 72 ntXYZ (rng->Coor
1d570 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 ds, iv, &x, &y,
1d580 26 7a 29 3b 0a 09 09 69 66 20 28 69 76 20 3d 3d &z);...if (iv ==
1d590 20 30 20 7c 7c 20 69 76 20 3d 3d 20 28 72 6e 67 0 || iv == (rng
1d5a0 2d 3e 50 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 ->Points - 1))..
1d5b0 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 . {... /*
1d5c0 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 20 76 first and last v
1d5d0 65 72 74 69 63 65 73 20 61 72 65 20 75 6e 63 6f ertices are unco
1d5e0 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 20 20 mpressed */...
1d5f0 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
1d600 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 (ptr, x, 1, end
1d610 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
1d620 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
1d630 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 (ptr + 8, y, 1,
1d640 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
1d650 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
1d660 36 34 20 28 70 74 72 20 2b 20 31 36 2c 20 7a 2c 64 (ptr + 16, z,
1d670 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1d680 3b 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d ;... ptr +=
1d690 20 32 34 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 24;... }...els
1d6a0 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 e... {...
1d6b0 2f 2a 20 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 /* compressing a
1d6c0 6e 79 20 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 ny other interme
1d6d0 64 69 61 74 65 20 76 65 72 74 65 78 20 2a 2f 0a diate vertex */.
1d6e0 09 09 20 20 20 20 20 20 66 78 20 3d 20 28 66 6c .. fx = (fl
1d6f0 6f 61 74 29 20 28 78 20 2d 20 6c 61 73 74 5f 78 oat) (x - last_x
1d700 29 3b 0a 09 09 20 20 20 20 20 20 66 79 20 3d 20 );... fy =
1d710 28 66 6c 6f 61 74 29 20 28 79 20 2d 20 6c 61 73 (float) (y - las
1d720 74 5f 79 29 3b 0a 09 09 20 20 20 20 20 20 66 7a t_y);... fz
1d730 20 3d 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d 20 = (float) (z -
1d740 6c 61 73 74 5f 7a 29 3b 0a 09 09 20 20 20 20 20 last_z);...
1d750 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1d760 70 74 72 2c 20 66 78 2c 20 31 2c 20 65 6e 64 69 ptr, fx, 1, endi
1d770 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
1d780 20 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 gaiaExportF32
1d790 28 70 74 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c (ptr + 4, fy, 1,
1d7a0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1d7b0 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
1d7c0 74 46 33 32 20 28 70 74 72 20 2b 20 38 2c 20 66 tF32 (ptr + 8, f
1d7d0 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 z, 1, endian_arc
1d7e0 68 29 3b 0a 09 09 20 20 20 20 20 20 70 74 72 20 h);... ptr
1d7f0 2b 3d 20 31 32 3b 0a 09 09 20 20 7d 0a 09 09 6c += 12;... }...l
1d800 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 6c 61 73 ast_x = x;...las
1d810 74 5f 79 20 3d 20 79 3b 0a 09 09 6c 61 73 74 5f t_y = y;...last_
1d820 7a 20 3d 20 7a 3b 0a 09 20 20 20 20 7d 0a 09 20 z = z;.. }..
1d830 20 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 for (ib = 0; ib
1d840 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 < polyg->NumInt
1d850 65 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 eriors; ib++)..
1d860 20 20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c {...rng = pol
1d870 79 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 yg->Interiors +
1d880 69 62 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 ib;...gaiaExport
1d890 33 32 20 28 70 74 72 2c 20 72 6e 67 2d 3e 50 6f 32 (ptr, rng->Po
1d8a0 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f ints, 1, endian_
1d8b0 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e arch);./* # poin
1d8c0 74 73 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 ts - interior ri
1d8d0 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 34 ng */...ptr += 4
1d8e0 3b 0a 09 09 66 6f 72 20 28 69 76 20 3d 20 30 3b ;...for (iv = 0;
1d8f0 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e 74 iv < rng->Point
1d900 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 7b 0a 09 s; iv++)... {..
1d910 09 20 20 20 20 20 20 67 61 69 61 47 65 74 50 6f . gaiaGetPo
1d920 69 6e 74 58 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f intXYZ (rng->Coo
1d930 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c rds, iv, &x, &y,
1d940 20 26 7a 29 3b 0a 09 09 20 20 20 20 20 20 69 66 &z);... if
1d950 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 (iv == 0 || iv
1d960 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 == (rng->Points
1d970 2d 20 31 29 29 0a 09 09 09 7b 0a 09 09 09 20 20 - 1))....{....
1d980 20 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 20 6c /* first and l
1d990 61 73 74 20 76 65 72 74 69 63 65 73 20 61 72 65 ast vertices are
1d9a0 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 2a 2f uncompressed */
1d9b0 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 6f .... gaiaExpo
1d9c0 72 74 36 34 20 28 70 74 72 2c 20 78 2c 20 31 2c rt64 (ptr, x, 1,
1d9d0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1d9e0 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
1d9f0 36 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 64 (ptr + 8, y,
1da00 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1da10 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 6f .... gaiaExpo
1da20 72 74 36 34 20 28 70 74 72 20 2b 20 31 36 2c 20 rt64 (ptr + 16,
1da30 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 z, 1, endian_arc
1da40 68 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b h);.... ptr +
1da50 3d 20 32 34 3b 0a 09 09 09 7d 0a 09 09 20 20 20 = 24;....}...
1da60 20 20 20 65 6c 73 65 0a 09 09 09 7b 0a 09 09 09 else....{....
1da70 20 20 20 20 2f 2a 20 63 6f 6d 70 72 65 73 73 69 /* compressi
1da80 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 ng any other int
1da90 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 ermediate vertex
1daa0 20 2a 2f 0a 09 09 09 20 20 20 20 66 78 20 3d 20 */.... fx =
1dab0 28 66 6c 6f 61 74 29 20 28 78 20 2d 20 6c 61 73 (float) (x - las
1dac0 74 5f 78 29 3b 0a 09 09 09 20 20 20 20 66 79 20 t_x);.... fy
1dad0 3d 20 28 66 6c 6f 61 74 29 20 28 79 20 2d 20 6c = (float) (y - l
1dae0 61 73 74 5f 79 29 3b 0a 09 09 09 20 20 20 20 66 ast_y);.... f
1daf0 7a 20 3d 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d z = (float) (z -
1db00 20 6c 61 73 74 5f 7a 29 3b 0a 09 09 09 20 20 20 last_z);....
1db10 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1db20 70 74 72 2c 20 66 78 2c 20 31 2c 20 65 6e 64 69 ptr, fx, 1, endi
1db30 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 an_arch);....
1db40 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
1db50 70 74 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c 20 ptr + 4, fy, 1,
1db60 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
1db70 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 46 . gaiaExportF
1db80 33 32 20 28 70 74 72 20 2b 20 38 2c 20 66 7a 2c 32 (ptr + 8, fz,
1db90 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1dba0 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 ;.... ptr +=
1dbb0 31 32 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 12;....}...
1dbc0 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 20 last_x = x;...
1dbd0 20 20 20 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b last_y = y;
1dbe0 0a 09 09 20 20 20 20 20 20 6c 61 73 74 5f 7a 20 ... last_z
1dbf0 3d 20 7a 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 = z;... }..
1dc00 7d 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 }.. *ptr = GAIA
1dc10 5f 4d 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e _MARK_END;./* EN
1dc20 44 20 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 D signature */..
1dc30 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
1dc40 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e ase GAIA_POLYGON
1dc50 4d 3a 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 M:.. *ptr = GAI
1dc60 41 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a A_MARK_START;./*
1dc70 20 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 START signature
1dc80 20 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 */.. *(ptr + 1
1dc90 29 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f ) = GAIA_LITTLE_
1dca0 45 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 ENDIAN;./* byte
1dcb0 6f 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 ordering */.. g
1dcc0 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
1dcd0 20 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 + 2, geom->Srid
1dce0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1dcf0 29 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a );./* the SRID *
1dd00 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
1dd10 34 20 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 4 (ptr + 6, geom
1dd20 2d 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 ->MinX, 1, endia
1dd30 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
1dd40 2d 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 - minimum X */..
1dd50 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1dd60 70 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e ptr + 14, geom->
1dd70 4d 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f MinY, 1, endian_
1dd80 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 arch);./* MBR -
1dd90 6d 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 minimum Y */..
1dda0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
1ddb0 72 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 r + 22, geom->Ma
1ddc0 78 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 xX, 1, endian_ar
1ddd0 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 ch);./* MBR - ma
1dde0 78 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 ximum X */.. ga
1ddf0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
1de00 2b 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 + 30, geom->MaxY
1de10 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1de20 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 );./* MBR - maxi
1de30 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 mum Y */.. *(pt
1de40 72 20 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d r + 38) = GAIA_M
1de50 41 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 ARK_MBR;./* MBR
1de60 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 signature */..
1de70 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
1de80 72 20 2b 20 33 39 2c 20 47 41 49 41 5f 43 4f 4d r + 39, GAIA_COM
1de90 50 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 4d PRESSED_POLYGONM
1dea0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1deb0 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 );./* class POLY
1dec0 47 4f 4e 20 58 59 4d 20 2a 2f 0a 09 20 20 67 61 GON XYM */.. ga
1ded0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
1dee0 2b 20 34 33 2c 20 70 6f 6c 79 67 2d 3e 4e 75 6d + 43, polyg->Num
1def0 49 6e 74 65 72 69 6f 72 73 20 2b 20 31 2c 20 31 Interiors + 1, 1
1df00 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1df10 2f 2a 20 23 20 72 69 6e 67 73 20 2a 2f 0a 09 20 /* # rings */..
1df20 20 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 rng = polyg->Ex
1df30 74 65 72 69 6f 72 3b 0a 09 20 20 67 61 69 61 45 terior;.. gaiaE
1df40 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 34 xport32 (ptr + 4
1df50 37 2c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 7, rng->Points,
1df60 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1df70 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2d 20 65 ./* # points - e
1df80 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a xterior ring */.
1df90 09 20 20 70 74 72 20 2b 3d 20 35 31 3b 0a 09 20 . ptr += 51;..
1dfa0 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 for (iv = 0; iv
1dfb0 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 < rng->Points;
1dfc0 69 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 67 iv++).. {...g
1dfd0 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d 20 28 aiaGetPointXYM (
1dfe0 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c rng->Coords, iv,
1dff0 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a 09 09 &x, &y, &m);...
1e000 69 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 if (iv == 0 || i
1e010 76 20 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 v == (rng->Point
1e020 73 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 09 s - 1))... {...
1e030 20 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 61 /* first a
1e040 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 nd last vertices
1e050 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 are uncompresse
1e060 64 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 d */... gai
1e070 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
1e080 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
1e090 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 h);... gaia
1e0a0 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1e0b0 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 8, y, 1, endian_
1e0c0 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 arch);... g
1e0d0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1e0e0 20 2b 20 31 36 2c 20 6d 2c 20 31 2c 20 65 6e 64 + 16, m, 1, end
1e0f0 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
1e100 20 20 20 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 ptr += 24;...
1e110 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 20 7b }...else... {
1e120 0a 09 09 20 20 20 20 20 20 2f 2a 20 63 6f 6d 70 ... /* comp
1e130 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 ressing any othe
1e140 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 76 r intermediate v
1e150 65 72 74 65 78 20 2a 2f 0a 09 09 20 20 20 20 20 ertex */...
1e160 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 28 78 fx = (float) (x
1e170 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 20 20 - last_x);...
1e180 20 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 29 fy = (float)
1e190 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a 09 (y - last_y);..
1e1a0 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
1e1b0 74 46 33 32 20 28 70 74 72 2c 20 66 78 2c 20 31 tF32 (ptr, fx, 1
1e1c0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
1e1d0 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
1e1e0 72 74 46 33 32 20 28 70 74 72 20 2b 20 34 2c 20 rtF32 (ptr + 4,
1e1f0 66 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 fy, 1, endian_ar
1e200 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 ch);... gai
1e210 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1e220 20 38 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 8, m, 1, endian
1e230 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
1e240 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 20 20 7d ptr += 16;... }
1e250 0a 09 09 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 ...last_x = x;..
1e260 09 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 20 20 .last_y = y;..
1e270 20 20 7d 0a 09 20 20 66 6f 72 20 28 69 62 20 3d }.. for (ib =
1e280 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 0; ib < polyg->
1e290 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 NumInteriors; ib
1e2a0 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 ++).. {...rng
1e2b0 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 = polyg->Interi
1e2c0 6f 72 73 20 2b 20 69 62 3b 0a 09 09 67 61 69 61 ors + ib;...gaia
1e2d0 45 78 70 6f 72 74 33 32 20 28 70 74 72 2c 20 72 Export32 (ptr, r
1e2e0 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 ng->Points, 1, e
1e2f0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1e300 23 20 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 72 # points - inter
1e310 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 70 74 ior ring */...pt
1e320 72 20 2b 3d 20 34 3b 0a 09 09 66 6f 72 20 28 69 r += 4;...for (i
1e330 76 20 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d v = 0; iv < rng-
1e340 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 >Points; iv++)..
1e350 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 . {... gai
1e360 61 47 65 74 50 6f 69 6e 74 58 59 4d 20 28 72 6e aGetPointXYM (rn
1e370 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 g->Coords, iv, &
1e380 78 2c 20 26 79 2c 20 26 6d 29 3b 0a 09 09 20 20 x, &y, &m);...
1e390 20 20 20 20 69 66 20 28 69 76 20 3d 3d 20 30 20 if (iv == 0
1e3a0 7c 7c 20 69 76 20 3d 3d 20 28 72 6e 67 2d 3e 50 || iv == (rng->P
1e3b0 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 09 7b oints - 1))....{
1e3c0 0a 09 09 09 20 20 20 20 2f 2a 20 66 69 72 73 74 .... /* first
1e3d0 20 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 and last vertic
1e3e0 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 es are uncompres
1e3f0 73 65 64 20 2a 2f 0a 09 09 09 20 20 20 20 67 61 sed */.... ga
1e400 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
1e410 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 x, 1, endian_ar
1e420 63 68 29 3b 0a 09 09 09 20 20 20 20 67 61 69 61 ch);.... gaia
1e430 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Export64 (ptr +
1e440 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 8, y, 1, endian_
1e450 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 67 61 arch);.... ga
1e460 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
1e470 2b 20 31 36 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 + 16, m, 1, endi
1e480 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 an_arch);....
1e490 20 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 09 7d ptr += 24;....}
1e4a0 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a 09 09 ... else...
1e4b0 09 7b 0a 09 09 09 20 20 20 20 2f 2a 20 63 6f 6d .{.... /* com
1e4c0 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 pressing any oth
1e4d0 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 er intermediate
1e4e0 76 65 72 74 65 78 20 2a 2f 0a 09 09 09 20 20 20 vertex */....
1e4f0 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 28 78 fx = (float) (x
1e500 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 09 20 - last_x);....
1e510 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 29 20 fy = (float)
1e520 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a 09 09 (y - last_y);...
1e530 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 46 . gaiaExportF
1e540 33 32 20 28 70 74 72 2c 20 66 78 2c 20 31 2c 20 32 (ptr, fx, 1,
1e550 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
1e560 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 46 . gaiaExportF
1e570 33 32 20 28 70 74 72 20 2b 20 34 2c 20 66 79 2c 32 (ptr + 4, fy,
1e580 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1e590 3b 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 ;.... gaiaExp
1e5a0 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 ort64 (ptr + 8,
1e5b0 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 m, 1, endian_arc
1e5c0 68 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b h);.... ptr +
1e5d0 3d 20 31 36 3b 0a 09 09 09 7d 0a 09 09 20 20 20 = 16;....}...
1e5e0 20 20 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 last_x = x;..
1e5f0 09 20 20 20 20 20 20 6c 61 73 74 5f 79 20 3d 20 . last_y =
1e600 79 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d 0a y;... }.. }.
1e610 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d . *ptr = GAIA_M
1e620 41 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 ARK_END;./* END
1e630 73 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 signature */..
1e640 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
1e650 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d e GAIA_POLYGONZM
1e660 3a 0a 09 20 20 2a 70 74 72 20 3d 20 47 41 49 41 :.. *ptr = GAIA
1e670 5f 4d 41 52 4b 5f 53 54 41 52 54 3b 09 2f 2a 20 _MARK_START;./*
1e680 53 54 41 52 54 20 73 69 67 6e 61 74 75 72 65 20 START signature
1e690 2a 2f 0a 09 20 20 2a 28 70 74 72 20 2b 20 31 29 */.. *(ptr + 1)
1e6a0 20 3d 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 = GAIA_LITTLE_E
1e6b0 4e 44 49 41 4e 3b 09 2f 2a 20 62 79 74 65 20 6f NDIAN;./* byte o
1e6c0 72 64 65 72 69 6e 67 20 2a 2f 0a 09 20 20 67 61 rdering */.. ga
1e6d0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
1e6e0 2b 20 32 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c + 2, geom->Srid,
1e6f0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1e700 3b 09 2f 2a 20 74 68 65 20 53 52 49 44 20 2a 2f ;./* the SRID */
1e710 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1e720 20 28 70 74 72 20 2b 20 36 2c 20 67 65 6f 6d 2d (ptr + 6, geom-
1e730 3e 4d 69 6e 58 2c 20 31 2c 20 65 6e 64 69 61 6e >MinX, 1, endian
1e740 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d _arch);./* MBR -
1e750 20 6d 69 6e 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 minimum X */..
1e760 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1e770 74 72 20 2b 20 31 34 2c 20 67 65 6f 6d 2d 3e 4d tr + 14, geom->M
1e780 69 6e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 inY, 1, endian_a
1e790 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d rch);./* MBR - m
1e7a0 69 6e 69 6d 75 6d 20 59 20 2a 2f 0a 09 20 20 67 inimum Y */.. g
1e7b0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1e7c0 20 2b 20 32 32 2c 20 67 65 6f 6d 2d 3e 4d 61 78 + 22, geom->Max
1e7d0 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 X, 1, endian_arc
1e7e0 68 29 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 h);./* MBR - max
1e7f0 69 6d 75 6d 20 58 20 2a 2f 0a 09 20 20 67 61 69 imum X */.. gai
1e800 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1e810 20 33 30 2c 20 67 65 6f 6d 2d 3e 4d 61 78 59 2c 30, geom->MaxY,
1e820 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1e830 3b 09 2f 2a 20 4d 42 52 20 2d 20 6d 61 78 69 6d ;./* MBR - maxim
1e840 75 6d 20 59 20 2a 2f 0a 09 20 20 2a 28 70 74 72 um Y */.. *(ptr
1e850 20 2b 20 33 38 29 20 3d 20 47 41 49 41 5f 4d 41 + 38) = GAIA_MA
1e860 52 4b 5f 4d 42 52 3b 09 2f 2a 20 4d 42 52 20 73 RK_MBR;./* MBR s
1e870 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 67 ignature */.. g
1e880 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
1e890 20 2b 20 33 39 2c 20 47 41 49 41 5f 43 4f 4d 50 + 39, GAIA_COMP
1e8a0 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e 5a 4d RESSED_POLYGONZM
1e8b0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1e8c0 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 );./* class POLY
1e8d0 47 4f 4e 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 GON */.. gaiaEx
1e8e0 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 34 33 port32 (ptr + 43
1e8f0 2c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 , polyg->NumInte
1e900 72 69 6f 72 73 20 2b 20 31 2c 20 31 2c 20 65 6e riors + 1, 1, en
1e910 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 dian_arch);./* #
1e920 20 72 69 6e 67 73 20 2a 2f 0a 09 20 20 72 6e 67 rings */.. rng
1e930 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 = polyg->Exteri
1e940 6f 72 3b 0a 09 20 20 67 61 69 61 45 78 70 6f 72 or;.. gaiaExpor
1e950 74 33 32 20 28 70 74 72 20 2b 20 34 37 2c 20 72 t32 (ptr + 47, r
1e960 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 ng->Points, 1, e
1e970 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1e980 23 20 70 6f 69 6e 74 73 20 2d 20 65 78 74 65 72 # points - exter
1e990 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 70 ior ring */.. p
1e9a0 74 72 20 2b 3d 20 35 31 3b 0a 09 20 20 66 6f 72 tr += 51;.. for
1e9b0 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 72 (iv = 0; iv < r
1e9c0 6e 67 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b ng->Points; iv++
1e9d0 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 69 61 47 ).. {...gaiaG
1e9e0 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 etPointXYZM (rng
1e9f0 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 ->Coords, iv, &x
1ea00 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 , &y, &z, &m);..
1ea10 09 69 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 .if (iv == 0 ||
1ea20 69 76 20 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e iv == (rng->Poin
1ea30 74 73 20 2d 20 31 29 29 0a 09 09 20 20 7b 0a 09 ts - 1))... {..
1ea40 09 20 20 20 20 20 20 2f 2a 20 66 69 72 73 74 20 . /* first
1ea50 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 and last vertice
1ea60 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 s are uncompress
1ea70 65 64 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 ed */... ga
1ea80 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
1ea90 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 x, 1, endian_ar
1eaa0 63 68 29 3b 0a 09 09 20 20 20 20 20 20 67 61 69 ch);... gai
1eab0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1eac0 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 8, y, 1, endian
1ead0 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
1eae0 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
1eaf0 72 20 2b 20 31 36 2c 20 7a 2c 20 31 2c 20 65 6e r + 16, z, 1, en
1eb00 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 dian_arch);...
1eb10 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
1eb20 20 28 70 74 72 20 2b 20 32 34 2c 20 6d 2c 20 31 (ptr + 24, m, 1
1eb30 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
1eb40 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 33 .. ptr += 3
1eb50 32 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 2;... }...else.
1eb60 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a .. {... /*
1eb70 20 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 compressing any
1eb80 20 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 other intermedi
1eb90 61 74 65 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 ate vertex */...
1eba0 20 20 20 20 20 20 66 78 20 3d 20 28 66 6c 6f 61 fx = (floa
1ebb0 74 29 20 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b t) (x - last_x);
1ebc0 0a 09 09 20 20 20 20 20 20 66 79 20 3d 20 28 66 ... fy = (f
1ebd0 6c 6f 61 74 29 20 28 79 20 2d 20 6c 61 73 74 5f loat) (y - last_
1ebe0 79 29 3b 0a 09 09 20 20 20 20 20 20 66 7a 20 3d y);... fz =
1ebf0 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d 20 6c 61 (float) (z - la
1ec00 73 74 5f 7a 29 3b 0a 09 09 20 20 20 20 20 20 67 st_z);... g
1ec10 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 aiaExportF32 (pt
1ec20 72 2c 20 66 78 2c 20 31 2c 20 65 6e 64 69 61 6e r, fx, 1, endian
1ec30 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
1ec40 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 gaiaExportF32 (p
1ec50 74 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c 20 65 tr + 4, fy, 1, e
1ec60 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 ndian_arch);...
1ec70 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 46 gaiaExportF
1ec80 33 32 20 28 70 74 72 20 2b 20 38 2c 20 66 7a 2c 32 (ptr + 8, fz,
1ec90 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
1eca0 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 ;... gaiaEx
1ecb0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 32 port64 (ptr + 12
1ecc0 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , m, 1, endian_a
1ecd0 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 70 74 rch);... pt
1ece0 72 20 2b 3d 20 32 30 3b 0a 09 09 20 20 7d 0a 09 r += 20;... }..
1ecf0 09 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 6c .last_x = x;...l
1ed00 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 6c 61 73 ast_y = y;...las
1ed10 74 5f 7a 20 3d 20 7a 3b 0a 09 20 20 20 20 7d 0a t_z = z;.. }.
1ed20 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 . for (ib = 0;
1ed30 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 ib < polyg->NumI
1ed40 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a nteriors; ib++).
1ed50 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 . {...rng = p
1ed60 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 olyg->Interiors
1ed70 2b 20 69 62 3b 0a 09 09 67 61 69 61 45 78 70 6f + ib;...gaiaExpo
1ed80 72 74 33 32 20 28 70 74 72 2c 20 72 6e 67 2d 3e rt32 (ptr, rng->
1ed90 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 Points, 1, endia
1eda0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f n_arch);./* # po
1edb0 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 6f 72 20 ints - interior
1edc0 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d ring */...ptr +=
1edd0 20 34 3b 0a 09 09 66 6f 72 20 28 69 76 20 3d 20 4;...for (iv =
1ede0 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
1edf0 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 7b nts; iv++)... {
1ee00 0a 09 09 20 20 20 20 20 20 67 61 69 61 47 65 74 ... gaiaGet
1ee10 50 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e PointXYZM (rng->
1ee20 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 Coords, iv, &x,
1ee30 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 20 &y, &z, &m);...
1ee40 20 20 20 20 20 69 66 20 28 69 76 20 3d 3d 20 30 if (iv == 0
1ee50 20 7c 7c 20 69 76 20 3d 3d 20 28 72 6e 67 2d 3e || iv == (rng->
1ee60 50 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 09 Points - 1))....
1ee70 7b 0a 09 09 09 20 20 20 20 2f 2a 20 66 69 72 73 {.... /* firs
1ee80 74 20 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 t and last verti
1ee90 63 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 ces are uncompre
1eea0 73 73 65 64 20 2a 2f 0a 09 09 09 20 20 20 20 67 ssed */.... g
1eeb0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1eec0 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , x, 1, endian_a
1eed0 72 63 68 29 3b 0a 09 09 09 20 20 20 20 67 61 69 rch);.... gai
1eee0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1eef0 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 6e 8, y, 1, endian
1ef00 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 67 _arch);.... g
1ef10 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
1ef20 20 2b 20 31 36 2c 20 7a 2c 20 31 2c 20 65 6e 64 + 16, z, 1, end
1ef30 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 ian_arch);....
1ef40 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
1ef50 70 74 72 20 2b 20 32 34 2c 20 6d 2c 20 31 2c 20 ptr + 24, m, 1,
1ef60 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
1ef70 09 20 20 20 20 70 74 72 20 2b 3d 20 33 32 3b 0a . ptr += 32;.
1ef80 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 ...}... els
1ef90 65 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 2f 2a e....{.... /*
1efa0 20 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 compressing any
1efb0 20 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 other intermedi
1efc0 61 74 65 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 ate vertex */...
1efd0 09 20 20 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 . fx = (float
1efe0 29 20 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a ) (x - last_x);.
1eff0 09 09 09 20 20 20 20 66 79 20 3d 20 28 66 6c 6f ... fy = (flo
1f000 61 74 29 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 at) (y - last_y)
1f010 3b 0a 09 09 09 20 20 20 20 66 7a 20 3d 20 28 66 ;.... fz = (f
1f020 6c 6f 61 74 29 20 28 7a 20 2d 20 6c 61 73 74 5f loat) (z - last_
1f030 7a 29 3b 0a 09 09 09 20 20 20 20 67 61 69 61 45 z);.... gaiaE
1f040 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c 20 66 xportF32 (ptr, f
1f050 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
1f060 68 29 3b 0a 09 09 09 20 20 20 20 67 61 69 61 45 h);.... gaiaE
1f070 78 70 6f 72 74 46 33 32 20 28 70 74 72 20 2b 20 xportF32 (ptr +
1f080 34 2c 20 66 79 2c 20 31 2c 20 65 6e 64 69 61 6e 4, fy, 1, endian
1f090 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 67 _arch);.... g
1f0a0 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 aiaExportF32 (pt
1f0b0 72 20 2b 20 38 2c 20 66 7a 2c 20 31 2c 20 65 6e r + 8, fz, 1, en
1f0c0 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 dian_arch);....
1f0d0 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
1f0e0 28 70 74 72 20 2b 20 31 32 2c 20 6d 2c 20 31 2c (ptr + 12, m, 1,
1f0f0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
1f100 09 09 20 20 20 20 70 74 72 20 2b 3d 20 32 30 3b .. ptr += 20;
1f110 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 6c 61 ....}... la
1f120 73 74 5f 78 20 3d 20 78 3b 0a 09 09 20 20 20 20 st_x = x;...
1f130 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 last_y = y;...
1f140 20 20 20 20 20 20 6c 61 73 74 5f 7a 20 3d 20 7a last_z = z
1f150 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d 0a 09 ;... }.. }..
1f160 20 20 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 *ptr = GAIA_MA
1f170 52 4b 5f 45 4e 44 3b 09 2f 2a 20 45 4e 44 20 73 RK_END;./* END s
1f180 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 62 ignature */.. b
1f190 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 reak;. defa
1f1a0 75 6c 74 3a 0a 09 20 20 2f 2a 20 74 68 69 73 20 ult:.. /* this
1f1b0 6f 6e 65 20 69 73 20 61 20 4d 55 4c 54 49 78 78 one is a MULTIxx
1f1c0 78 78 20 6f 72 20 61 20 47 45 4f 4d 45 54 52 59 xx or a GEOMETRY
1f1d0 43 4f 4c 4c 45 43 54 49 4f 4e 20 2d 20 62 75 69 COLLECTION - bui
1f1e0 6c 64 69 6e 67 20 74 68 65 20 6d 61 69 6e 20 68 lding the main h
1f1f0 65 61 64 65 72 20 2a 2f 0a 09 20 20 2a 70 74 72 eader */.. *ptr
1f200 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 53 54 41 = GAIA_MARK_STA
1f210 52 54 3b 09 2f 2a 20 53 54 41 52 54 20 73 69 67 RT;./* START sig
1f220 6e 61 74 75 72 65 20 2a 2f 0a 09 20 20 2a 28 70 nature */.. *(p
1f230 74 72 20 2b 20 31 29 20 3d 20 47 41 49 41 5f 4c tr + 1) = GAIA_L
1f240 49 54 54 4c 45 5f 45 4e 44 49 41 4e 3b 09 2f 2a ITTLE_ENDIAN;./*
1f250 20 62 79 74 65 20 6f 72 64 65 72 69 6e 67 20 2a byte ordering *
1f260 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 /.. gaiaExport3
1f270 32 20 28 70 74 72 20 2b 20 32 2c 20 67 65 6f 6d 2 (ptr + 2, geom
1f280 2d 3e 53 72 69 64 2c 20 31 2c 20 65 6e 64 69 61 ->Srid, 1, endia
1f290 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 n_arch);./* the
1f2a0 53 52 49 44 20 2a 2f 0a 09 20 20 67 61 69 61 45 SRID */.. gaiaE
1f2b0 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 36 xport64 (ptr + 6
1f2c0 2c 20 67 65 6f 6d 2d 3e 4d 69 6e 58 2c 20 31 2c , geom->MinX, 1,
1f2d0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
1f2e0 2a 20 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 * MBR - minimum
1f2f0 58 20 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f X */.. gaiaExpo
1f300 72 74 36 34 20 28 70 74 72 20 2b 20 31 34 2c 20 rt64 (ptr + 14,
1f310 67 65 6f 6d 2d 3e 4d 69 6e 59 2c 20 31 2c 20 65 geom->MinY, 1, e
1f320 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1f330 4d 42 52 20 2d 20 6d 69 6e 69 6d 75 6d 20 59 20 MBR - minimum Y
1f340 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1f350 36 34 20 28 70 74 72 20 2b 20 32 32 2c 20 67 65 64 (ptr + 22, ge
1f360 6f 6d 2d 3e 4d 61 78 58 2c 20 31 2c 20 65 6e 64 om->MaxX, 1, end
1f370 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 ian_arch);./* MB
1f380 52 20 2d 20 6d 61 78 69 6d 75 6d 20 58 20 2a 2f R - maximum X */
1f390 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
1f3a0 20 28 70 74 72 20 2b 20 33 30 2c 20 67 65 6f 6d (ptr + 30, geom
1f3b0 2d 3e 4d 61 78 59 2c 20 31 2c 20 65 6e 64 69 61 ->MaxY, 1, endia
1f3c0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 42 52 20 n_arch);./* MBR
1f3d0 2d 20 6d 61 78 69 6d 75 6d 20 59 20 2a 2f 0a 09 - maximum Y */..
1f3e0 20 20 2a 28 70 74 72 20 2b 20 33 38 29 20 3d 20 *(ptr + 38) =
1f3f0 47 41 49 41 5f 4d 41 52 4b 5f 4d 42 52 3b 09 2f GAIA_MARK_MBR;./
1f400 2a 20 4d 42 52 20 73 69 67 6e 61 74 75 72 65 20 * MBR signature
1f410 2a 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 */.. gaiaExport
1f420 33 32 20 28 70 74 72 20 2b 20 33 39 2c 20 74 79 32 (ptr + 39, ty
1f430 70 65 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 pe, 1, endian_ar
1f440 63 68 29 3b 09 2f 2a 20 67 65 6f 6d 65 74 72 69 ch);./* geometri
1f450 63 20 63 6c 61 73 73 20 2a 2f 0a 09 20 20 67 61 c class */.. ga
1f460 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
1f470 2b 20 34 33 2c 20 65 6e 74 69 74 69 65 73 2c 20 + 43, entities,
1f480 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1f490 09 2f 2a 20 23 20 65 6e 74 69 74 69 65 73 20 2a ./* # entities *
1f4a0 2f 0a 09 20 20 70 74 72 20 2b 3d 20 34 37 3b 0a /.. ptr += 47;.
1f4b0 09 20 20 70 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d . point = geom-
1f4c0 3e 46 69 72 73 74 50 6f 69 6e 74 3b 0a 09 20 20 >FirstPoint;..
1f4d0 77 68 69 6c 65 20 28 70 6f 69 6e 74 29 0a 09 20 while (point)..
1f4e0 20 20 20 7b 0a 09 09 2a 70 74 72 20 3d 20 47 41 {...*ptr = GA
1f4f0 49 41 5f 4d 41 52 4b 5f 45 4e 54 49 54 59 3b 09 IA_MARK_ENTITY;.
1f500 2f 2a 20 45 4e 54 49 54 59 20 73 69 67 6e 61 74 /* ENTITY signat
1f510 75 72 65 20 2a 2f 0a 09 09 69 66 20 28 67 65 6f ure */...if (geo
1f520 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
1f530 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a l == GAIA_XY_Z).
1f540 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 .. {... ga
1f550 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
1f560 2b 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e 54 5a + 1, GAIA_POINTZ
1f570 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1f580 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 49 4e );./* class POIN
1f590 54 20 58 59 5a 20 2a 2f 0a 09 09 20 20 20 20 20 T XYZ */...
1f5a0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
1f5b0 74 72 20 2b 20 35 2c 20 70 6f 69 6e 74 2d 3e 58 tr + 5, point->X
1f5c0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
1f5d0 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 09 20 20 20 );./* X */...
1f5e0 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
1f5f0 28 70 74 72 20 2b 20 31 33 2c 20 70 6f 69 6e 74 (ptr + 13, point
1f600 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 ->Y, 1, endian_a
1f610 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 rch);./* Y */...
1f620 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
1f630 36 34 20 28 70 74 72 20 2b 20 32 31 2c 20 70 6f 64 (ptr + 21, po
1f640 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 int->Z, 1, endia
1f650 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f n_arch);./* Z */
1f660 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 ... ptr +=
1f670 32 39 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 29;... }...else
1f680 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
1f690 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
1f6a0 41 5f 58 59 5f 4d 29 0a 09 09 20 20 7b 0a 09 09 A_XY_M)... {...
1f6b0 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
1f6c0 33 32 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 32 (ptr + 1, GAI
1f6d0 41 5f 50 4f 49 4e 54 4d 2c 20 31 2c 20 65 6e 64 A_POINTM, 1, end
1f6e0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c ian_arch);./* cl
1f6f0 61 73 73 20 50 4f 49 4e 54 20 58 59 4d 20 2a 2f ass POINT XYM */
1f700 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
1f710 6f 72 74 36 34 20 28 70 74 72 20 2b 20 35 2c 20 ort64 (ptr + 5,
1f720 70 6f 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 point->X, 1, end
1f730 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
1f740 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
1f750 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 xport64 (ptr + 1
1f760 33 2c 20 70 6f 69 6e 74 2d 3e 59 2c 20 31 2c 20 3, point->Y, 1,
1f770 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1f780 20 59 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 Y */... ga
1f790 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
1f7a0 2b 20 32 31 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 + 21, point->M,
1f7b0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1f7c0 09 2f 2a 20 4d 20 2a 2f 0a 09 09 20 20 20 20 20 ./* M */...
1f7d0 20 70 74 72 20 2b 3d 20 32 39 3b 0a 09 09 20 20 ptr += 29;...
1f7e0 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f }...else if (geo
1f7f0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
1f800 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
1f810 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
1f820 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
1f830 72 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e r + 1, GAIA_POIN
1f840 54 5a 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 TZM, 1, endian_a
1f850 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 rch);./* class P
1f860 4f 49 4e 54 20 58 59 5a 4d 20 2a 2f 0a 09 09 20 OINT XYZM */...
1f870 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 gaiaExport6
1f880 34 20 28 70 74 72 20 2b 20 35 2c 20 70 6f 69 6e 4 (ptr + 5, poin
1f890 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->X, 1, endian_
1f8a0 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 arch);./* X */..
1f8b0 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
1f8c0 74 36 34 20 28 70 74 72 20 2b 20 31 33 2c 20 70 t64 (ptr + 13, p
1f8d0 6f 69 6e 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 oint->Y, 1, endi
1f8e0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a an_arch);./* Y *
1f8f0 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 /... gaiaEx
1f900 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 32 31 port64 (ptr + 21
1f910 2c 20 70 6f 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 , point->Z, 1, e
1f920 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1f930 5a 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 Z */... gai
1f940 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 2b aExport64 (ptr +
1f950 20 32 39 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 29, point->M, 1
1f960 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
1f970 2f 2a 20 4d 20 2a 2f 0a 09 09 20 20 20 20 20 20 /* M */...
1f980 70 74 72 20 2b 3d 20 33 37 3b 0a 09 09 20 20 7d ptr += 37;... }
1f990 0a 09 09 65 6c 73 65 0a 09 09 20 20 7b 0a 09 09 ...else... {...
1f9a0 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
1f9b0 33 32 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 32 (ptr + 1, GAI
1f9c0 41 5f 50 4f 49 4e 54 2c 20 31 2c 20 65 6e 64 69 A_POINT, 1, endi
1f9d0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 an_arch);./* cla
1f9e0 73 73 20 50 4f 49 4e 54 20 2a 2f 0a 09 09 20 20 ss POINT */...
1f9f0 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
1fa00 20 28 70 74 72 20 2b 20 35 2c 20 70 6f 69 6e 74 (ptr + 5, point
1fa10 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 ->X, 1, endian_a
1fa20 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 09 rch);./* X */...
1fa30 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
1fa40 36 34 20 28 70 74 72 20 2b 20 31 33 2c 20 70 6f 64 (ptr + 13, po
1fa50 69 6e 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 int->Y, 1, endia
1fa60 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f n_arch);./* Y */
1fa70 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 ... ptr +=
1fa80 32 31 3b 0a 09 09 20 20 7d 0a 09 09 70 6f 69 6e 21;... }...poin
1fa90 74 20 3d 20 70 6f 69 6e 74 2d 3e 4e 65 78 74 3b t = point->Next;
1faa0 0a 09 20 20 20 20 7d 0a 09 20 20 6c 69 6e 65 20 .. }.. line
1fab0 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 4c 69 6e = geom->FirstLin
1fac0 65 73 74 72 69 6e 67 3b 0a 09 20 20 77 68 69 6c estring;.. whil
1fad0 65 20 28 6c 69 6e 65 29 0a 09 20 20 20 20 7b 0a e (line).. {.
1fae0 09 09 2a 70 74 72 20 3d 20 47 41 49 41 5f 4d 41 ..*ptr = GAIA_MA
1faf0 52 4b 5f 45 4e 54 49 54 59 3b 09 2f 2a 20 45 4e RK_ENTITY;./* EN
1fb00 54 49 54 59 20 73 69 67 6e 61 74 75 72 65 20 2a TITY signature *
1fb10 2f 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 /...if (geom->Di
1fb20 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
1fb30 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 GAIA_XY_Z)...
1fb40 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 gaiaExport32 (p
1fb50 74 72 20 2b 20 31 2c 20 47 41 49 41 5f 43 4f 4d tr + 1, GAIA_COM
1fb60 50 52 45 53 53 45 44 5f 4c 49 4e 45 53 54 52 49 PRESSED_LINESTRI
1fb70 4e 47 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 NGZ, 1, endian_a
1fb80 72 63 68 29 3b 09 2f 2a 20 63 6c 61 73 73 20 4c rch);./* class L
1fb90 49 4e 45 53 54 52 49 4e 47 20 58 59 5a 20 2a 2f INESTRING XYZ */
1fba0 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
1fbb0 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
1fbc0 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 == GAIA_XY_M)..
1fbd0 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 33 . gaiaExport3
1fbe0 32 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 41 2 (ptr + 1, GAIA
1fbf0 5f 43 4f 4d 50 52 45 53 53 45 44 5f 4c 49 4e 45 _COMPRESSED_LINE
1fc00 53 54 52 49 4e 47 4d 2c 20 31 2c 20 65 6e 64 69 STRINGM, 1, endi
1fc10 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c 61 an_arch);./* cla
1fc20 73 73 20 4c 49 4e 45 53 54 52 49 4e 47 20 58 59 ss LINESTRING XY
1fc30 4d 20 2a 2f 0a 09 09 65 6c 73 65 20 69 66 20 28 M */...else if (
1fc40 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
1fc50 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
1fc60 5a 5f 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 Z_M)... gaiaE
1fc70 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 xport32 (ptr + 1
1fc80 2c 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 , GAIA_COMPRESSE
1fc90 44 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 2c 20 D_LINESTRINGZM,
1fca0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
1fcb0 09 2f 2a 20 63 6c 61 73 73 20 4c 49 4e 45 53 54 ./* class LINEST
1fcc0 52 49 4e 47 20 58 59 5a 4d 20 2a 2f 0a 09 09 65 RING XYZM */...e
1fcd0 6c 73 65 0a 09 09 20 20 20 20 67 61 69 61 45 78 lse... gaiaEx
1fce0 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c port32 (ptr + 1,
1fcf0 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 GAIA_COMPRESSED
1fd00 5f 4c 49 4e 45 53 54 52 49 4e 47 2c 20 31 2c 20 _LINESTRING, 1,
1fd10 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
1fd20 20 63 6c 61 73 73 20 4c 49 4e 45 53 54 52 49 4e class LINESTRIN
1fd30 47 20 2a 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 G */...gaiaExpor
1fd40 74 33 32 20 28 70 74 72 20 2b 20 35 2c 20 6c 69 t32 (ptr + 5, li
1fd50 6e 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 ne->Points, 1, e
1fd60 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
1fd70 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 09 70 74 # points */...pt
1fd80 72 20 2b 3d 20 39 3b 0a 09 09 66 6f 72 20 28 69 r += 9;...for (i
1fd90 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 6e 65 v = 0; iv < line
1fda0 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a ->Points; iv++).
1fdb0 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 7a 20 .. {... z
1fdc0 3d 20 30 2e 30 3b 0a 09 09 20 20 20 20 20 20 6d = 0.0;... m
1fdd0 20 3d 20 30 2e 30 3b 0a 09 09 20 20 20 20 20 20 = 0.0;...
1fde0 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
1fdf0 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
1fe00 5f 58 59 5f 5a 29 0a 09 09 09 7b 0a 09 09 09 20 _XY_Z)....{....
1fe10 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 gaiaGetPointX
1fe20 59 5a 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 YZ (line->Coords
1fe30 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 7a , iv, &x, &y, &z
1fe40 29 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 );....}...
1fe50 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
1fe60 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
1fe70 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 09 7b GAIA_XY_M)....{
1fe80 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 .... gaiaGetP
1fe90 6f 69 6e 74 58 59 4d 20 28 6c 69 6e 65 2d 3e 43 ointXYM (line->C
1fea0 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
1feb0 79 2c 20 26 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 y, &m);....}...
1fec0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 67 65 else if (ge
1fed0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
1fee0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
1fef0 4d 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 M)....{.... g
1ff00 61 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 4d 20 aiaGetPointXYZM
1ff10 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 (line->Coords, i
1ff20 76 2c 20 26 78 2c 20 26 79 2c 20 26 7a 2c 20 26 v, &x, &y, &z, &
1ff30 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 m);....}...
1ff40 20 65 6c 73 65 0a 09 09 09 7b 0a 09 09 09 20 20 else....{....
1ff50 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 20 28 gaiaGetPoint (
1ff60 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 line->Coords, iv
1ff70 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 09 7d 0a , &x, &y);....}.
1ff80 09 09 20 20 20 20 20 20 69 66 20 28 69 76 20 3d .. if (iv =
1ff90 3d 20 30 20 7c 7c 20 69 76 20 3d 3d 20 28 6c 69 = 0 || iv == (li
1ffa0 6e 65 2d 3e 50 6f 69 6e 74 73 20 2d 20 31 29 29 ne->Points - 1))
1ffb0 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 2f 2a 20 ....{.... /*
1ffc0 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 20 76 first and last v
1ffd0 65 72 74 69 63 65 73 20 61 72 65 20 75 6e 63 6f ertices are unco
1ffe0 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 09 20 mpressed */....
1fff0 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
20000 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 69 (ptr, x, 1, endi
20010 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a an_arch);./* X *
20020 2f 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 /.... gaiaExp
20030 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 ort64 (ptr + 8,
20040 79 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 y, 1, endian_arc
20050 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 09 20 h);./* Y */....
20060 20 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 ptr += 16;...
20070 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a .}... else.
20080 09 09 09 7b 0a 09 09 09 20 20 20 20 2f 2a 20 63 ...{.... /* c
20090 6f 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f ompressing any o
200a0 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 ther intermediat
200b0 65 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 09 20 e vertex */....
200c0 20 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 fx = (float)
200d0 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 (x - last_x);...
200e0 09 20 20 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 . fy = (float
200f0 29 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a ) (y - last_y);.
20100 09 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 ... gaiaExpor
20110 74 46 33 32 20 28 70 74 72 2c 20 66 78 2c 20 31 tF32 (ptr, fx, 1
20120 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
20130 2f 2a 20 58 20 2a 2f 0a 09 09 09 20 20 20 20 67 /* X */.... g
20140 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 aiaExportF32 (pt
20150 72 20 2b 20 34 2c 20 66 79 2c 20 31 2c 20 65 6e r + 4, fy, 1, en
20160 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 dian_arch);./* Y
20170 20 2a 2f 0a 09 09 09 20 20 20 20 70 74 72 20 2b */.... ptr +
20180 3d 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 = 8;....}...
20190 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 if (geom->Dime
201a0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
201b0 49 41 5f 58 59 5f 5a 29 0a 09 09 09 7b 0a 09 09 IA_XY_Z)....{...
201c0 09 20 20 20 20 69 66 20 28 69 76 20 3d 3d 20 30 . if (iv == 0
201d0 20 7c 7c 20 69 76 20 3d 3d 20 28 6c 69 6e 65 2d || iv == (line-
201e0 3e 50 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 >Points - 1))...
201f0 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 2f . {..... /
20200 2a 20 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 * first and last
20210 20 76 65 72 74 69 63 65 73 20 61 72 65 20 75 6e vertices are un
20220 63 6f 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 compressed */...
20230 09 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
20240 20 28 70 74 72 2c 20 7a 2c 20 31 2c 20 65 6e 64 (ptr, z, 1, end
20250 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 ian_arch);./* Z
20260 2a 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 */..... ptr +=
20270 38 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 8;.... }...
20280 09 20 20 20 20 65 6c 73 65 0a 09 09 09 20 20 20 . else....
20290 20 20 20 7b 0a 09 09 09 09 20 20 2f 2a 20 63 6f {..... /* co
202a0 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 mpressing any ot
202b0 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 her intermediate
202c0 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 09 09 20 vertex */.....
202d0 20 66 7a 20 3d 20 28 66 6c 6f 61 74 29 20 28 7a fz = (float) (z
202e0 20 2d 20 6c 61 73 74 5f 7a 29 3b 0a 09 09 09 09 - last_z);.....
202f0 20 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 gaiaExportF32
20300 28 70 74 72 2c 20 66 7a 2c 20 31 2c 20 65 6e 64 (ptr, fz, 1, end
20310 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 ian_arch);./* Z
20320 2a 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 */..... ptr +=
20330 34 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 4;.... }...
20340 09 7d 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 .}... if (g
20350 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
20360 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d del == GAIA_XY_M
20370 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 )....{.... ga
20380 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
20390 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 m, 1, endian_ar
203a0 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 09 ch);./* M */....
203b0 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 ptr += 8;...
203c0 09 7d 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 .}... if (g
203d0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
203e0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
203f0 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 _M)....{....
20400 69 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 if (iv == 0 || i
20410 76 20 3d 3d 20 28 6c 69 6e 65 2d 3e 50 6f 69 6e v == (line->Poin
20420 74 73 20 2d 20 31 29 29 0a 09 09 09 20 20 20 20 ts - 1))....
20430 20 20 7b 0a 09 09 09 09 20 20 2f 2a 20 66 69 72 {..... /* fir
20440 73 74 20 61 6e 64 20 6c 61 73 74 20 76 65 72 74 st and last vert
20450 69 63 65 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 ices are uncompr
20460 65 73 73 65 64 20 2a 2f 0a 09 09 09 09 20 20 67 essed */..... g
20470 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
20480 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , z, 1, endian_a
20490 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 rch);./* Z */...
204a0 09 09 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 .. ptr += 8;...
204b0 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 . }....
204c0 65 6c 73 65 0a 09 09 09 20 20 20 20 20 20 7b 0a else.... {.
204d0 09 09 09 09 20 20 2f 2a 20 63 6f 6d 70 72 65 73 .... /* compres
204e0 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 20 69 sing any other i
204f0 6e 74 65 72 6d 65 64 69 61 74 65 20 76 65 72 74 ntermediate vert
20500 65 78 20 2a 2f 0a 09 09 09 09 20 20 66 7a 20 3d ex */..... fz =
20510 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d 20 6c 61 (float) (z - la
20520 73 74 5f 7a 29 3b 0a 09 09 09 09 20 20 67 61 69 st_z);..... gai
20530 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c aExportF32 (ptr,
20540 20 66 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 fz, 1, endian_a
20550 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 rch);./* Z */...
20560 09 09 20 20 70 74 72 20 2b 3d 20 34 3b 0a 09 09 .. ptr += 4;...
20570 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 . }....
20580 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
20590 72 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f r, m, 1, endian_
205a0 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 arch);./* M */..
205b0 09 09 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a .. ptr += 8;.
205c0 09 09 09 7d 0a 09 09 20 20 20 20 20 20 6c 61 73 ...}... las
205d0 74 5f 78 20 3d 20 78 3b 0a 09 09 20 20 20 20 20 t_x = x;...
205e0 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 20 last_y = y;...
205f0 20 20 20 20 20 6c 61 73 74 5f 7a 20 3d 20 7a 3b last_z = z;
20600 0a 09 09 20 20 7d 0a 09 09 6c 69 6e 65 20 3d 20 ... }...line =
20610 6c 69 6e 65 2d 3e 4e 65 78 74 3b 0a 09 20 20 20 line->Next;..
20620 20 7d 0a 09 20 20 70 6f 6c 79 67 20 3d 20 67 65 }.. polyg = ge
20630 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c 79 67 6f 6e om->FirstPolygon
20640 3b 0a 09 20 20 77 68 69 6c 65 20 28 70 6f 6c 79 ;.. while (poly
20650 67 29 0a 09 20 20 20 20 7b 0a 09 09 2a 70 74 72 g).. {...*ptr
20660 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e 54 = GAIA_MARK_ENT
20670 49 54 59 3b 09 2f 2a 20 45 4e 54 49 54 59 20 73 ITY;./* ENTITY s
20680 69 67 6e 61 74 75 72 65 20 2a 2f 0a 09 09 69 66 ignature */...if
20690 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
206a0 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
206b0 59 5f 5a 29 0a 09 09 20 20 20 20 67 61 69 61 45 Y_Z)... gaiaE
206c0 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 xport32 (ptr + 1
206d0 2c 20 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 , GAIA_COMPRESSE
206e0 44 5f 50 4f 4c 59 47 4f 4e 5a 2c 20 31 2c 20 65 D_POLYGONZ, 1, e
206f0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
20700 63 6c 61 73 73 20 50 4f 4c 59 47 4f 4e 20 58 59 class POLYGON XY
20710 5a 20 2a 2f 0a 09 09 65 6c 73 65 20 69 66 20 28 Z */...else if (
20720 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
20730 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
20740 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 78 70 M)... gaiaExp
20750 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 ort32 (ptr + 1,
20760 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f GAIA_COMPRESSED_
20770 50 4f 4c 59 47 4f 4e 4d 2c 20 31 2c 20 65 6e 64 POLYGONM, 1, end
20780 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 6c ian_arch);./* cl
20790 61 73 73 20 50 4f 4c 59 47 4f 4e 20 58 59 4d 20 ass POLYGON XYM
207a0 2a 2f 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 */...else if (ge
207b0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
207c0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
207d0 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 78 70 M)... gaiaExp
207e0 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 ort32 (ptr + 1,
207f0 47 41 49 41 5f 43 4f 4d 50 52 45 53 53 45 44 5f GAIA_COMPRESSED_
20800 50 4f 4c 59 47 4f 4e 5a 4d 2c 20 31 2c 20 65 6e POLYGONZM, 1, en
20810 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 63 dian_arch);./* c
20820 6c 61 73 73 20 50 4f 4c 59 47 4f 4e 20 58 59 5a lass POLYGON XYZ
20830 4d 20 2a 2f 0a 09 09 65 6c 73 65 0a 09 09 20 20 M */...else...
20840 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
20850 70 74 72 20 2b 20 31 2c 20 47 41 49 41 5f 43 4f ptr + 1, GAIA_CO
20860 4d 50 52 45 53 53 45 44 5f 50 4f 4c 59 47 4f 4e MPRESSED_POLYGON
20870 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
20880 29 3b 09 2f 2a 20 63 6c 61 73 73 20 50 4f 4c 59 );./* class POLY
20890 47 4f 4e 20 2a 2f 0a 09 09 67 61 69 61 45 78 70 GON */...gaiaExp
208a0 6f 72 74 33 32 20 28 70 74 72 20 2b 20 35 2c 20 ort32 (ptr + 5,
208b0 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 polyg->NumInteri
208c0 6f 72 73 20 2b 20 31 2c 20 31 2c 20 65 6e 64 69 ors + 1, 1, endi
208d0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 72 an_arch);./* # r
208e0 69 6e 67 73 20 2a 2f 0a 09 09 72 6e 67 20 3d 20 ings */...rng =
208f0 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b polyg->Exterior;
20900 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 20 ...gaiaExport32
20910 28 70 74 72 20 2b 20 39 2c 20 72 6e 67 2d 3e 50 (ptr + 9, rng->P
20920 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e oints, 1, endian
20930 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 _arch);./* # poi
20940 6e 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 nts - exterior r
20950 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 ing */...ptr +=
20960 31 33 3b 0a 09 09 66 6f 72 20 28 69 76 20 3d 20 13;...for (iv =
20970 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
20980 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 7b nts; iv++)... {
20990 0a 09 09 20 20 20 20 20 20 7a 20 3d 20 30 2e 30 ... z = 0.0
209a0 3b 0a 09 09 20 20 20 20 20 20 6d 20 3d 20 30 2e ;... m = 0.
209b0 30 3b 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 0;... if (g
209c0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
209d0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
209e0 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 )....{.... ga
209f0 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 72 iaGetPointXYZ (r
20a00 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ng->Coords, iv,
20a10 26 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 09 &x, &y, &z);....
20a20 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 65 20 69 }... else i
20a30 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
20a40 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
20a50 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 20 20 XY_M)....{....
20a60 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 gaiaGetPointXY
20a70 4d 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 M (rng->Coords,
20a80 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b iv, &x, &y, &m);
20a90 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c ....}... el
20aa0 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
20ab0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
20ac0 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b AIA_XY_Z_M)....{
20ad0 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 .... gaiaGetP
20ae0 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e 43 ointXYZM (rng->C
20af0 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
20b00 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 09 7d y, &z, &m);....}
20b10 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a 09 09 ... else...
20b20 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 .{.... gaiaGe
20b30 74 50 6f 69 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f tPoint (rng->Coo
20b40 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 rds, iv, &x, &y)
20b50 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 69 ;....}... i
20b60 66 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 f (iv == 0 || iv
20b70 20 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 == (rng->Points
20b80 20 2d 20 31 29 29 0a 09 09 09 7b 0a 09 09 09 20 - 1))....{....
20b90 20 20 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 20 /* first and
20ba0 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 61 72 last vertices ar
20bb0 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 2a e uncompressed *
20bc0 2f 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 /.... gaiaExp
20bd0 6f 72 74 36 34 20 28 70 74 72 2c 20 78 2c 20 31 ort64 (ptr, x, 1
20be0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
20bf0 2f 2a 20 58 20 2d 20 65 78 74 65 72 69 6f 72 20 /* X - exterior
20c00 72 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 20 67 ring */.... g
20c10 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
20c20 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 + 8, y, 1, endi
20c30 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d an_arch);./* Y -
20c40 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a exterior ring *
20c50 2f 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 /.... ptr +=
20c60 31 36 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 16;....}...
20c70 20 65 6c 73 65 0a 09 09 09 7b 0a 09 09 09 20 20 else....{....
20c80 20 20 2f 2a 20 63 6f 6d 70 72 65 73 73 69 6e 67 /* compressing
20c90 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 74 65 72 any other inter
20ca0 6d 65 64 69 61 74 65 20 76 65 72 74 65 78 20 2a mediate vertex *
20cb0 2f 0a 09 09 09 20 20 20 20 66 78 20 3d 20 28 66 /.... fx = (f
20cc0 6c 6f 61 74 29 20 28 78 20 2d 20 6c 61 73 74 5f loat) (x - last_
20cd0 78 29 3b 0a 09 09 09 20 20 20 20 66 79 20 3d 20 x);.... fy =
20ce0 28 66 6c 6f 61 74 29 20 28 79 20 2d 20 6c 61 73 (float) (y - las
20cf0 74 5f 79 29 3b 0a 09 09 09 20 20 20 20 67 61 69 t_y);.... gai
20d00 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c aExportF32 (ptr,
20d10 20 66 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 fx, 1, endian_a
20d20 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 09 rch);./* X */...
20d30 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 46 . gaiaExportF
20d40 33 32 20 28 70 74 72 20 2b 20 34 2c 20 66 79 2c 32 (ptr + 4, fy,
20d50 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
20d60 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 09 20 20 20 ;./* Y */....
20d70 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 7d 0a ptr += 8;....}.
20d80 09 09 20 20 20 20 20 20 69 66 20 28 67 65 6f 6d .. if (geom
20d90 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
20da0 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
20db0 09 09 7b 0a 09 09 09 20 20 20 20 69 66 20 28 69 ..{.... if (i
20dc0 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d 20 v == 0 || iv ==
20dd0 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2d 20 31 (rng->Points - 1
20de0 29 29 0a 09 09 09 20 20 20 20 20 20 7b 0a 09 09 )).... {...
20df0 09 09 20 20 2f 2a 20 66 69 72 73 74 20 61 6e 64 .. /* first and
20e00 20 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 61 last vertices a
20e10 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 re uncompressed
20e20 2a 2f 0a 09 09 09 09 20 20 67 61 69 61 45 78 70 */..... gaiaExp
20e30 6f 72 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 ort64 (ptr, z, 1
20e40 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
20e50 2f 2a 20 5a 20 2a 2f 0a 09 09 09 09 20 20 70 74 /* Z */..... pt
20e60 72 20 2b 3d 20 38 3b 0a 09 09 09 20 20 20 20 20 r += 8;....
20e70 20 7d 0a 09 09 09 20 20 20 20 65 6c 73 65 0a 09 }.... else..
20e80 09 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 .. {.....
20e90 2f 2a 20 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 /* compressing a
20ea0 6e 79 20 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 ny other interme
20eb0 64 69 61 74 65 20 76 65 72 74 65 78 20 2a 2f 0a diate vertex */.
20ec0 09 09 09 09 20 20 66 7a 20 3d 20 28 66 6c 6f 61 .... fz = (floa
20ed0 74 29 20 28 7a 20 2d 20 6c 61 73 74 5f 7a 29 3b t) (z - last_z);
20ee0 0a 09 09 09 09 20 20 67 61 69 61 45 78 70 6f 72 ..... gaiaExpor
20ef0 74 46 33 32 20 28 70 74 72 2c 20 66 7a 2c 20 31 tF32 (ptr, fz, 1
20f00 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
20f10 2f 2a 20 5a 20 2a 2f 0a 09 09 09 09 20 20 70 74 /* Z */..... pt
20f20 72 20 2b 3d 20 34 3b 0a 09 09 09 20 20 20 20 20 r += 4;....
20f30 20 7d 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 }....}...
20f40 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
20f50 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
20f60 5f 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 20 _XY_M)....{....
20f70 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
20f80 28 70 74 72 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 (ptr, m, 1, endi
20f90 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a an_arch);./* M *
20fa0 2f 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 /.... ptr +=
20fb0 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 8;....}...
20fc0 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
20fd0 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
20fe0 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b 0a 09 09 _XY_Z_M)....{...
20ff0 09 20 20 20 20 69 66 20 28 69 76 20 3d 3d 20 30 . if (iv == 0
21000 20 7c 7c 20 69 76 20 3d 3d 20 28 72 6e 67 2d 3e || iv == (rng->
21010 50 6f 69 6e 74 73 20 2d 20 31 29 29 0a 09 09 09 Points - 1))....
21020 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 2f 2a {..... /*
21030 20 66 69 72 73 74 20 61 6e 64 20 6c 61 73 74 20 first and last
21040 76 65 72 74 69 63 65 73 20 61 72 65 20 75 6e 63 vertices are unc
21050 6f 6d 70 72 65 73 73 65 64 20 2a 2f 0a 09 09 09 ompressed */....
21060 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 . gaiaExport64
21070 28 70 74 72 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 (ptr, z, 1, endi
21080 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a an_arch);./* Z *
21090 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 38 /..... ptr += 8
210a0 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 ;.... }....
210b0 20 20 20 20 65 6c 73 65 0a 09 09 09 20 20 20 20 else....
210c0 20 20 7b 0a 09 09 09 09 20 20 2f 2a 20 63 6f 6d {..... /* com
210d0 70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 pressing any oth
210e0 65 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 er intermediate
210f0 76 65 72 74 65 78 20 2a 2f 0a 09 09 09 09 20 20 vertex */.....
21100 66 7a 20 3d 20 28 66 6c 6f 61 74 29 20 28 7a 20 fz = (float) (z
21110 2d 20 6c 61 73 74 5f 7a 29 3b 0a 09 09 09 09 20 - last_z);.....
21120 20 67 61 69 61 45 78 70 6f 72 74 46 33 32 20 28 gaiaExportF32 (
21130 70 74 72 2c 20 66 7a 2c 20 31 2c 20 65 6e 64 69 ptr, fz, 1, endi
21140 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a an_arch);./* Z *
21150 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 34 /..... ptr += 4
21160 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 ;.... }....
21170 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
21180 20 28 70 74 72 2c 20 6d 2c 20 31 2c 20 65 6e 64 (ptr, m, 1, end
21190 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 ian_arch);./* M
211a0 2a 2f 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d */.... ptr +=
211b0 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 8;....}...
211c0 20 6c 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 20 last_x = x;...
211d0 20 20 20 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b last_y = y;
211e0 0a 09 09 20 20 20 20 20 20 6c 61 73 74 5f 7a 20 ... last_z
211f0 3d 20 7a 3b 0a 09 09 20 20 7d 0a 09 09 66 6f 72 = z;... }...for
21200 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 (ib = 0; ib < p
21210 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f olyg->NumInterio
21220 72 73 3b 20 69 62 2b 2b 29 0a 09 09 20 20 7b 0a rs; ib++)... {.
21230 09 09 20 20 20 20 20 20 72 6e 67 20 3d 20 70 6f .. rng = po
21240 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b lyg->Interiors +
21250 20 69 62 3b 0a 09 09 20 20 20 20 20 20 67 61 69 ib;... gai
21260 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 2c 20 aExport32 (ptr,
21270 72 6e 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 rng->Points, 1,
21280 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
21290 20 23 20 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 # points - inte
212a0 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 rior ring */...
212b0 20 20 20 20 20 70 74 72 20 2b 3d 20 34 3b 0a 09 ptr += 4;..
212c0 09 20 20 20 20 20 20 66 6f 72 20 28 69 76 20 3d . for (iv =
212d0 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 0; iv < rng->Po
212e0 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 09 7b ints; iv++)....{
212f0 0a 09 09 09 20 20 20 20 7a 20 3d 20 30 2e 30 3b .... z = 0.0;
21300 0a 09 09 09 20 20 20 20 6d 20 3d 20 30 2e 30 3b .... m = 0.0;
21310 0a 09 09 09 20 20 20 20 69 66 20 28 67 65 6f 6d .... if (geom
21320 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
21330 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
21340 09 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 .. {.....
21350 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 gaiaGetPointXYZ
21360 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (rng->Coords, iv
21370 2c 20 26 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 , &x, &y, &z);..
21380 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 .. }....
21390 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e else if (geom->
213a0 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
213b0 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 09 = GAIA_XY_M)....
213c0 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 67 61 {..... ga
213d0 69 61 47 65 74 50 6f 69 6e 74 58 59 4d 20 28 72 iaGetPointXYM (r
213e0 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ng->Coords, iv,
213f0 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a 09 09 09 &x, &y, &m);....
21400 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 65 }.... e
21410 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
21420 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
21430 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 GAIA_XY_Z_M)....
21440 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 67 61 {..... ga
21450 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 iaGetPointXYZM (
21460 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c rng->Coords, iv,
21470 20 26 78 2c 20 26 79 2c 20 26 7a 2c 0a 09 09 09 &x, &y, &z,....
21480 09 09 09 20 20 20 20 26 6d 29 3b 0a 09 09 09 20 ... &m);....
21490 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 65 6c }.... el
214a0 73 65 0a 09 09 09 20 20 20 20 20 20 7b 0a 09 09 se.... {...
214b0 09 09 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 .. gaiaGetPoint
214c0 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 (rng->Coords, i
214d0 76 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 09 20 v, &x, &y);....
214e0 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 69 66 }.... if
214f0 20 28 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 (iv == 0 || iv
21500 3d 3d 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 == (rng->Points
21510 2d 20 31 29 29 0a 09 09 09 20 20 20 20 20 20 7b - 1)).... {
21520 0a 09 09 09 09 20 20 2f 2a 20 66 69 72 73 74 20 ..... /* first
21530 61 6e 64 20 6c 61 73 74 20 76 65 72 74 69 63 65 and last vertice
21540 73 20 61 72 65 20 75 6e 63 6f 6d 70 72 65 73 73 s are uncompress
21550 65 64 20 2a 2f 0a 09 09 09 09 20 20 67 61 69 61 ed */..... gaia
21560 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 78 Export64 (ptr, x
21570 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
21580 29 3b 09 2f 2a 20 58 20 2d 20 69 6e 74 65 72 69 );./* X - interi
21590 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 09 09 20 or ring */.....
215a0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
215b0 74 72 20 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e tr + 8, y, 1, en
215c0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 dian_arch);./* Y
215d0 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 - interior ring
215e0 20 2a 2f 0a 09 09 09 09 20 20 70 74 72 20 2b 3d */..... ptr +=
215f0 20 31 36 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 16;.... }.
21600 09 09 09 20 20 20 20 65 6c 73 65 0a 09 09 09 20 ... else....
21610 20 20 20 20 20 7b 0a 09 09 09 09 20 20 2f 2a 20 {..... /*
21620 63 6f 6d 70 72 65 73 73 69 6e 67 20 61 6e 79 20 compressing any
21630 6f 74 68 65 72 20 69 6e 74 65 72 6d 65 64 69 61 other intermedia
21640 74 65 20 76 65 72 74 65 78 20 2a 2f 0a 09 09 09 te vertex */....
21650 09 20 20 66 78 20 3d 20 28 66 6c 6f 61 74 29 20 . fx = (float)
21660 28 78 20 2d 20 6c 61 73 74 5f 78 29 3b 0a 09 09 (x - last_x);...
21670 09 09 20 20 66 79 20 3d 20 28 66 6c 6f 61 74 29 .. fy = (float)
21680 20 28 79 20 2d 20 6c 61 73 74 5f 79 29 3b 0a 09 (y - last_y);..
21690 09 09 09 20 20 67 61 69 61 45 78 70 6f 72 74 46 ... gaiaExportF
216a0 33 32 20 28 70 74 72 2c 20 66 78 2c 20 31 2c 20 32 (ptr, fx, 1,
216b0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
216c0 20 58 20 2a 2f 0a 09 09 09 09 20 20 67 61 69 61 X */..... gaia
216d0 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 20 2b ExportF32 (ptr +
216e0 20 34 2c 20 66 79 2c 20 31 2c 20 65 6e 64 69 61 4, fy, 1, endia
216f0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f n_arch);./* Y */
21700 0a 09 09 09 09 20 20 70 74 72 20 2b 3d 20 38 3b ..... ptr += 8;
21710 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 .... }....
21720 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d if (geom->Dim
21730 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
21740 41 49 41 5f 58 59 5f 5a 29 0a 09 09 09 20 20 20 AIA_XY_Z)....
21750 20 20 20 7b 0a 09 09 09 09 20 20 69 66 20 28 69 {..... if (i
21760 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d 20 v == 0 || iv ==
21770 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2d 20 31 (rng->Points - 1
21780 29 29 0a 09 09 09 09 20 20 20 20 7b 0a 09 09 09 ))..... {....
21790 09 09 2f 2a 20 66 69 72 73 74 20 61 6e 64 20 6c ../* first and l
217a0 61 73 74 20 76 65 72 74 69 63 65 73 20 61 72 65 ast vertices are
217b0 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 2a 2f uncompressed */
217c0 0a 09 09 09 09 09 67 61 69 61 45 78 70 6f 72 74 ......gaiaExport
217d0 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 2c 20 65 64 (ptr, z, 1, e
217e0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
217f0 5a 20 2a 2f 0a 09 09 09 09 09 70 74 72 20 2b 3d Z */......ptr +=
21800 20 38 3b 0a 09 09 09 09 20 20 20 20 7d 0a 09 09 8;..... }...
21810 09 09 20 20 65 6c 73 65 0a 09 09 09 09 20 20 20 .. else.....
21820 20 7b 0a 09 09 09 09 09 2f 2a 20 63 6f 6d 70 72 {....../* compr
21830 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 72 essing any other
21840 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 76 65 intermediate ve
21850 72 74 65 78 20 2a 2f 0a 09 09 09 09 09 66 7a 20 rtex */......fz
21860 3d 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d 20 6c = (float) (z - l
21870 61 73 74 5f 7a 29 3b 0a 09 09 09 09 09 67 61 69 ast_z);......gai
21880 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 2c aExportF32 (ptr,
21890 20 66 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 fz, 1, endian_a
218a0 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 rch);./* Z */...
218b0 09 09 09 70 74 72 20 2b 3d 20 34 3b 0a 09 09 09 ...ptr += 4;....
218c0 09 20 20 20 20 7d 0a 09 09 09 20 20 20 20 20 20 . }....
218d0 7d 0a 09 09 09 20 20 20 20 69 66 20 28 67 65 6f }.... if (geo
218e0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
218f0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
21900 09 09 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 ... {.....
21910 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
21920 74 72 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e tr, m, 1, endian
21930 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a _arch);./* M */.
21940 09 09 09 09 20 20 70 74 72 20 2b 3d 20 38 3b 0a .... ptr += 8;.
21950 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 20 20 ... }....
21960 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 if (geom->Dime
21970 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
21980 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 20 20 IA_XY_Z_M)....
21990 20 20 20 20 7b 0a 09 09 09 09 20 20 69 66 20 28 {..... if (
219a0 69 76 20 3d 3d 20 30 20 7c 7c 20 69 76 20 3d 3d iv == 0 || iv ==
219b0 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2d 20 (rng->Points -
219c0 31 29 29 0a 09 09 09 09 20 20 20 20 7b 0a 09 09 1))..... {...
219d0 09 09 09 2f 2a 20 66 69 72 73 74 20 61 6e 64 20 .../* first and
219e0 6c 61 73 74 20 76 65 72 74 69 63 65 73 20 61 72 last vertices ar
219f0 65 20 75 6e 63 6f 6d 70 72 65 73 73 65 64 20 2a e uncompressed *
21a00 2f 0a 09 09 09 09 09 67 61 69 61 45 78 70 6f 72 /......gaiaExpor
21a10 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 2c 20 t64 (ptr, z, 1,
21a20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
21a30 20 5a 20 2a 2f 0a 09 09 09 09 09 70 74 72 20 2b Z */......ptr +
21a40 3d 20 38 3b 0a 09 09 09 09 20 20 20 20 7d 0a 09 = 8;..... }..
21a50 09 09 09 20 20 65 6c 73 65 0a 09 09 09 09 20 20 ... else.....
21a60 20 20 7b 0a 09 09 09 09 09 2f 2a 20 63 6f 6d 70 {....../* comp
21a70 72 65 73 73 69 6e 67 20 61 6e 79 20 6f 74 68 65 ressing any othe
21a80 72 20 69 6e 74 65 72 6d 65 64 69 61 74 65 20 76 r intermediate v
21a90 65 72 74 65 78 20 2a 2f 0a 09 09 09 09 09 66 7a ertex */......fz
21aa0 20 3d 20 28 66 6c 6f 61 74 29 20 28 7a 20 2d 20 = (float) (z -
21ab0 6c 61 73 74 5f 7a 29 3b 0a 09 09 09 09 09 67 61 last_z);......ga
21ac0 69 61 45 78 70 6f 72 74 46 33 32 20 28 70 74 72 iaExportF32 (ptr
21ad0 2c 20 66 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f , fz, 1, endian_
21ae0 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 arch);./* Z */..
21af0 09 09 09 09 70 74 72 20 2b 3d 20 34 3b 0a 09 09 ....ptr += 4;...
21b00 09 09 20 20 20 20 7d 0a 09 09 09 09 20 20 67 61 .. }..... ga
21b10 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
21b20 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 m, 1, endian_ar
21b30 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 09 ch);./* M */....
21b40 09 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 . ptr += 8;....
21b50 20 20 20 20 20 20 7d 0a 09 09 09 20 20 20 20 6c }.... l
21b60 61 73 74 5f 78 20 3d 20 78 3b 0a 09 09 09 20 20 ast_x = x;....
21b70 20 20 6c 61 73 74 5f 79 20 3d 20 79 3b 0a 09 09 last_y = y;...
21b80 09 20 20 20 20 6c 61 73 74 5f 7a 20 3d 20 7a 3b . last_z = z;
21b90 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 09 70 6f ....}... }...po
21ba0 6c 79 67 20 3d 20 70 6f 6c 79 67 2d 3e 4e 65 78 lyg = polyg->Nex
21bb0 74 3b 0a 09 20 20 20 20 7d 0a 09 20 20 2a 70 74 t;.. }.. *pt
21bc0 72 20 3d 20 47 41 49 41 5f 4d 41 52 4b 5f 45 4e r = GAIA_MARK_EN
21bd0 44 3b 09 2f 2a 20 45 4e 44 20 73 69 67 6e 61 74 D;./* END signat
21be0 75 72 65 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a ure */. };.
21bf0 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 63 6f }..static int.co
21c00 75 6e 74 5f 65 6c 65 6d 65 6e 74 61 72 69 65 73 unt_elementaries
21c10 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
21c20 72 20 67 65 6f 29 0a 7b 0a 2f 2a 20 63 6f 75 6e r geo).{./* coun
21c30 69 6e 74 20 68 6f 77 20 6d 61 6e 79 20 65 6c 65 int how many ele
21c40 6d 65 6e 74 61 72 79 20 69 74 65 6d 73 20 61 72 mentary items ar
21c50 65 20 74 68 65 72 65 20 2a 2f 0a 20 20 20 20 67 e there */. g
21c60 61 69 61 50 6f 69 6e 74 50 74 72 20 70 74 3b 0a aiaPointPtr pt;.
21c70 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 69 gaiaLinestri
21c80 6e 67 50 74 72 20 6c 6e 3b 0a 20 20 20 20 67 61 ngPtr ln;. ga
21c90 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 67 3b iaPolygonPtr pg;
21ca0 0a 20 20 20 20 69 6e 74 20 70 74 73 20 3d 20 30 . int pts = 0
21cb0 3b 0a 20 20 20 20 69 6e 74 20 6c 6e 73 20 3d 20 ;. int lns =
21cc0 30 3b 0a 20 20 20 20 69 6e 74 20 70 67 73 20 3d 0;. int pgs =
21cd0 20 30 3b 0a 0a 20 20 20 20 70 74 20 3d 20 67 65 0;.. pt = ge
21ce0 6f 2d 3e 46 69 72 73 74 50 6f 69 6e 74 3b 0a 20 o->FirstPoint;.
21cf0 20 20 20 77 68 69 6c 65 20 28 70 74 20 21 3d 20 while (pt !=
21d00 4e 55 4c 4c 29 0a 20 20 20 20 20 20 7b 0a 09 20 NULL). {..
21d10 20 2f 2a 20 63 6f 75 6e 74 69 6e 67 20 50 6f 69 /* counting Poi
21d20 6e 74 73 20 2a 2f 0a 09 20 20 70 74 73 2b 2b 3b nts */.. pts++;
21d30 0a 09 20 20 70 74 20 3d 20 70 74 2d 3e 4e 65 78 .. pt = pt->Nex
21d40 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 6c t;. }. l
21d50 6e 20 3d 20 67 65 6f 2d 3e 46 69 72 73 74 4c 69 n = geo->FirstLi
21d60 6e 65 73 74 72 69 6e 67 3b 0a 20 20 20 20 77 68 nestring;. wh
21d70 69 6c 65 20 28 6c 6e 20 21 3d 20 4e 55 4c 4c 29 ile (ln != NULL)
21d80 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 63 . {.. /* c
21d90 6f 75 6e 74 69 6e 67 20 4c 69 6e 65 73 74 72 69 ounting Linestri
21da0 6e 67 20 2a 2f 0a 09 20 20 6c 6e 73 2b 2b 3b 0a ng */.. lns++;.
21db0 09 20 20 6c 6e 20 3d 20 6c 6e 2d 3e 4e 65 78 74 . ln = ln->Next
21dc0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 70 67 ;. }. pg
21dd0 20 3d 20 67 65 6f 2d 3e 46 69 72 73 74 50 6f 6c = geo->FirstPol
21de0 79 67 6f 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 ygon;. while
21df0 28 70 67 20 21 3d 20 4e 55 4c 4c 29 0a 20 20 20 (pg != NULL).
21e00 20 20 20 7b 0a 09 20 20 2f 2a 20 63 6f 75 6e 74 {.. /* count
21e10 69 6e 67 20 50 6f 6c 79 67 6f 6e 73 20 2a 2f 0a ing Polygons */.
21e20 09 20 20 70 67 73 2b 2b 3b 0a 09 20 20 70 67 20 . pgs++;.. pg
21e30 3d 20 70 67 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 = pg->Next;.
21e40 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 70 }. return p
21e50 74 73 20 2b 20 6c 6e 73 20 2b 20 70 67 73 3b 0a ts + lns + pgs;.
21e60 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 }..GAIAGEO_DECLA
21e70 52 45 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 RE gaiaGeomCollP
21e80 74 72 0a 67 61 69 61 46 72 6f 6d 57 6b 62 20 28 tr.gaiaFromWkb (
21e90 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 const unsigned c
21ea0 68 61 72 20 2a 62 6c 6f 62 2c 20 75 6e 73 69 67 har *blob, unsig
21eb0 6e 65 64 20 69 6e 74 20 73 69 7a 65 29 0a 7b 0a ned int size).{.
21ec0 2f 2a 20 64 65 63 6f 64 69 6e 67 20 66 72 6f 6d /* decoding from
21ed0 20 57 4b 42 20 74 6f 20 47 45 4f 4d 45 54 52 59 WKB to GEOMETRY
21ee0 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 79 70 */. int typ
21ef0 65 3b 0a 20 20 20 20 69 6e 74 20 6c 69 74 74 6c e;. int littl
21f00 65 5f 65 6e 64 69 61 6e 3b 0a 20 20 20 20 67 61 e_endian;. ga
21f10 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 iaGeomCollPtr ge
21f20 6f 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 69 6e o = NULL;. in
21f30 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 t endian_arch =
21f40 67 61 69 61 45 6e 64 69 61 6e 41 72 63 68 20 28 gaiaEndianArch (
21f50 29 3b 0a 20 20 20 20 69 66 20 28 73 69 7a 65 20 );. if (size
21f60 3c 20 35 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c < 5)..return NUL
21f70 4c 3b 0a 20 20 20 20 69 66 20 28 2a 28 62 6c 6f L;. if (*(blo
21f80 62 20 2b 20 30 29 20 3d 3d 20 30 78 30 31 29 0a b + 0) == 0x01).
21f90 09 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 20 3d .little_endian =
21fa0 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
21fb0 49 41 4e 3b 0a 20 20 20 20 65 6c 73 65 0a 09 6c IAN;. else..l
21fc0 69 74 74 6c 65 5f 65 6e 64 69 61 6e 20 3d 20 47 ittle_endian = G
21fd0 41 49 41 5f 42 49 47 5f 45 4e 44 49 41 4e 3b 0a AIA_BIG_ENDIAN;.
21fe0 20 20 20 20 74 79 70 65 20 3d 20 67 61 69 61 49 type = gaiaI
21ff0 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 2b 20 mport32 (blob +
22000 31 2c 20 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 1, little_endian
22010 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
22020 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 if (type ==
22030 47 41 49 41 5f 50 4f 49 4e 54 5a 20 7c 7c 20 74 GAIA_POINTZ || t
22040 79 70 65 20 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 ype == GAIA_LINE
22050 53 54 52 49 4e 47 5a 20 7c 7c 20 74 79 70 65 20 STRINGZ || type
22060 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a == GAIA_POLYGONZ
22070 0a 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 ..|| type == GAI
22080 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 20 7c 7c A_MULTIPOINTZ ||
22090 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
220a0 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 0a 09 LTILINESTRINGZ..
220b0 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
220c0 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 20 7c 7c MULTIPOLYGONZ ||
220d0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
220e0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
220f0 5a 0a 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 Z..|| type == GA
22100 49 41 5f 47 45 4f 53 57 4b 42 5f 50 4f 49 4e 54 IA_GEOSWKB_POINT
22110 5a 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 Z || type == GAI
22120 41 5f 47 45 4f 53 57 4b 42 5f 4c 49 4e 45 53 54 A_GEOSWKB_LINEST
22130 52 49 4e 47 5a 0a 09 7c 7c 20 74 79 70 65 20 3d RINGZ..|| type =
22140 3d 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f 50 = GAIA_GEOSWKB_P
22150 4f 4c 59 47 4f 4e 5a 20 7c 7c 20 74 79 70 65 20 OLYGONZ || type
22160 3d 3d 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f == GAIA_GEOSWKB_
22170 4d 55 4c 54 49 50 4f 49 4e 54 5a 0a 09 7c 7c 20 MULTIPOINTZ..||
22180 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
22190 53 57 4b 42 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 SWKB_MULTILINEST
221a0 52 49 4e 47 5a 0a 09 7c 7c 20 74 79 70 65 20 3d RINGZ..|| type =
221b0 3d 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f 4d = GAIA_GEOSWKB_M
221c0 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 0a 09 7c 7c ULTIPOLYGONZ..||
221d0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
221e0 4f 53 57 4b 42 5f 47 45 4f 4d 45 54 52 59 43 4f OSWKB_GEOMETRYCO
221f0 4c 4c 45 43 54 49 4f 4e 5a 29 0a 09 67 65 6f 20 LLECTIONZ)..geo
22200 3d 20 67 61 69 61 41 6c 6c 6f 63 47 65 6f 6d 43 = gaiaAllocGeomC
22210 6f 6c 6c 58 59 5a 20 28 29 3b 0a 20 20 20 20 65 ollXYZ ();. e
22220 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 lse if (type ==
22230 47 41 49 41 5f 50 4f 49 4e 54 4d 20 7c 7c 20 74 GAIA_POINTM || t
22240 79 70 65 20 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 ype == GAIA_LINE
22250 53 54 52 49 4e 47 4d 0a 09 20 20 20 20 20 7c 7c STRINGM.. ||
22260 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f type == GAIA_PO
22270 4c 59 47 4f 4e 4d 20 7c 7c 20 74 79 70 65 20 3d LYGONM || type =
22280 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e = GAIA_MULTIPOIN
22290 54 4d 0a 09 20 20 20 20 20 7c 7c 20 74 79 70 65 TM.. || type
222a0 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 == GAIA_MULTILI
222b0 4e 45 53 54 52 49 4e 47 4d 20 7c 7c 20 74 79 70 NESTRINGM || typ
222c0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
222d0 4f 4c 59 47 4f 4e 4d 0a 09 20 20 20 20 20 7c 7c OLYGONM.. ||
222e0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
222f0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
22300 4d 29 0a 09 67 65 6f 20 3d 20 67 61 69 61 41 6c M)..geo = gaiaAl
22310 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 4d 20 28 locGeomCollXYM (
22320 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 28 );. else if (
22330 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 49 type == GAIA_POI
22340 4e 54 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 NTZM || type ==
22350 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a GAIA_LINESTRINGZ
22360 4d 0a 09 20 20 20 20 20 7c 7c 20 74 79 70 65 20 M.. || type
22370 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a == GAIA_POLYGONZ
22380 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 M || type == GAI
22390 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 0a 09 A_MULTIPOINTZM..
223a0 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 || type ==
223b0 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
223c0 52 49 4e 47 5a 4d 20 7c 7c 20 74 79 70 65 20 3d RINGZM || type =
223d0 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 = GAIA_MULTIPOLY
223e0 47 4f 4e 5a 4d 0a 09 20 20 20 20 20 7c 7c 20 74 GONZM.. || t
223f0 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
22400 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d ETRYCOLLECTIONZM
22410 29 0a 09 67 65 6f 20 3d 20 67 61 69 61 41 6c 6c )..geo = gaiaAll
22420 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 5a 4d 20 28 ocGeomCollXYZM (
22430 29 3b 0a 20 20 20 20 65 6c 73 65 0a 09 67 65 6f );. else..geo
22440 20 3d 20 67 61 69 61 41 6c 6c 6f 63 47 65 6f 6d = gaiaAllocGeom
22450 43 6f 6c 6c 20 28 29 3b 0a 20 20 20 20 67 65 6f Coll ();. geo
22460 2d 3e 53 72 69 64 20 3d 20 30 3b 0a 20 20 20 20 ->Srid = 0;.
22470 67 65 6f 2d 3e 65 6e 64 69 61 6e 5f 61 72 63 68 geo->endian_arch
22480 20 3d 20 28 63 68 61 72 29 20 65 6e 64 69 61 6e = (char) endian
22490 5f 61 72 63 68 3b 0a 20 20 20 20 67 65 6f 2d 3e _arch;. geo->
224a0 65 6e 64 69 61 6e 20 3d 20 28 63 68 61 72 29 20 endian = (char)
224b0 6c 69 74 74 6c 65 5f 65 6e 64 69 61 6e 3b 0a 20 little_endian;.
224c0 20 20 20 67 65 6f 2d 3e 62 6c 6f 62 20 3d 20 62 geo->blob = b
224d0 6c 6f 62 3b 0a 20 20 20 20 67 65 6f 2d 3e 73 69 lob;. geo->si
224e0 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 67 ze = size;. g
224f0 65 6f 2d 3e 6f 66 66 73 65 74 20 3d 20 35 3b 0a eo->offset = 5;.
22500 20 20 20 20 73 77 69 74 63 68 20 28 74 79 70 65 switch (type
22510 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 ). {.
22520 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 3a case GAIA_POINT:
22530 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f 69 6e .. ParseWkbPoin
22540 74 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 t (geo);.. brea
22550 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 k;. case GA
22560 49 41 5f 50 4f 49 4e 54 5a 3a 0a 20 20 20 20 20 IA_POINTZ:.
22570 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f 53 57 case GAIA_GEOSW
22580 4b 42 5f 50 4f 49 4e 54 5a 3a 0a 09 20 20 50 61 KB_POINTZ:.. Pa
22590 72 73 65 57 6b 62 50 6f 69 6e 74 5a 20 28 67 65 rseWkbPointZ (ge
225a0 6f 29 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 o);.. break;.
225b0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f case GAIA_PO
225c0 49 4e 54 4d 3a 0a 09 20 20 50 61 72 73 65 57 6b INTM:.. ParseWk
225d0 62 50 6f 69 6e 74 4d 20 28 67 65 6f 29 3b 0a 09 bPointM (geo);..
225e0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
225f0 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 5a 4d ase GAIA_POINTZM
22600 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 50 6f 69 :.. ParseWkbPoi
22610 6e 74 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 ntZM (geo);.. b
22620 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
22630 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
22640 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 4c 69 6e :.. ParseWkbLin
22650 65 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 61 e (geo);.. brea
22660 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 k;. case GA
22670 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a IA_LINESTRINGZ:.
22680 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
22690 47 45 4f 53 57 4b 42 5f 4c 49 4e 45 53 54 52 49 GEOSWKB_LINESTRI
226a0 4e 47 5a 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 NGZ:.. ParseWkb
226b0 4c 69 6e 65 5a 20 28 67 65 6f 29 3b 0a 09 20 20 LineZ (geo);..
226c0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
226d0 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e e GAIA_LINESTRIN
226e0 47 4d 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 4c GM:.. ParseWkbL
226f0 69 6e 65 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 ineM (geo);.. b
22700 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
22710 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 GAIA_LINESTRING
22720 5a 4d 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 4c ZM:.. ParseWkbL
22730 69 6e 65 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 ineZM (geo);..
22740 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
22750 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 3a 0a e GAIA_POLYGON:.
22760 09 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 . ParseWkbPolyg
22770 6f 6e 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 on (geo);.. bre
22780 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
22790 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 AIA_POLYGONZ:.
227a0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 case GAIA_GE
227b0 4f 53 57 4b 42 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a OSWKB_POLYGONZ:.
227c0 09 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 . ParseWkbPolyg
227d0 6f 6e 5a 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 onZ (geo);.. br
227e0 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
227f0 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 3a 0a 09 GAIA_POLYGONM:..
22800 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f ParseWkbPolygo
22810 6e 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 65 nM (geo);.. bre
22820 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
22830 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 AIA_POLYGONZM:..
22840 20 20 50 61 72 73 65 57 6b 62 50 6f 6c 79 67 6f ParseWkbPolygo
22850 6e 5a 4d 20 28 67 65 6f 29 3b 0a 09 20 20 62 72 nZM (geo);.. br
22860 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
22870 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3a GAIA_MULTIPOINT:
22880 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
22890 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
228a0 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
228b0 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a A_MULTIPOLYGON:.
228c0 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
228d0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
228e0 4f 4e 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 ON:. case G
228f0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 3a AIA_MULTIPOINTZ:
22900 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
22910 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
22920 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 Z:. case GA
22930 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a IA_MULTIPOLYGONZ
22940 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
22950 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
22960 54 49 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 73 TIONZ:. cas
22970 65 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f 4d e GAIA_GEOSWKB_M
22980 55 4c 54 49 50 4f 49 4e 54 5a 3a 0a 20 20 20 20 ULTIPOINTZ:.
22990 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f 53 case GAIA_GEOS
229a0 57 4b 42 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 WKB_MULTILINESTR
229b0 49 4e 47 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 INGZ:. case
229c0 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f 4d 55 GAIA_GEOSWKB_MU
229d0 4c 54 49 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 20 LTIPOLYGONZ:.
229e0 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f case GAIA_GEO
229f0 53 57 4b 42 5f 47 45 4f 4d 45 54 52 59 43 4f 4c SWKB_GEOMETRYCOL
22a00 4c 45 43 54 49 4f 4e 5a 3a 0a 20 20 20 20 20 20 LECTIONZ:.
22a10 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 case GAIA_MULTIP
22a20 4f 49 4e 54 4d 3a 0a 20 20 20 20 20 20 63 61 73 OINTM:. cas
22a30 65 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 e GAIA_MULTILINE
22a40 53 54 52 49 4e 47 4d 3a 0a 20 20 20 20 20 20 63 STRINGM:. c
22a50 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f ase GAIA_MULTIPO
22a60 4c 59 47 4f 4e 4d 3a 0a 20 20 20 20 20 20 63 61 LYGONM:. ca
22a70 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 se GAIA_GEOMETRY
22a80 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3a 0a 20 20 20 COLLECTIONM:.
22a90 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c case GAIA_MUL
22aa0 54 49 50 4f 49 4e 54 5a 4d 3a 0a 20 20 20 20 20 TIPOINTZM:.
22ab0 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 case GAIA_MULTI
22ac0 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a 0a 20 20 LINESTRINGZM:.
22ad0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 case GAIA_MU
22ae0 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 20 20 LTIPOLYGONZM:.
22af0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 case GAIA_GE
22b00 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
22b10 5a 4d 3a 0a 09 20 20 50 61 72 73 65 57 6b 62 47 ZM:.. ParseWkbG
22b20 65 6f 6d 65 74 72 79 20 28 67 65 6f 2c 20 31 29 eometry (geo, 1)
22b30 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
22b40 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 20 62 72 default:.. br
22b50 65 61 6b 3b 0a 20 20 20 20 20 20 7d 3b 0a 20 20 eak;. };.
22b60 20 20 67 61 69 61 4d 62 72 47 65 6f 6d 65 74 72 gaiaMbrGeometr
22b70 79 20 28 67 65 6f 29 3b 0a 20 20 20 20 73 77 69 y (geo);. swi
22b80 74 63 68 20 28 74 79 70 65 29 0a 20 20 20 20 20 tch (type).
22b90 20 7b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 {. case GA
22ba0 49 41 5f 50 4f 49 4e 54 3a 0a 20 20 20 20 20 20 IA_POINT:.
22bb0 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 5a case GAIA_POINTZ
22bc0 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
22bd0 41 5f 47 45 4f 53 57 4b 42 5f 50 4f 49 4e 54 5a A_GEOSWKB_POINTZ
22be0 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
22bf0 41 5f 50 4f 49 4e 54 4d 3a 0a 20 20 20 20 20 20 A_POINTM:.
22c00 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 5a case GAIA_POINTZ
22c10 4d 3a 0a 09 20 20 67 65 6f 2d 3e 44 65 63 6c 61 M:.. geo->Decla
22c20 72 65 64 54 79 70 65 20 3d 20 47 41 49 41 5f 50 redType = GAIA_P
22c30 4f 49 4e 54 3b 0a 09 20 20 62 72 65 61 6b 3b 0a OINT;.. break;.
22c40 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
22c50 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 20 20 20 20 LINESTRING:.
22c60 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 case GAIA_LINE
22c70 53 54 52 49 4e 47 5a 3a 0a 20 20 20 20 20 20 63 STRINGZ:. c
22c80 61 73 65 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 ase GAIA_GEOSWKB
22c90 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 20 20 _LINESTRINGZ:.
22ca0 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4c 49 case GAIA_LI
22cb0 4e 45 53 54 52 49 4e 47 4d 3a 0a 20 20 20 20 20 NESTRINGM:.
22cc0 20 63 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 case GAIA_LINES
22cd0 54 52 49 4e 47 5a 4d 3a 0a 09 20 20 67 65 6f 2d TRINGZM:.. geo-
22ce0 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d 20 >DeclaredType =
22cf0 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 3b GAIA_LINESTRING;
22d00 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
22d10 20 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 case GAIA_POLYG
22d20 4f 4e 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 ON:. case G
22d30 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 AIA_POLYGONZ:.
22d40 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 case GAIA_GE
22d50 4f 53 57 4b 42 5f 50 4f 4c 59 47 4f 4e 5a 3a 0a OSWKB_POLYGONZ:.
22d60 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
22d70 50 4f 4c 59 47 4f 4e 4d 3a 0a 20 20 20 20 20 20 POLYGONM:.
22d80 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 4f case GAIA_POLYGO
22d90 4e 5a 4d 3a 0a 09 20 20 67 65 6f 2d 3e 44 65 63 NZM:.. geo->Dec
22da0 6c 61 72 65 64 54 79 70 65 20 3d 20 47 41 49 41 laredType = GAIA
22db0 5f 50 4f 4c 59 47 4f 4e 3b 0a 09 20 20 62 72 65 _POLYGON;.. bre
22dc0 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
22dd0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3a 0a AIA_MULTIPOINT:.
22de0 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
22df0 4d 55 4c 54 49 50 4f 49 4e 54 5a 3a 0a 20 20 20 MULTIPOINTZ:.
22e00 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 45 4f case GAIA_GEO
22e10 53 57 4b 42 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a SWKB_MULTIPOINTZ
22e20 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
22e30 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 3a 0a 20 A_MULTIPOINTM:.
22e40 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
22e50 55 4c 54 49 50 4f 49 4e 54 5a 4d 3a 0a 09 20 20 ULTIPOINTZM:..
22e60 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 geo->DeclaredTyp
22e70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
22e80 49 4e 54 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 INT;.. break;.
22e90 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
22ea0 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 3a 0a ULTILINESTRING:.
22eb0 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
22ec0 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a MULTILINESTRINGZ
22ed0 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
22ee0 41 5f 47 45 4f 53 57 4b 42 5f 4d 55 4c 54 49 4c A_GEOSWKB_MULTIL
22ef0 49 4e 45 53 54 52 49 4e 47 5a 3a 0a 20 20 20 20 INESTRINGZ:.
22f00 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 case GAIA_MULT
22f10 49 4c 49 4e 45 53 54 52 49 4e 47 4d 3a 0a 20 20 ILINESTRINGM:.
22f20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 case GAIA_MU
22f30 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 3a LTILINESTRINGZM:
22f40 0a 09 20 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 .. geo->Declare
22f50 64 54 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c dType = GAIA_MUL
22f60 54 49 4c 49 4e 45 53 54 52 49 4e 47 3b 0a 09 20 TILINESTRING;..
22f70 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
22f80 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c se GAIA_MULTIPOL
22f90 59 47 4f 4e 3a 0a 20 20 20 20 20 20 63 61 73 65 YGON:. case
22fa0 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 GAIA_MULTIPOLYG
22fb0 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 ONZ:. case
22fc0 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f 4d 55 4c GAIA_GEOSWKB_MUL
22fd0 54 49 50 4f 4c 59 47 4f 4e 5a 3a 0a 20 20 20 20 TIPOLYGONZ:.
22fe0 20 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 case GAIA_MULT
22ff0 49 50 4f 4c 59 47 4f 4e 4d 3a 0a 20 20 20 20 20 IPOLYGONM:.
23000 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 case GAIA_MULTI
23010 50 4f 4c 59 47 4f 4e 5a 4d 3a 0a 09 20 20 67 65 POLYGONZM:.. ge
23020 6f 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 o->DeclaredType
23030 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 = GAIA_MULTIPOLY
23040 47 4f 4e 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 GON;.. break;.
23050 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 47 case GAIA_G
23060 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
23070 4e 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 N:. case GA
23080 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
23090 43 54 49 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 CTIONZ:. ca
230a0 73 65 20 47 41 49 41 5f 47 45 4f 53 57 4b 42 5f se GAIA_GEOSWKB_
230b0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
230c0 4f 4e 5a 3a 0a 20 20 20 20 20 20 63 61 73 65 20 ONZ:. case
230d0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
230e0 4c 45 43 54 49 4f 4e 4d 3a 0a 20 20 20 20 20 20 LECTIONM:.
230f0 63 61 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 case GAIA_GEOMET
23100 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3a 0a RYCOLLECTIONZM:.
23110 09 20 20 67 65 6f 2d 3e 44 65 63 6c 61 72 65 64 . geo->Declared
23120 54 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d Type = GAIA_GEOM
23130 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a ETRYCOLLECTION;.
23140 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
23150 7d 0a 0a 2f 2a 20 73 61 6e 64 72 6f 20 32 30 32 }../* sandro 202
23160 34 2d 30 32 2d 32 34 3a 20 66 69 6e 61 6c 20 73 4-02-24: final s
23170 61 6e 69 74 79 20 63 68 65 63 6b 20 2a 2f 0a 20 anity check */.
23180 20 20 20 69 66 20 28 63 6f 75 6e 74 5f 65 6c 65 if (count_ele
23190 6d 65 6e 74 61 72 69 65 73 20 28 67 65 6f 29 20 mentaries (geo)
231a0 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 == 0). {..
231b0 20 2f 2a 20 74 68 69 73 20 69 73 20 61 6e 20 69 /* this is an i
231c0 6c 6c 65 67 61 6c 20 65 6d 70 74 79 20 47 65 6f llegal empty Geo
231d0 6d 65 74 72 79 20 21 21 21 20 2a 2f 0a 09 20 20 metry !!! */..
231e0 67 61 69 61 46 72 65 65 47 65 6f 6d 43 6f 6c 6c gaiaFreeGeomColl
231f0 20 28 67 65 6f 29 3b 0a 09 20 20 72 65 74 75 72 (geo);.. retur
23200 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 0a n NULL;. }.
23210 20 20 20 20 72 65 74 75 72 6e 20 67 65 6f 3b 0a return geo;.
23220 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 }..GAIAGEO_DECLA
23230 52 45 20 63 68 61 72 20 2a 0a 67 61 69 61 54 6f RE char *.gaiaTo
23240 48 65 78 57 6b 62 20 28 67 61 69 61 47 65 6f 6d HexWkb (gaiaGeom
23250 43 6f 6c 6c 50 74 72 20 67 65 6f 6d 29 0a 7b 0a CollPtr geom).{.
23260 2f 2a 20 62 75 69 6c 64 73 20 74 68 65 20 68 65 /* builds the he
23270 78 61 64 65 63 69 6d 61 6c 20 57 4b 42 20 72 65 xadecimal WKB re
23280 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 6f 72 presentation for
23290 20 74 68 69 73 20 47 45 4f 4d 45 54 52 59 20 2a this GEOMETRY *
232a0 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 /. unsigned c
232b0 68 61 72 20 2a 77 6b 62 20 3d 20 4e 55 4c 4c 3b har *wkb = NULL;
232c0 0a 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 . int size =
232d0 30 3b 0a 20 20 20 20 63 68 61 72 20 2a 68 65 78 0;. char *hex
232e0 62 75 66 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 buf = NULL;.
232f0 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20 int i;. char
23300 68 65 78 5b 31 36 5d 3b 0a 20 20 20 20 63 68 61 hex[16];. cha
23310 72 20 2a 70 3b 0a 20 20 20 20 67 61 69 61 54 6f r *p;. gaiaTo
23320 57 6b 62 20 28 67 65 6f 6d 2c 20 26 77 6b 62 2c Wkb (geom, &wkb,
23330 20 26 73 69 7a 65 29 3b 0a 20 20 20 20 69 66 20 &size);. if
23340 28 21 77 6b 62 29 0a 09 72 65 74 75 72 6e 20 4e (!wkb)..return N
23350 55 4c 4c 3b 0a 20 20 20 20 68 65 78 62 75 66 20 ULL;. hexbuf
23360 3d 20 6d 61 6c 6c 6f 63 20 28 28 73 69 7a 65 20 = malloc ((size
23370 2a 20 32 29 20 2b 20 31 29 3b 0a 20 20 20 20 70 * 2) + 1);. p
23380 20 3d 20 68 65 78 62 75 66 3b 0a 20 20 20 20 66 = hexbuf;. f
23390 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 73 or (i = 0; i < s
233a0 69 7a 65 3b 20 69 2b 2b 29 0a 20 20 20 20 20 20 ize; i++).
233b0 7b 0a 09 20 20 73 70 72 69 6e 74 66 20 28 68 65 {.. sprintf (he
233c0 78 2c 20 22 25 30 32 58 22 2c 20 2a 28 77 6b 62 x, "%02X", *(wkb
233d0 20 2b 20 69 29 29 3b 0a 09 20 20 2a 70 2b 2b 20 + i));.. *p++
233e0 3d 20 68 65 78 5b 30 5d 3b 0a 09 20 20 2a 70 2b = hex[0];.. *p+
233f0 2b 20 3d 20 68 65 78 5b 31 5d 3b 0a 20 20 20 20 + = hex[1];.
23400 20 20 7d 0a 20 20 20 20 2a 70 20 3d 20 27 5c 30 }. *p = '\0
23410 27 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 68 65 ';. return he
23420 78 62 75 66 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f xbuf;.}..GAIAGEO
23430 5f 44 45 43 4c 41 52 45 20 76 6f 69 64 0a 67 61 _DECLARE void.ga
23440 69 61 54 6f 57 6b 62 20 28 67 61 69 61 47 65 6f iaToWkb (gaiaGeo
23450 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d 2c 20 75 mCollPtr geom, u
23460 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2a 72 nsigned char **r
23470 65 73 75 6c 74 2c 20 69 6e 74 20 2a 73 69 7a 65 esult, int *size
23480 29 0a 7b 0a 2f 2a 20 62 75 69 6c 64 73 20 74 68 ).{./* builds th
23490 65 20 57 4b 42 20 72 65 70 72 65 73 65 6e 74 61 e WKB representa
234a0 74 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 47 45 tion for this GE
234b0 4f 4d 45 54 52 59 20 2a 2f 0a 20 20 20 20 69 6e OMETRY */. in
234c0 74 20 69 62 3b 0a 20 20 20 20 69 6e 74 20 69 76 t ib;. int iv
234d0 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a ;. double x;.
234e0 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 double y;.
234f0 20 20 64 6f 75 62 6c 65 20 7a 20 3d 20 30 2e 30 double z = 0.0
23500 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 6d 20 3d ;. double m =
23510 20 30 2e 30 3b 0a 20 20 20 20 69 6e 74 20 65 6e 0.0;. int en
23520 74 69 74 69 65 73 20 3d 20 30 3b 0a 20 20 20 20 tities = 0;.
23530 69 6e 74 20 6e 5f 70 6f 69 6e 74 73 20 3d 20 30 int n_points = 0
23540 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 6c 69 6e 65 ;. int n_line
23550 73 74 72 69 6e 67 73 20 3d 20 30 3b 0a 20 20 20 strings = 0;.
23560 20 69 6e 74 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 int n_polygons
23570 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 74 79 70 = 0;. int typ
23580 65 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 e;. unsigned
23590 63 68 61 72 20 2a 70 74 72 3b 0a 20 20 20 20 67 char *ptr;. g
235a0 61 69 61 50 6f 69 6e 74 50 74 72 20 70 74 3b 0a aiaPointPtr pt;.
235b0 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 69 gaiaLinestri
235c0 6e 67 50 74 72 20 6c 6e 3b 0a 20 20 20 20 67 61 ngPtr ln;. ga
235d0 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 67 3b iaPolygonPtr pg;
235e0 0a 20 20 20 20 67 61 69 61 52 69 6e 67 50 74 72 . gaiaRingPtr
235f0 20 72 6e 67 3b 0a 20 20 20 20 67 61 69 61 50 6f rng;. gaiaPo
23600 69 6e 74 50 74 72 20 70 6f 69 6e 74 20 3d 20 4e intPtr point = N
23610 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 4c 69 6e ULL;. gaiaLin
23620 65 73 74 72 69 6e 67 50 74 72 20 6c 69 6e 65 20 estringPtr line
23630 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 = NULL;. gaia
23640 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f 6c 79 67 PolygonPtr polyg
23650 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 69 6e 74 = NULL;. int
23660 20 65 6e 64 69 61 6e 5f 61 72 63 68 20 3d 20 67 endian_arch = g
23670 61 69 61 45 6e 64 69 61 6e 41 72 63 68 20 28 29 aiaEndianArch ()
23680 3b 0a 20 20 20 20 67 61 69 61 4d 62 72 47 65 6f ;. gaiaMbrGeo
23690 6d 65 74 72 79 20 28 67 65 6f 6d 29 3b 0a 2f 2a metry (geom);./*
236a0 20 68 6f 77 20 6d 61 6e 79 20 65 6e 74 69 74 69 how many entiti
236b0 65 73 2c 20 61 6e 64 20 6f 66 20 77 68 61 74 20 es, and of what
236c0 6b 69 6e 64 2c 20 64 6f 20 77 65 20 68 61 76 65 kind, do we have
236d0 20 3f 20 2a 2f 0a 20 20 20 20 70 74 20 3d 20 67 ? */. pt = g
236e0 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 69 6e 74 3b eom->FirstPoint;
236f0 0a 20 20 20 20 77 68 69 6c 65 20 28 70 74 29 0a . while (pt).
23700 20 20 20 20 20 20 7b 0a 09 20 20 70 6f 69 6e 74 {.. point
23710 20 3d 20 70 74 3b 0a 09 20 20 65 6e 74 69 74 69 = pt;.. entiti
23720 65 73 2b 2b 3b 0a 09 20 20 6e 5f 70 6f 69 6e 74 es++;.. n_point
23730 73 2b 2b 3b 0a 09 20 20 70 74 20 3d 20 70 74 2d s++;.. pt = pt-
23740 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 >Next;. }.
23750 20 20 20 6c 6e 20 3d 20 67 65 6f 6d 2d 3e 46 69 ln = geom->Fi
23760 72 73 74 4c 69 6e 65 73 74 72 69 6e 67 3b 0a 20 rstLinestring;.
23770 20 20 20 77 68 69 6c 65 20 28 6c 6e 29 0a 20 20 while (ln).
23780 20 20 20 20 7b 0a 09 20 20 6c 69 6e 65 20 3d 20 {.. line =
23790 6c 6e 3b 0a 09 20 20 65 6e 74 69 74 69 65 73 2b ln;.. entities+
237a0 2b 3b 0a 09 20 20 6e 5f 6c 69 6e 65 73 74 72 69 +;.. n_linestri
237b0 6e 67 73 2b 2b 3b 0a 09 20 20 6c 6e 20 3d 20 6c ngs++;.. ln = l
237c0 6e 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d n->Next;. }
237d0 0a 20 20 20 20 70 67 20 3d 20 67 65 6f 6d 2d 3e . pg = geom->
237e0 46 69 72 73 74 50 6f 6c 79 67 6f 6e 3b 0a 20 20 FirstPolygon;.
237f0 20 20 77 68 69 6c 65 20 28 70 67 29 0a 20 20 20 while (pg).
23800 20 20 20 7b 0a 09 20 20 70 6f 6c 79 67 20 3d 20 {.. polyg =
23810 70 67 3b 0a 09 20 20 65 6e 74 69 74 69 65 73 2b pg;.. entities+
23820 2b 3b 0a 09 20 20 6e 5f 70 6f 6c 79 67 6f 6e 73 +;.. n_polygons
23830 2b 2b 3b 0a 09 20 20 70 67 20 3d 20 70 67 2d 3e ++;.. pg = pg->
23840 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 Next;. }.
23850 20 20 2a 73 69 7a 65 20 3d 20 30 3b 0a 20 20 20 *size = 0;.
23860 20 2a 72 65 73 75 6c 74 20 3d 20 4e 55 4c 4c 3b *result = NULL;
23870 0a 20 20 20 20 69 66 20 28 6e 5f 70 6f 69 6e 74 . if (n_point
23880 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f 6c 79 s == 0 && n_poly
23890 67 6f 6e 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c gons == 0 && n_l
238a0 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 30 29 inestrings == 0)
238b0 0a 09 72 65 74 75 72 6e 3b 0a 2f 2a 20 6f 6b 2c ..return;./* ok,
238c0 20 77 65 20 63 61 6e 20 64 65 74 65 72 6d 69 6e we can determin
238d0 65 20 74 68 65 20 67 65 6f 6d 65 74 72 79 20 63 e the geometry c
238e0 6c 61 73 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 lass */. if (
238f0 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 31 20 26 26 n_points == 1 &&
23900 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 20 3d n_linestrings =
23910 3d 20 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e = 0 && n_polygon
23920 73 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 7b 0a s == 0). {.
23930 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 . if (geom->Dec
23940 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
23950 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 29 0a 09 20 A_MULTIPOINT)..
23960 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d 2d {...if (geom-
23970 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
23980 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 == GAIA_XY_Z)...
23990 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
239a0 4d 55 4c 54 49 50 4f 49 4e 54 5a 3b 0a 09 09 65 MULTIPOINTZ;...e
239b0 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
239c0 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
239d0 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 GAIA_XY_M)...
239e0 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c type = GAIA_MUL
239f0 54 49 50 4f 49 4e 54 4d 3b 0a 09 09 65 6c 73 65 TIPOINTM;...else
23a00 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
23a10 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
23a20 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
23a30 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
23a40 49 50 4f 49 4e 54 5a 4d 3b 0a 09 09 65 6c 73 65 IPOINTZM;...else
23a50 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
23a60 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a 09 IA_MULTIPOINT;..
23a70 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 20 69 66 }.. else if
23a80 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 (geom->Declared
23a90 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f Type == GAIA_GEO
23aa0 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 METRYCOLLECTION)
23ab0 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 .. {...if (ge
23ac0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
23ad0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 el == GAIA_XY_Z)
23ae0 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
23af0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
23b00 43 54 49 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 CTIONZ;...else i
23b10 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
23b20 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
23b30 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 XY_M)... type
23b40 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
23b50 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 COLLECTIONM;...e
23b60 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
23b70 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
23b80 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 GAIA_XY_Z_M)...
23b90 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
23ba0 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
23bb0 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 NZM;...else...
23bc0 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 type = GAIA_GE
23bd0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
23be0 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 ;.. }.. else
23bf0 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 .. {...if (ge
23c00 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
23c10 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 el == GAIA_XY_Z)
23c20 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
23c30 49 41 5f 50 4f 49 4e 54 5a 3b 0a 09 09 65 6c 73 IA_POINTZ;...els
23c40 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
23c50 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
23c60 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
23c70 79 70 65 20 3d 20 47 41 49 41 5f 50 4f 49 4e 54 ype = GAIA_POINT
23c80 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 M;...else if (ge
23c90 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
23ca0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
23cb0 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 M)... type =
23cc0 47 41 49 41 5f 50 4f 49 4e 54 5a 4d 3b 0a 09 09 GAIA_POINTZM;...
23cd0 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 else... type
23ce0 3d 20 47 41 49 41 5f 50 4f 49 4e 54 3b 0a 09 20 = GAIA_POINT;..
23cf0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 }. }.
23d00 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e else if (n_poin
23d10 74 73 20 3e 20 31 20 26 26 20 6e 5f 6c 69 6e 65 ts > 1 && n_line
23d20 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 strings == 0 &&
23d30 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 n_polygons == 0)
23d40 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 . {.. if (
23d50 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 geom->DeclaredTy
23d60 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
23d70 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 TRYCOLLECTION)..
23d80 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
23d90 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
23da0 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
23db0 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
23dc0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
23dd0 49 4f 4e 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 IONZ;...else if
23de0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
23df0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
23e00 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _M)... type =
23e10 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
23e20 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 09 65 6c 73 LLECTIONM;...els
23e30 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
23e40 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
23e50 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
23e60 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
23e70 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
23e80 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 M;...else...
23e90 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d type = GAIA_GEOM
23ea0 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a ETRYCOLLECTION;.
23eb0 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 . }.. else..
23ec0 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
23ed0 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
23ee0 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
23ef0 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
23f00 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 3b 0a 09 09 _MULTIPOINTZ;...
23f10 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
23f20 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
23f30 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 GAIA_XY_M)...
23f40 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 type = GAIA_MU
23f50 4c 54 49 50 4f 49 4e 54 4d 3b 0a 09 09 65 6c 73 LTIPOINTM;...els
23f60 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
23f70 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
23f80 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
23f90 20 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c type = GAIA_MUL
23fa0 54 49 50 4f 49 4e 54 5a 4d 3b 0a 09 09 65 6c 73 TIPOINTZM;...els
23fb0 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 e... type = G
23fc0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a AIA_MULTIPOINT;.
23fd0 09 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 . }. }.
23fe0 20 20 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f else if (n_po
23ff0 69 6e 74 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c ints == 0 && n_l
24000 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 31 20 inestrings == 1
24010 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d && n_polygons ==
24020 20 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 0). {.. i
24030 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 f (geom->Declare
24040 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 dType == GAIA_MU
24050 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 29 0a 09 LTILINESTRING)..
24060 20 20 20 20 7b 0a 09 09 69 66 20 28 67 65 6f 6d {...if (geom
24070 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
24080 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
24090 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
240a0 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
240b0 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 Z;...else if (ge
240c0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
240d0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 el == GAIA_XY_M)
240e0 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
240f0 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 IA_MULTILINESTRI
24100 4e 47 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 NGM;...else if (
24110 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
24120 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
24130 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 Z_M)... type
24140 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 = GAIA_MULTILINE
24150 53 54 52 49 4e 47 5a 4d 3b 0a 09 09 65 6c 73 65 STRINGZM;...else
24160 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
24170 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 IA_MULTILINESTRI
24180 4e 47 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c NG;.. }.. el
24190 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 se if (geom->Dec
241a0 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
241b0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
241c0 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 TION).. {...i
241d0 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
241e0 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
241f0 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
24200 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
24210 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 COLLECTIONZ;...e
24220 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
24230 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
24240 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 GAIA_XY_M)...
24250 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f type = GAIA_GEO
24260 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
24270 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
24280 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
24290 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
242a0 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
242b0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
242c0 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 ECTIONZM;...else
242d0 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 ... type = GA
242e0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
242f0 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 CTION;.. }..
24300 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 else.. {...i
24310 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
24320 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
24330 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 XY_Z)... type
24340 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 = GAIA_LINESTRI
24350 4e 47 5a 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 NGZ;...else if (
24360 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
24370 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
24380 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 M)... type =
24390 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 4d GAIA_LINESTRINGM
243a0 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f ;...else if (geo
243b0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
243c0 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
243d0 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 )... type = G
243e0 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d AIA_LINESTRINGZM
243f0 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 74 ;...else... t
24400 79 70 65 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 ype = GAIA_LINES
24410 54 52 49 4e 47 3b 0a 09 20 20 20 20 7d 0a 20 20 TRING;.. }.
24420 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 }. else i
24430 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 f (n_points == 0
24440 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 && n_linestring
24450 73 20 3e 20 31 20 26 26 20 6e 5f 70 6f 6c 79 67 s > 1 && n_polyg
24460 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 20 20 20 20 ons == 0).
24470 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 {.. if (geom->D
24480 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 eclaredType == G
24490 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
244a0 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 ECTION).. {..
244b0 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
244c0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
244d0 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 A_XY_Z)... ty
244e0 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 pe = GAIA_GEOMET
244f0 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 RYCOLLECTIONZ;..
24500 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
24510 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
24520 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 = GAIA_XY_M)...
24530 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f 47 type = GAIA_G
24540 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
24550 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 67 NM;...else if (g
24560 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
24570 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
24580 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _M)... type =
24590 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
245a0 4c 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c LLECTIONZM;...el
245b0 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 se... type =
245c0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
245d0 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a LECTION;.. }.
245e0 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a 09 . else.. {..
245f0 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
24600 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
24610 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 79 A_XY_Z)... ty
24620 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c pe = GAIA_MULTIL
24630 49 4e 45 53 54 52 49 4e 47 5a 3b 0a 09 09 65 6c INESTRINGZ;...el
24640 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
24650 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
24660 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 AIA_XY_M)...
24670 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
24680 49 4c 49 4e 45 53 54 52 49 4e 47 4d 3b 0a 09 09 ILINESTRINGM;...
24690 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
246a0 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
246b0 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 GAIA_XY_Z_M)...
246c0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
246d0 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a MULTILINESTRINGZ
246e0 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 M;...else...
246f0 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
24700 49 4c 49 4e 45 53 54 52 49 4e 47 3b 0a 09 20 20 ILINESTRING;..
24710 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
24720 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 else if (n_point
24730 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 s == 0 && n_line
24740 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 strings == 0 &&
24750 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 31 29 n_polygons == 1)
24760 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 . {.. if (
24770 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 geom->DeclaredTy
24780 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
24790 50 4f 4c 59 47 4f 4e 29 0a 09 20 20 20 20 7b 0a POLYGON).. {.
247a0 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 ..if (geom->Dime
247b0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
247c0 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 74 IA_XY_Z)... t
247d0 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 ype = GAIA_MULTI
247e0 50 4f 4c 59 47 4f 4e 5a 3b 0a 09 09 65 6c 73 65 POLYGONZ;...else
247f0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
24800 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
24810 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 79 A_XY_M)... ty
24820 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 pe = GAIA_MULTIP
24830 4f 4c 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 OLYGONM;...else
24840 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
24850 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
24860 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 _XY_Z_M)... t
24870 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 ype = GAIA_MULTI
24880 50 4f 4c 59 47 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 POLYGONZM;...els
24890 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 e... type = G
248a0 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e AIA_MULTIPOLYGON
248b0 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 ;.. }.. else
248c0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 if (geom->Decla
248d0 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f redType == GAIA_
248e0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
248f0 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 ON).. {...if
24900 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
24910 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
24920 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
24930 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
24940 4c 4c 45 43 54 49 4f 4e 5a 3b 0a 09 09 65 6c 73 LLECTIONZ;...els
24950 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
24960 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
24970 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
24980 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 ype = GAIA_GEOME
24990 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a TRYCOLLECTIONM;.
249a0 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
249b0 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
249c0 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
249d0 09 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 .. type = GAI
249e0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
249f0 54 49 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 TIONZM;...else..
24a00 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
24a10 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
24a20 49 4f 4e 3b 0a 09 20 20 20 20 7d 0a 09 20 20 65 ION;.. }.. e
24a30 6c 73 65 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 lse.. {...if
24a40 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
24a50 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
24a60 5f 5a 29 0a 09 09 20 20 20 20 74 79 70 65 20 3d _Z)... type =
24a70 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 3b 0a GAIA_POLYGONZ;.
24a80 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d ..else if (geom-
24a90 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
24aa0 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 == GAIA_XY_M)...
24ab0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
24ac0 50 4f 4c 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 POLYGONM;...else
24ad0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
24ae0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
24af0 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
24b00 74 79 70 65 20 3d 20 47 41 49 41 5f 50 4f 4c 59 type = GAIA_POLY
24b10 47 4f 4e 5a 4d 3b 0a 09 09 65 6c 73 65 0a 09 09 GONZM;...else...
24b20 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
24b30 50 4f 4c 59 47 4f 4e 3b 0a 09 20 20 20 20 7d 0a POLYGON;.. }.
24b40 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 }. else
24b50 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d if (n_points ==
24b60 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 0 && n_linestri
24b70 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f ngs == 0 && n_po
24b80 6c 79 67 6f 6e 73 20 3e 20 31 29 0a 20 20 20 20 lygons > 1).
24b90 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d {.. if (geom-
24ba0 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d >DeclaredType ==
24bb0 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
24bc0 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 7b LLECTION).. {
24bd0 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d ...if (geom->Dim
24be0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
24bf0 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 AIA_XY_Z)...
24c00 74 79 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d type = GAIA_GEOM
24c10 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 3b ETRYCOLLECTIONZ;
24c20 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
24c30 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
24c40 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 == GAIA_XY_M)..
24c50 09 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 . type = GAIA
24c60 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
24c70 49 4f 4e 4d 3b 0a 09 09 65 6c 73 65 20 69 66 20 IONM;...else if
24c80 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
24c90 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
24ca0 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 74 79 70 65 _Z_M)... type
24cb0 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 = GAIA_GEOMETRY
24cc0 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 3b 0a 09 09 COLLECTIONZM;...
24cd0 65 6c 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 else... type
24ce0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
24cf0 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 20 20 OLLECTION;..
24d00 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b }.. else.. {
24d10 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d ...if (geom->Dim
24d20 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
24d30 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 AIA_XY_Z)...
24d40 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
24d50 49 50 4f 4c 59 47 4f 4e 5a 3b 0a 09 09 65 6c 73 IPOLYGONZ;...els
24d60 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
24d70 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
24d80 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 74 IA_XY_M)... t
24d90 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 ype = GAIA_MULTI
24da0 50 4f 4c 59 47 4f 4e 4d 3b 0a 09 09 65 6c 73 65 POLYGONM;...else
24db0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
24dc0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
24dd0 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
24de0 74 79 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 type = GAIA_MULT
24df0 49 50 4f 4c 59 47 4f 4e 5a 4d 3b 0a 09 09 65 6c IPOLYGONZM;...el
24e00 73 65 0a 09 09 20 20 20 20 74 79 70 65 20 3d 20 se... type =
24e10 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f GAIA_MULTIPOLYGO
24e20 4e 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 N;.. }.
24e30 7d 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 }. else.
24e40 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e {.. if (geom->
24e50 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
24e60 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 20 20 = GAIA_XY_Z)..
24e70 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
24e80 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
24e90 4f 4e 5a 3b 0a 09 20 20 65 6c 73 65 20 69 66 20 ONZ;.. else if
24ea0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
24eb0 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
24ec0 5f 4d 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 _M).. type
24ed0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
24ee0 4f 4c 4c 45 43 54 49 4f 4e 4d 3b 0a 09 20 20 65 OLLECTIONM;.. e
24ef0 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
24f00 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
24f10 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 GAIA_XY_Z_M)..
24f20 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
24f30 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
24f40 4f 4e 5a 4d 3b 0a 09 20 20 65 6c 73 65 0a 09 20 ONZM;.. else..
24f50 20 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 type = GAIA
24f60 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
24f70 49 4f 4e 3b 0a 20 20 20 20 20 20 7d 0a 2f 2a 20 ION;. }./*
24f80 61 6e 64 20 6e 6f 77 20 77 65 20 63 6f 6d 70 75 and now we compu
24f90 74 65 20 74 68 65 20 73 69 7a 65 20 6f 66 20 57 te the size of W
24fa0 4b 42 20 2a 2f 0a 20 20 20 20 2a 73 69 7a 65 20 KB */. *size
24fb0 3d 20 35 3b 09 09 09 2f 2a 20 68 65 61 64 65 72 = 5;.../* header
24fc0 20 73 69 7a 65 20 2a 2f 0a 20 20 20 20 69 66 20 size */. if
24fd0 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 (type == GAIA_MU
24fe0 4c 54 49 50 4f 49 4e 54 20 7c 7c 20 74 79 70 65 LTIPOINT || type
24ff0 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 == GAIA_MULTILI
25000 4e 45 53 54 52 49 4e 47 0a 09 7c 7c 20 74 79 70 NESTRING..|| typ
25010 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
25020 4f 4c 59 47 4f 4e 20 7c 7c 20 74 79 70 65 20 3d OLYGON || type =
25030 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
25040 4f 4c 4c 45 43 54 49 4f 4e 0a 09 7c 7c 20 74 79 OLLECTION..|| ty
25050 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
25060 50 4f 49 4e 54 5a 20 7c 7c 20 74 79 70 65 20 3d POINTZ || type =
25070 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 = GAIA_MULTILINE
25080 53 54 52 49 4e 47 5a 0a 09 7c 7c 20 74 79 70 65 STRINGZ..|| type
25090 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f == GAIA_MULTIPO
250a0 4c 59 47 4f 4e 5a 20 7c 7c 20 74 79 70 65 20 3d LYGONZ || type =
250b0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
250c0 4f 4c 4c 45 43 54 49 4f 4e 5a 0a 09 7c 7c 20 74 OLLECTIONZ..|| t
250d0 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
250e0 49 50 4f 49 4e 54 4d 20 7c 7c 20 74 79 70 65 20 IPOINTM || type
250f0 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e == GAIA_MULTILIN
25100 45 53 54 52 49 4e 47 4d 0a 09 7c 7c 20 74 79 70 ESTRINGM..|| typ
25110 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
25120 4f 4c 59 47 4f 4e 4d 20 7c 7c 20 74 79 70 65 20 OLYGONM || type
25130 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 == GAIA_GEOMETRY
25140 43 4f 4c 4c 45 43 54 49 4f 4e 4d 0a 09 7c 7c 20 COLLECTIONM..||
25150 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
25160 54 49 50 4f 49 4e 54 5a 4d 20 7c 7c 20 74 79 70 TIPOINTZM || typ
25170 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c e == GAIA_MULTIL
25180 49 4e 45 53 54 52 49 4e 47 5a 4d 0a 09 7c 7c 20 INESTRINGZM..||
25190 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
251a0 54 49 50 4f 4c 59 47 4f 4e 5a 4d 20 7c 7c 20 74 TIPOLYGONZM || t
251b0 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
251c0 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d ETRYCOLLECTIONZM
251d0 29 0a 09 2a 73 69 7a 65 20 2b 3d 20 34 3b 0a 20 )..*size += 4;.
251e0 20 20 20 70 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d point = geom-
251f0 3e 46 69 72 73 74 50 6f 69 6e 74 3b 0a 20 20 20 >FirstPoint;.
25200 20 77 68 69 6c 65 20 28 70 6f 69 6e 74 29 0a 20 while (point).
25210 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 74 79 {.. if (ty
25220 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
25230 50 4f 49 4e 54 20 7c 7c 20 74 79 70 65 20 3d 3d POINT || type ==
25240 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
25250 54 52 49 4e 47 0a 09 20 20 20 20 20 20 7c 7c 20 TRING.. ||
25260 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
25270 54 49 50 4f 4c 59 47 4f 4e 20 7c 7c 20 74 79 70 TIPOLYGON || typ
25280 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
25290 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 0a 09 20 20 RYCOLLECTION..
252a0 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 || type == G
252b0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 20 AIA_MULTIPOINTZ
252c0 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
252d0 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a MULTILINESTRINGZ
252e0 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 .. || type
252f0 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c == GAIA_MULTIPOL
25300 59 47 4f 4e 5a 20 7c 7c 20 74 79 70 65 20 3d 3d YGONZ || type ==
25310 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
25320 4c 4c 45 43 54 49 4f 4e 5a 0a 09 20 20 20 20 20 LLECTIONZ..
25330 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
25340 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 20 7c 7c 20 _MULTIPOINTM ||
25350 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
25360 54 49 4c 49 4e 45 53 54 52 49 4e 47 4d 0a 09 20 TILINESTRINGM..
25370 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 || type ==
25380 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f GAIA_MULTIPOLYGO
25390 4e 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 NM || type == GA
253a0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
253b0 43 54 49 4f 4e 4d 0a 09 20 20 20 20 20 20 7c 7c CTIONM.. ||
253c0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
253d0 4c 54 49 50 4f 49 4e 54 5a 4d 20 7c 7c 20 74 79 LTIPOINTZM || ty
253e0 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
253f0 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 0a 09 20 20 LINESTRINGZM..
25400 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 || type == G
25410 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e AIA_MULTIPOLYGON
25420 5a 4d 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 ZM.. || typ
25430 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
25440 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a RYCOLLECTIONZM).
25450 09 20 20 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 . *size +=
25460 35 3b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 5;.. if (geom->
25470 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
25480 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 20 20 20 = GAIA_XY_Z..
25490 20 20 20 7c 7c 20 67 65 6f 6d 2d 3e 44 69 6d 65 || geom->Dime
254a0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
254b0 49 41 5f 58 59 5f 4d 29 0a 09 20 20 20 20 20 20 IA_XY_M)..
254c0 2a 73 69 7a 65 20 2b 3d 20 28 73 69 7a 65 6f 66 *size += (sizeof
254d0 20 28 64 6f 75 62 6c 65 29 20 2a 20 33 29 3b 09 (double) * 3);.
254e0 2f 2a 20 74 68 72 65 65 20 64 6f 75 62 6c 65 73 /* three doubles
254f0 20 66 6f 72 20 65 61 63 68 20 50 4f 49 4e 54 20 for each POINT
25500 2a 2f 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 */.. else if (g
25510 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
25520 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
25530 5f 4d 29 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 _M).. *size
25540 20 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 6f 75 += (sizeof (dou
25550 62 6c 65 29 20 2a 20 34 29 3b 09 2f 2a 20 66 6f ble) * 4);./* fo
25560 75 72 20 64 6f 75 62 6c 65 73 20 66 6f 72 20 65 ur doubles for e
25570 61 63 68 20 50 4f 49 4e 54 20 2a 2f 0a 09 20 20 ach POINT */..
25580 65 6c 73 65 0a 09 20 20 20 20 20 20 2a 73 69 7a else.. *siz
25590 65 20 2b 3d 20 28 73 69 7a 65 6f 66 20 28 64 6f e += (sizeof (do
255a0 75 62 6c 65 29 20 2a 20 32 29 3b 09 2f 2a 20 74 uble) * 2);./* t
255b0 77 6f 20 64 6f 75 62 6c 65 73 20 66 6f 72 20 65 wo doubles for e
255c0 61 63 68 20 50 4f 49 4e 54 20 2a 2f 0a 09 20 20 ach POINT */..
255d0 70 6f 69 6e 74 20 3d 20 70 6f 69 6e 74 2d 3e 4e point = point->N
255e0 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 ext;. }.
255f0 20 6c 69 6e 65 20 3d 20 67 65 6f 6d 2d 3e 46 69 line = geom->Fi
25600 72 73 74 4c 69 6e 65 73 74 72 69 6e 67 3b 0a 20 rstLinestring;.
25610 20 20 20 77 68 69 6c 65 20 28 6c 69 6e 65 29 0a while (line).
25620 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 74 {.. if (t
25630 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
25640 49 50 4f 49 4e 54 20 7c 7c 20 74 79 70 65 20 3d IPOINT || type =
25650 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 = GAIA_MULTILINE
25660 53 54 52 49 4e 47 0a 09 20 20 20 20 20 20 7c 7c STRING.. ||
25670 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
25680 4c 54 49 50 4f 4c 59 47 4f 4e 20 7c 7c 20 74 79 LTIPOLYGON || ty
25690 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
256a0 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 0a 09 20 TRYCOLLECTION..
256b0 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 || type ==
256c0 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a GAIA_MULTIPOINTZ
256d0 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
256e0 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
256f0 5a 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 Z.. || type
25700 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f == GAIA_MULTIPO
25710 4c 59 47 4f 4e 5a 20 7c 7c 20 74 79 70 65 20 3d LYGONZ || type =
25720 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
25730 4f 4c 4c 45 43 54 49 4f 4e 5a 0a 09 20 20 20 20 OLLECTIONZ..
25740 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 || type == GAI
25750 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 20 7c 7c A_MULTIPOINTM ||
25760 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
25770 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 4d 0a 09 LTILINESTRINGM..
25780 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
25790 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 GAIA_MULTIPOLYG
257a0 4f 4e 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 ONM || type == G
257b0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
257c0 45 43 54 49 4f 4e 4d 0a 09 20 20 20 20 20 20 7c ECTIONM.. |
257d0 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
257e0 55 4c 54 49 50 4f 49 4e 54 5a 4d 20 7c 7c 20 74 ULTIPOINTZM || t
257f0 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
25800 49 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 0a 09 20 ILINESTRINGZM..
25810 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 || type ==
25820 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f GAIA_MULTIPOLYGO
25830 4e 5a 4d 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 NZM.. || ty
25840 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
25850 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 TRYCOLLECTIONZM)
25860 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 20 2b 3d .. *size +=
25870 20 35 3b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 5;.. if (geom-
25880 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 >DimensionModel
25890 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 20 20 == GAIA_XY_Z..
258a0 20 20 20 20 7c 7c 20 67 65 6f 6d 2d 3e 44 69 6d || geom->Dim
258b0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
258c0 41 49 41 5f 58 59 5f 4d 29 0a 09 20 20 20 20 20 AIA_XY_M)..
258d0 20 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 28 *size += (4 + (
258e0 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 (sizeof (double)
258f0 20 2a 20 33 29 20 2a 20 6c 69 6e 65 2d 3e 50 6f * 3) * line->Po
25900 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 70 6f 69 ints));./* # poi
25910 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 5d 20 66 6f nts + [x,y,z] fo
25920 72 20 65 61 63 68 20 76 65 72 74 65 78 20 2a 2f r each vertex */
25930 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 65 6f .. else if (geo
25940 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
25950 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d l == GAIA_XY_Z_M
25960 29 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 20 2b ).. *size +
25970 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 20 = (4 + ((sizeof
25980 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 20 2a 20 (double) * 4) *
25990 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 line->Points));.
259a0 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 /* # points + [x
259b0 2c 79 2c 7a 2c 6d 5d 20 66 6f 72 20 65 61 63 68 ,y,z,m] for each
259c0 20 76 65 72 74 65 78 20 2a 2f 0a 09 20 20 65 6c vertex */.. el
259d0 73 65 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 20 se.. *size
259e0 2b 3d 20 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 += (4 + ((sizeof
259f0 20 28 64 6f 75 62 6c 65 29 20 2a 20 32 29 20 2a (double) * 2) *
25a00 20 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b line->Points));
25a10 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b ./* # points + [
25a20 78 2c 79 5d 20 66 6f 72 20 65 61 63 68 20 76 65 x,y] for each ve
25a30 72 74 65 78 20 2a 2f 0a 09 20 20 6c 69 6e 65 20 rtex */.. line
25a40 3d 20 6c 69 6e 65 2d 3e 4e 65 78 74 3b 0a 20 20 = line->Next;.
25a50 20 20 20 20 7d 0a 20 20 20 20 70 6f 6c 79 67 20 }. polyg
25a60 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c = geom->FirstPol
25a70 79 67 6f 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 ygon;. while
25a80 28 70 6f 6c 79 67 29 0a 20 20 20 20 20 20 7b 0a (polyg). {.
25a90 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 . if (type == G
25aa0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c AIA_MULTIPOINT |
25ab0 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
25ac0 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 0a 09 ULTILINESTRING..
25ad0 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
25ae0 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 GAIA_MULTIPOLYG
25af0 4f 4e 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 ON || type == GA
25b00 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
25b10 43 54 49 4f 4e 0a 09 20 20 20 20 20 20 7c 7c 20 CTION.. ||
25b20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
25b30 54 49 50 4f 49 4e 54 5a 20 7c 7c 20 74 79 70 65 TIPOINTZ || type
25b40 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 == GAIA_MULTILI
25b50 4e 45 53 54 52 49 4e 47 5a 0a 09 20 20 20 20 20 NESTRINGZ..
25b60 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
25b70 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 20 7c _MULTIPOLYGONZ |
25b80 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 | type == GAIA_G
25b90 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
25ba0 4e 5a 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 NZ.. || typ
25bb0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
25bc0 4f 49 4e 54 4d 20 7c 7c 20 74 79 70 65 20 3d 3d OINTM || type ==
25bd0 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
25be0 54 52 49 4e 47 4d 0a 09 20 20 20 20 20 20 7c 7c TRINGM.. ||
25bf0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
25c00 4c 54 49 50 4f 4c 59 47 4f 4e 4d 20 7c 7c 20 74 LTIPOLYGONM || t
25c10 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
25c20 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 0a ETRYCOLLECTIONM.
25c30 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d . || type =
25c40 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e = GAIA_MULTIPOIN
25c50 54 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 TZM || type == G
25c60 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
25c70 49 4e 47 5a 4d 0a 09 20 20 20 20 20 20 7c 7c 20 INGZM.. ||
25c80 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
25c90 54 49 50 4f 4c 59 47 4f 4e 5a 4d 0a 09 20 20 20 TIPOLYGONZM..
25ca0 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 || type == GA
25cb0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
25cc0 43 54 49 4f 4e 5a 4d 29 0a 09 20 20 20 20 20 20 CTIONZM)..
25cd0 2a 73 69 7a 65 20 2b 3d 20 35 3b 0a 09 20 20 72 *size += 5;.. r
25ce0 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
25cf0 72 69 6f 72 3b 0a 09 20 20 69 66 20 28 67 65 6f rior;.. if (geo
25d00 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
25d10 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 l == GAIA_XY_Z..
25d20 20 20 20 20 20 20 7c 7c 20 67 65 6f 6d 2d 3e 44 || geom->D
25d30 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
25d40 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 20 20 20 GAIA_XY_M)..
25d50 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 38 20 2b *size += (8 +
25d60 20 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c ((sizeof (doubl
25d70 65 29 20 2a 20 33 29 20 2a 20 72 6e 67 2d 3e 50 e) * 3) * rng->P
25d80 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 72 69 oints));./* # ri
25d90 6e 67 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b ngs + # points +
25da0 20 5b 78 2c 79 2c 7a 5d 20 61 72 72 61 79 20 2d [x,y,z] array -
25db0 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a exterior ring *
25dc0 2f 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 65 /.. else if (ge
25dd0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
25de0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f el == GAIA_XY_Z_
25df0 4d 29 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 20 M).. *size
25e00 2b 3d 20 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 += (8 + ((sizeof
25e10 20 28 64 6f 75 62 6c 65 29 20 2a 20 34 29 20 2a (double) * 4) *
25e20 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 rng->Points));.
25e30 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 /* # rings + # p
25e40 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 2c 6d oints + [x,y,z,m
25e50 5d 20 61 72 72 61 79 20 2d 20 65 78 74 65 72 69 ] array - exteri
25e60 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 20 65 6c or ring */.. el
25e70 73 65 0a 09 20 20 20 20 20 20 2a 73 69 7a 65 20 se.. *size
25e80 2b 3d 20 28 38 20 2b 20 28 28 73 69 7a 65 6f 66 += (8 + ((sizeof
25e90 20 28 64 6f 75 62 6c 65 29 20 2a 20 32 29 20 2a (double) * 2) *
25ea0 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 rng->Points));.
25eb0 2f 2a 20 23 20 72 69 6e 67 73 20 2b 20 23 20 70 /* # rings + # p
25ec0 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 5d 20 61 72 oints + [x,y] ar
25ed0 72 61 79 20 2d 20 65 78 74 65 72 69 6f 72 20 72 ray - exterior r
25ee0 69 6e 67 20 2a 2f 0a 09 20 20 66 6f 72 20 28 69 ing */.. for (i
25ef0 62 20 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 b = 0; ib < poly
25f00 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b g->NumInteriors;
25f10 20 69 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 ib++).. {...
25f20 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 rng = polyg->Int
25f30 65 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 69 eriors + ib;...i
25f40 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
25f50 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
25f60 58 59 5f 5a 0a 09 09 20 20 20 20 7c 7c 20 67 65 XY_Z... || ge
25f70 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
25f80 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 el == GAIA_XY_M)
25f90 0a 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 ... *size +=
25fa0 28 34 20 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 (4 + ((sizeof (d
25fb0 6f 75 62 6c 65 29 20 2a 20 33 29 20 2a 20 72 6e ouble) * 3) * rn
25fc0 67 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 g->Points));./*
25fd0 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 2c # points + [x,y,
25fe0 7a 5d 20 61 72 72 61 79 20 2d 20 69 6e 74 65 72 z] array - inter
25ff0 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 65 6c ior ring */...el
26000 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
26010 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
26020 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 AIA_XY_Z_M)...
26030 20 20 2a 73 69 7a 65 20 2b 3d 20 28 34 20 2b 20 *size += (4 +
26040 28 28 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 ((sizeof (double
26050 29 20 2a 20 34 29 20 2a 20 72 6e 67 2d 3e 50 6f ) * 4) * rng->Po
26060 69 6e 74 73 29 29 3b 09 2f 2a 20 23 20 70 6f 69 ints));./* # poi
26070 6e 74 73 20 2b 20 5b 78 2c 79 2c 7a 2c 6d 5d 20 nts + [x,y,z,m]
26080 61 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 array - interior
26090 20 72 69 6e 67 20 2a 2f 0a 09 09 65 6c 73 65 0a ring */...else.
260a0 09 09 20 20 20 20 2a 73 69 7a 65 20 2b 3d 20 28 .. *size += (
260b0 34 20 2b 20 28 28 73 69 7a 65 6f 66 20 28 64 6f 4 + ((sizeof (do
260c0 75 62 6c 65 29 20 2a 20 32 29 20 2a 20 72 6e 67 uble) * 2) * rng
260d0 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a 20 23 ->Points));./* #
260e0 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 5d 20 points + [x,y]
260f0 61 72 72 61 79 20 2d 20 69 6e 74 65 72 69 6f 72 array - interior
26100 20 72 69 6e 67 20 2a 2f 0a 09 20 20 20 20 7d 0a ring */.. }.
26110 09 20 20 70 6f 6c 79 67 20 3d 20 70 6f 6c 79 67 . polyg = polyg
26120 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a ->Next;. }.
26130 20 20 20 20 2a 72 65 73 75 6c 74 20 3d 20 6d 61 *result = ma
26140 6c 6c 6f 63 20 28 2a 73 69 7a 65 29 3b 0a 20 20 lloc (*size);.
26150 20 20 70 74 72 20 3d 20 2a 72 65 73 75 6c 74 3b ptr = *result;
26160 0a 2f 2a 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 ./* and finally
26170 77 65 20 62 75 69 6c 64 20 74 68 65 20 57 4b 42 we build the WKB
26180 20 2a 2f 0a 20 20 20 20 2a 70 74 72 20 3d 20 30 */. *ptr = 0
26190 78 30 31 3b 09 09 2f 2a 20 6c 69 74 74 6c 65 20 x01;../* little
261a0 65 6e 64 69 61 6e 20 62 79 74 65 20 6f 72 64 65 endian byte orde
261b0 72 20 2a 2f 0a 20 20 20 20 67 61 69 61 45 78 70 r */. gaiaExp
261c0 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 ort32 (ptr + 1,
261d0 74 79 70 65 2c 20 31 2c 20 65 6e 64 69 61 6e 5f type, 1, endian_
261e0 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 6d 61 arch);./* the ma
261f0 69 6e 20 43 4c 41 53 53 20 54 59 50 45 20 2a 2f in CLASS TYPE */
26200 0a 20 20 20 20 70 74 72 20 2b 3d 20 35 3b 0a 20 . ptr += 5;.
26210 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 if (type == G
26220 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c AIA_MULTIPOINT |
26230 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
26240 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 0a 09 ULTILINESTRING..
26250 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
26260 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 20 7c 7c 20 MULTIPOLYGON ||
26270 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
26280 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 0a METRYCOLLECTION.
26290 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 .|| type == GAIA
262a0 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 20 7c 7c 20 _MULTIPOINTZ ||
262b0 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
262c0 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 0a 09 7c TILINESTRINGZ..|
262d0 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
262e0 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 20 7c 7c 20 ULTIPOLYGONZ ||
262f0 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
26300 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
26310 0a 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 ..|| type == GAI
26320 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 20 7c 7c A_MULTIPOINTM ||
26330 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
26340 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 4d 0a 09 LTILINESTRINGM..
26350 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
26360 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 4d 20 7c 7c MULTIPOLYGONM ||
26370 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
26380 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
26390 4d 0a 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 M..|| type == GA
263a0 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 20 IA_MULTIPOINTZM
263b0 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
263c0 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a MULTILINESTRINGZ
263d0 4d 0a 09 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 M..|| type == GA
263e0 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a IA_MULTIPOLYGONZ
263f0 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 M || type == GAI
26400 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
26410 54 49 4f 4e 5a 4d 29 0a 20 20 20 20 20 20 7b 0a TIONZM). {.
26420 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 . gaiaExport32
26430 28 70 74 72 2c 20 65 6e 74 69 74 69 65 73 2c 20 (ptr, entities,
26440 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
26450 09 2f 2a 20 69 74 27 73 20 61 20 63 6f 6c 6c 65 ./* it's a colle
26460 63 74 69 6f 6e 3b 20 23 20 65 6e 74 69 74 69 65 ction; # entitie
26470 73 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 34 s */.. ptr += 4
26480 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 70 6f ;. }. po
26490 69 6e 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 int = geom->Firs
264a0 74 50 6f 69 6e 74 3b 0a 20 20 20 20 77 68 69 6c tPoint;. whil
264b0 65 20 28 70 6f 69 6e 74 29 0a 20 20 20 20 20 20 e (point).
264c0 7b 0a 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d {.. if (type ==
264d0 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 GAIA_MULTIPOINT
264e0 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
264f0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
26500 49 4f 4e 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 ION.. || ty
26510 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
26520 50 4f 49 4e 54 5a 20 7c 7c 20 74 79 70 65 20 3d POINTZ || type =
26530 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
26540 4f 4c 4c 45 43 54 49 4f 4e 5a 0a 09 20 20 20 20 OLLECTIONZ..
26550 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 || type == GAI
26560 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 4d 20 7c 7c A_MULTIPOINTM ||
26570 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
26580 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
26590 4d 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 M.. || type
265a0 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f == GAIA_MULTIPO
265b0 49 4e 54 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d INTZM || type ==
265c0 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
265d0 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a 09 20 20 20 LLECTIONZM)..
265e0 20 7b 0a 09 09 2a 70 74 72 20 3d 20 30 78 30 31 {...*ptr = 0x01
265f0 3b 0a 09 09 2f 2a 20 69 74 27 73 20 61 20 63 6f ;.../* it's a co
26600 6c 6c 65 63 74 69 6f 6e 3a 20 74 68 65 20 43 4c llection: the CL
26610 41 53 53 20 54 59 50 45 20 66 6f 72 20 74 68 69 ASS TYPE for thi
26620 73 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a 09 09 69 s element */...i
26630 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f f (type == GAIA_
26640 4d 55 4c 54 49 50 4f 49 4e 54 5a 0a 09 09 20 20 MULTIPOINTZ...
26650 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 || type == GAI
26660 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
26670 54 49 4f 4e 5a 29 0a 09 09 20 20 20 20 67 61 69 TIONZ)... gai
26680 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b aExport32 (ptr +
26690 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e 54 5a 2c 1, GAIA_POINTZ,
266a0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
266b0 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 74 79 70 ;...else if (typ
266c0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
266d0 4f 49 4e 54 4d 0a 09 09 09 20 7c 7c 20 74 79 70 OINTM.... || typ
266e0 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
266f0 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 29 0a 09 RYCOLLECTIONM)..
26700 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 33 . gaiaExport3
26710 32 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 41 2 (ptr + 1, GAIA
26720 5f 50 4f 49 4e 54 4d 2c 20 31 2c 20 65 6e 64 69 _POINTM, 1, endi
26730 61 6e 5f 61 72 63 68 29 3b 0a 09 09 65 6c 73 65 an_arch);...else
26740 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 if (type == GAI
26750 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 0a 09 A_MULTIPOINTZM..
26760 09 09 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 .. || type == GA
26770 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
26780 43 54 49 4f 4e 5a 4d 29 0a 09 09 20 20 20 20 67 CTIONZM)... g
26790 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
267a0 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 49 4e 54 + 1, GAIA_POINT
267b0 5a 4d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 ZM, 1, endian_ar
267c0 63 68 29 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 ch);...else...
267d0 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
267e0 70 74 72 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f ptr + 1, GAIA_PO
267f0 49 4e 54 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 INT, 1, endian_a
26800 72 63 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 35 rch);...ptr += 5
26810 3b 0a 09 20 20 20 20 7d 0a 09 20 20 67 61 69 61 ;.. }.. gaia
26820 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 70 Export64 (ptr, p
26830 6f 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 oint->X, 1, endi
26840 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a an_arch);./* X *
26850 2f 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 /.. gaiaExport6
26860 34 20 28 70 74 72 20 2b 20 38 2c 20 70 6f 69 6e 4 (ptr + 8, poin
26870 74 2d 3e 59 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->Y, 1, endian_
26880 61 72 63 68 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 arch);./* Y */..
26890 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 20 20 ptr += 16;..
268a0 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 if (type == GAIA
268b0 5f 50 4f 49 4e 54 5a 20 7c 7c 20 74 79 70 65 20 _POINTZ || type
268c0 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 == GAIA_MULTIPOI
268d0 4e 54 5a 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 NTZ.. || ty
268e0 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
268f0 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 29 0a TRYCOLLECTIONZ).
26900 09 20 20 20 20 7b 0a 09 09 67 61 69 61 45 78 70 . {...gaiaExp
26910 6f 72 74 36 34 20 28 70 74 72 2c 20 70 6f 69 6e ort64 (ptr, poin
26920 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f t->Z, 1, endian_
26930 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 arch);./* Z */..
26940 09 70 74 72 20 2b 3d 20 38 3b 0a 09 20 20 20 20 .ptr += 8;..
26950 7d 0a 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d }.. if (type ==
26960 20 47 41 49 41 5f 50 4f 49 4e 54 4d 20 7c 7c 20 GAIA_POINTM ||
26970 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
26980 54 49 50 4f 49 4e 54 4d 0a 09 20 20 20 20 20 20 TIPOINTM..
26990 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
269a0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
269b0 4f 4e 4d 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 ONM).. {...ga
269c0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
269d0 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 2c 20 65 6e point->M, 1, en
269e0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
269f0 20 2a 2f 0a 09 09 70 74 72 20 2b 3d 20 38 3b 0a */...ptr += 8;.
26a00 09 20 20 20 20 7d 0a 09 20 20 69 66 20 28 74 79 . }.. if (ty
26a10 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 49 4e 54 pe == GAIA_POINT
26a20 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 ZM || type == GA
26a30 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 5a 4d 0a IA_MULTIPOINTZM.
26a40 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d . || type =
26a50 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
26a60 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a 09 20 20 OLLECTIONZM)..
26a70 20 20 7b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 {...gaiaExport
26a80 36 34 20 28 70 74 72 2c 20 70 6f 69 6e 74 2d 3e 64 (ptr, point->
26a90 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 Z, 1, endian_arc
26aa0 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 67 61 h);./* Z */...ga
26ab0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
26ac0 2b 20 38 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 31 + 8, point->M, 1
26ad0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
26ae0 2f 2a 20 4d 20 2a 2f 0a 09 09 70 74 72 20 2b 3d /* M */...ptr +=
26af0 20 31 36 3b 0a 09 20 20 20 20 7d 0a 09 20 20 70 16;.. }.. p
26b00 6f 69 6e 74 20 3d 20 70 6f 69 6e 74 2d 3e 4e 65 oint = point->Ne
26b10 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 xt;. }.
26b20 6c 69 6e 65 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 line = geom->Fir
26b30 73 74 4c 69 6e 65 73 74 72 69 6e 67 3b 0a 20 20 stLinestring;.
26b40 20 20 77 68 69 6c 65 20 28 6c 69 6e 65 29 0a 20 while (line).
26b50 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 74 79 {.. if (ty
26b60 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
26b70 4c 49 4e 45 53 54 52 49 4e 47 20 7c 7c 20 74 79 LINESTRING || ty
26b80 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
26b90 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 0a 09 20 TRYCOLLECTION..
26ba0 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 || type ==
26bb0 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
26bc0 52 49 4e 47 5a 0a 09 20 20 20 20 20 20 7c 7c 20 RINGZ.. ||
26bd0 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
26be0 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
26bf0 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 .. || type
26c00 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e == GAIA_MULTILIN
26c10 45 53 54 52 49 4e 47 4d 0a 09 20 20 20 20 20 20 ESTRINGM..
26c20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
26c30 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
26c40 4f 4e 4d 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 ONM.. || ty
26c50 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
26c60 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 0a 09 20 20 LINESTRINGZM..
26c70 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 || type == G
26c80 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
26c90 45 43 54 49 4f 4e 5a 4d 29 0a 09 20 20 20 20 7b ECTIONZM).. {
26ca0 0a 09 09 2a 70 74 72 20 3d 20 30 78 30 31 3b 0a ...*ptr = 0x01;.
26cb0 09 09 2f 2a 20 69 74 27 73 20 61 20 63 6f 6c 6c ../* it's a coll
26cc0 65 63 74 69 6f 6e 3a 20 74 68 65 20 43 4c 41 53 ection: the CLAS
26cd0 53 20 54 59 50 45 20 66 6f 72 20 74 68 69 73 20 S TYPE for this
26ce0 65 6c 65 6d 65 6e 74 20 2a 2f 0a 09 09 69 66 20 element */...if
26cf0 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 (type == GAIA_MU
26d00 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 5a 0a 09 LTILINESTRINGZ..
26d10 09 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 . || type ==
26d20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
26d30 4c 45 43 54 49 4f 4e 5a 29 0a 09 09 20 20 20 20 LECTIONZ)...
26d40 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
26d50 72 20 2b 20 31 2c 20 47 41 49 41 5f 4c 49 4e 45 r + 1, GAIA_LINE
26d60 53 54 52 49 4e 47 5a 2c 20 31 2c 20 65 6e 64 69 STRINGZ, 1, endi
26d70 61 6e 5f 61 72 63 68 29 3b 0a 09 09 65 6c 73 65 an_arch);...else
26d80 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 if (type == GAI
26d90 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e A_MULTILINESTRIN
26da0 47 4d 0a 09 09 09 20 7c 7c 20 74 79 70 65 20 3d GM.... || type =
26db0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
26dc0 4f 4c 4c 45 43 54 49 4f 4e 4d 29 0a 09 09 20 20 OLLECTIONM)...
26dd0 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
26de0 70 74 72 20 2b 20 31 2c 20 47 41 49 41 5f 4c 49 ptr + 1, GAIA_LI
26df0 4e 45 53 54 52 49 4e 47 4d 2c 20 31 2c 20 65 6e NESTRINGM, 1, en
26e00 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 65 6c dian_arch);...el
26e10 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 se if (type == G
26e20 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
26e30 49 4e 47 5a 4d 0a 09 09 09 20 7c 7c 20 74 79 70 INGZM.... || typ
26e40 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
26e50 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a RYCOLLECTIONZM).
26e60 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
26e70 33 32 20 28 70 74 72 20 2b 20 31 2c 20 47 41 49 32 (ptr + 1, GAI
26e80 41 5f 4c 49 4e 45 53 54 52 49 4e 47 5a 4d 2c 20 A_LINESTRINGZM,
26e90 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
26ea0 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 67 61 ...else... ga
26eb0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
26ec0 2b 20 31 2c 20 47 41 49 41 5f 4c 49 4e 45 53 54 + 1, GAIA_LINEST
26ed0 52 49 4e 47 2c 20 31 2c 20 65 6e 64 69 61 6e 5f RING, 1, endian_
26ee0 61 72 63 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 arch);...ptr +=
26ef0 35 3b 0a 09 20 20 20 20 7d 0a 09 20 20 67 61 69 5;.. }.. gai
26f00 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 2c 20 aExport32 (ptr,
26f10 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c line->Points, 1,
26f20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
26f30 2a 20 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 * # points */..
26f40 20 70 74 72 20 2b 3d 20 34 3b 0a 09 20 20 66 6f ptr += 4;.. fo
26f50 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 r (iv = 0; iv <
26f60 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 line->Points; iv
26f70 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 ++).. {...if
26f80 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4c 49 (type == GAIA_LI
26f90 4e 45 53 54 52 49 4e 47 5a 20 7c 7c 20 74 79 70 NESTRINGZ || typ
26fa0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c e == GAIA_MULTIL
26fb0 49 4e 45 53 54 52 49 4e 47 5a 0a 09 09 20 20 20 INESTRINGZ...
26fc0 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
26fd0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
26fe0 49 4f 4e 5a 29 0a 09 09 20 20 7b 0a 09 09 20 20 IONZ)... {...
26ff0 20 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 gaiaGetPoint
27000 58 59 5a 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 XYZ (line->Coord
27010 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 s, iv, &x, &y, &
27020 7a 29 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 z);... }...else
27030 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 if (type == GAI
27040 41 5f 4c 49 4e 45 53 54 52 49 4e 47 4d 0a 09 09 A_LINESTRINGM...
27050 09 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 . || type == GAI
27060 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e A_MULTILINESTRIN
27070 47 4d 0a 09 09 09 20 7c 7c 20 74 79 70 65 20 3d GM.... || type =
27080 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
27090 4f 4c 4c 45 43 54 49 4f 4e 4d 29 0a 09 09 20 20 OLLECTIONM)...
270a0 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 47 65 {... gaiaGe
270b0 74 50 6f 69 6e 74 58 59 4d 20 28 6c 69 6e 65 2d tPointXYM (line-
270c0 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c >Coords, iv, &x,
270d0 20 26 79 2c 20 26 6d 29 3b 0a 09 09 20 20 7d 0a &y, &m);... }.
270e0 09 09 65 6c 73 65 20 69 66 20 28 74 79 70 65 20 ..else if (type
270f0 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 == GAIA_LINESTRI
27100 4e 47 5a 4d 0a 09 09 09 20 7c 7c 20 74 79 70 65 NGZM.... || type
27110 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 == GAIA_MULTILI
27120 4e 45 53 54 52 49 4e 47 5a 4d 0a 09 09 09 20 7c NESTRINGZM.... |
27130 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 | type == GAIA_G
27140 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
27150 4e 5a 4d 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 NZM)... {...
27160 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 gaiaGetPointX
27170 59 5a 4d 20 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 YZM (line->Coord
27180 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 s, iv, &x, &y, &
27190 7a 2c 20 26 6d 29 3b 0a 09 09 20 20 7d 0a 09 09 z, &m);... }...
271a0 65 6c 73 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 else... {...
271b0 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 20 gaiaGetPoint
271c0 28 6c 69 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 (line->Coords, i
271d0 76 2c 20 26 78 2c 20 26 79 29 3b 0a 09 09 20 20 v, &x, &y);...
271e0 7d 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 }...gaiaExport64
271f0 20 28 70 74 72 2c 20 78 2c 20 31 2c 20 65 6e 64 (ptr, x, 1, end
27200 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 ian_arch);./* X
27210 2a 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 */...gaiaExport6
27220 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 31 4 (ptr + 8, y, 1
27230 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
27240 2f 2a 20 59 20 2a 2f 0a 09 09 70 74 72 20 2b 3d /* Y */...ptr +=
27250 20 31 36 3b 0a 09 09 69 66 20 28 74 79 70 65 20 16;...if (type
27260 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 == GAIA_LINESTRI
27270 4e 47 5a 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 NGZ || type == G
27280 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
27290 49 4e 47 5a 0a 09 09 20 20 20 20 7c 7c 20 74 79 INGZ... || ty
272a0 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
272b0 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 29 0a TRYCOLLECTIONZ).
272c0 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 .. {... ga
272d0 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
272e0 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 z, 1, endian_ar
272f0 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 20 ch);./* Z */...
27300 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 ptr += 8;..
27310 09 20 20 7d 0a 09 09 69 66 20 28 74 79 70 65 20 . }...if (type
27320 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 == GAIA_LINESTRI
27330 4e 47 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 NGM || type == G
27340 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
27350 49 4e 47 4d 0a 09 09 20 20 20 20 7c 7c 20 74 79 INGM... || ty
27360 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 pe == GAIA_GEOME
27370 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 29 0a TRYCOLLECTIONM).
27380 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 .. {... ga
27390 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c iaExport64 (ptr,
273a0 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 m, 1, endian_ar
273b0 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 20 ch);./* M */...
273c0 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 ptr += 8;..
273d0 09 20 20 7d 0a 09 09 69 66 20 28 74 79 70 65 20 . }...if (type
273e0 3d 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 == GAIA_LINESTRI
273f0 4e 47 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 NGZM || type ==
27400 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 GAIA_MULTILINEST
27410 52 49 4e 47 5a 4d 0a 09 09 20 20 20 20 7c 7c 20 RINGZM... ||
27420 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
27430 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
27440 4d 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 M)... {...
27450 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
27460 74 72 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e tr, z, 1, endian
27470 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a _arch);./* Z */.
27480 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
27490 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 6d rt64 (ptr + 8, m
274a0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
274b0 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 20 20 20 );./* M */...
274c0 20 20 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 ptr += 16;...
274d0 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 6c 69 }.. }.. li
274e0 6e 65 20 3d 20 6c 69 6e 65 2d 3e 4e 65 78 74 3b ne = line->Next;
274f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 70 6f 6c . }. pol
27500 79 67 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 yg = geom->First
27510 50 6f 6c 79 67 6f 6e 3b 0a 20 20 20 20 77 68 69 Polygon;. whi
27520 6c 65 20 28 70 6f 6c 79 67 29 0a 20 20 20 20 20 le (polyg).
27530 20 7b 0a 09 20 20 69 66 20 28 74 79 70 65 20 3d {.. if (type =
27540 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 = GAIA_MULTIPOLY
27550 47 4f 4e 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 GON || type == G
27560 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
27570 45 43 54 49 4f 4e 0a 09 20 20 20 20 20 20 7c 7c ECTION.. ||
27580 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
27590 4c 54 49 50 4f 4c 59 47 4f 4e 5a 20 7c 7c 20 74 LTIPOLYGONZ || t
275a0 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
275b0 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 0a ETRYCOLLECTIONZ.
275c0 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d . || type =
275d0 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 = GAIA_MULTIPOLY
275e0 47 4f 4e 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 GONM || type ==
275f0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
27600 4c 45 43 54 49 4f 4e 4d 0a 09 20 20 20 20 20 20 LECTIONM..
27610 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
27620 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 0a 09 MULTIPOLYGONZM..
27630 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
27640 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
27650 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a 09 20 20 20 LLECTIONZM)..
27660 20 7b 0a 09 09 2a 70 74 72 20 3d 20 30 78 30 31 {...*ptr = 0x01
27670 3b 0a 09 09 2f 2a 20 69 74 27 73 20 61 20 63 6f ;.../* it's a co
27680 6c 6c 65 63 74 69 6f 6e 3a 20 74 68 65 20 43 4c llection: the CL
27690 41 53 53 20 54 59 50 45 20 66 6f 72 20 74 68 69 ASS TYPE for thi
276a0 73 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a 09 09 69 s element */...i
276b0 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f f (type == GAIA_
276c0 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 0a 09 09 MULTIPOLYGONZ...
276d0 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 || type == G
276e0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
276f0 45 43 54 49 4f 4e 5a 29 0a 09 09 20 20 20 20 67 ECTIONZ)... g
27700 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 aiaExport32 (ptr
27710 20 2b 20 31 2c 20 47 41 49 41 5f 50 4f 4c 59 47 + 1, GAIA_POLYG
27720 4f 4e 5a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 ONZ, 1, endian_a
27730 72 63 68 29 3b 0a 09 09 65 6c 73 65 20 69 66 20 rch);...else if
27740 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 (type == GAIA_MU
27750 4c 54 49 50 4f 4c 59 47 4f 4e 4d 0a 09 09 09 20 LTIPOLYGONM....
27760 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
27770 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
27780 4f 4e 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 ONM)... gaiaE
27790 78 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 xport32 (ptr + 1
277a0 2c 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 4d 2c , GAIA_POLYGONM,
277b0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
277c0 3b 0a 09 09 65 6c 73 65 20 69 66 20 28 74 79 70 ;...else if (typ
277d0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
277e0 4f 4c 59 47 4f 4e 5a 4d 0a 09 09 09 20 7c 7c 20 OLYGONZM.... ||
277f0 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
27800 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a METRYCOLLECTIONZ
27810 4d 29 0a 09 09 20 20 20 20 67 61 69 61 45 78 70 M)... gaiaExp
27820 6f 72 74 33 32 20 28 70 74 72 20 2b 20 31 2c 20 ort32 (ptr + 1,
27830 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 2c 20 GAIA_POLYGONZM,
27840 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
27850 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 67 61 ...else... ga
27860 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 20 iaExport32 (ptr
27870 2b 20 31 2c 20 47 41 49 41 5f 50 4f 4c 59 47 4f + 1, GAIA_POLYGO
27880 4e 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 N, 1, endian_arc
27890 68 29 3b 0a 09 09 70 74 72 20 2b 3d 20 35 3b 0a h);...ptr += 5;.
278a0 09 20 20 20 20 7d 0a 09 20 20 67 61 69 61 45 78 . }.. gaiaEx
278b0 70 6f 72 74 33 32 20 28 70 74 72 2c 20 70 6f 6c port32 (ptr, pol
278c0 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 yg->NumInteriors
278d0 20 2b 20 31 2c 20 31 2c 20 65 6e 64 69 61 6e 5f + 1, 1, endian_
278e0 61 72 63 68 29 3b 09 2f 2a 20 23 20 72 69 6e 67 arch);./* # ring
278f0 73 20 2a 2f 0a 09 20 20 72 6e 67 20 3d 20 70 6f s */.. rng = po
27900 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 lyg->Exterior;..
27910 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 gaiaExport32 (
27920 70 74 72 20 2b 20 34 2c 20 72 6e 67 2d 3e 50 6f ptr + 4, rng->Po
27930 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 6e 5f ints, 1, endian_
27940 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e arch);./* # poin
27950 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 ts - exterior ri
27960 6e 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 ng */.. ptr +=
27970 38 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 8;.. for (iv =
27980 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
27990 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 nts; iv++)..
279a0 7b 0a 09 09 69 66 20 28 74 79 70 65 20 3d 3d 20 {...if (type ==
279b0 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 20 7c 7c GAIA_POLYGONZ ||
279c0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
279d0 4c 54 49 50 4f 4c 59 47 4f 4e 5a 0a 09 09 20 20 LTIPOLYGONZ...
279e0 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 || type == GAI
279f0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
27a00 54 49 4f 4e 5a 29 0a 09 09 20 20 7b 0a 09 09 20 TIONZ)... {...
27a10 20 20 20 20 20 67 61 69 61 47 65 74 50 6f 69 6e gaiaGetPoin
27a20 74 58 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 tXYZ (rng->Coord
27a30 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 s, iv, &x, &y, &
27a40 7a 29 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 z);... }...else
27a50 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 if (type == GAI
27a60 41 5f 50 4f 4c 59 47 4f 4e 4d 20 7c 7c 20 74 79 A_POLYGONM || ty
27a70 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
27a80 50 4f 4c 59 47 4f 4e 4d 0a 09 09 09 20 7c 7c 20 POLYGONM.... ||
27a90 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f type == GAIA_GEO
27aa0 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d METRYCOLLECTIONM
27ab0 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
27ac0 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d 20 gaiaGetPointXYM
27ad0 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (rng->Coords, iv
27ae0 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a 09 , &x, &y, &m);..
27af0 09 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 . }...else if (
27b00 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 4c type == GAIA_POL
27b10 59 47 4f 4e 5a 4d 20 7c 7c 20 74 79 70 65 20 3d YGONZM || type =
27b20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 = GAIA_MULTIPOLY
27b30 47 4f 4e 5a 4d 0a 09 09 09 20 7c 7c 20 74 79 70 GONZM.... || typ
27b40 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
27b50 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a RYCOLLECTIONZM).
27b60 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 .. {... ga
27b70 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 iaGetPointXYZM (
27b80 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c rng->Coords, iv,
27b90 20 26 78 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 &x, &y, &z, &m)
27ba0 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 ;... }...else..
27bb0 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 . {... gai
27bc0 61 47 65 74 50 6f 69 6e 74 20 28 72 6e 67 2d 3e aGetPoint (rng->
27bd0 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 Coords, iv, &x,
27be0 26 79 29 3b 0a 09 09 20 20 7d 0a 09 09 67 61 69 &y);... }...gai
27bf0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
27c00 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
27c10 68 29 3b 09 2f 2a 20 58 20 2d 20 65 78 74 65 72 h);./* X - exter
27c20 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 67 61 ior ring */...ga
27c30 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 20 iaExport64 (ptr
27c40 2b 20 38 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 + 8, y, 1, endia
27c50 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d 20 n_arch);./* Y -
27c60 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f exterior ring */
27c70 0a 09 09 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 ...ptr += 16;...
27c80 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 if (type == GAIA
27c90 5f 50 4f 4c 59 47 4f 4e 5a 20 7c 7c 20 74 79 70 _POLYGONZ || typ
27ca0 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 e == GAIA_MULTIP
27cb0 4f 4c 59 47 4f 4e 5a 0a 09 09 20 20 20 20 7c 7c OLYGONZ... ||
27cc0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 type == GAIA_GE
27cd0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
27ce0 5a 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 Z)... {...
27cf0 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
27d00 74 72 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e tr, z, 1, endian
27d10 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2d 20 65 _arch);./* Z - e
27d20 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a xterior ring */.
27d30 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 38 .. ptr += 8
27d40 3b 0a 09 09 20 20 7d 0a 09 09 69 66 20 28 74 79 ;... }...if (ty
27d50 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 pe == GAIA_POLYG
27d60 4f 4e 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 ONM || type == G
27d70 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e AIA_MULTIPOLYGON
27d80 4d 0a 09 09 20 20 20 20 7c 7c 20 74 79 70 65 20 M... || type
27d90 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 == GAIA_GEOMETRY
27da0 43 4f 4c 4c 45 43 54 49 4f 4e 4d 29 0a 09 09 20 COLLECTIONM)...
27db0 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 {... gaiaE
27dc0 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 6d 2c xport64 (ptr, m,
27dd0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
27de0 3b 09 2f 2a 20 4d 20 2d 20 65 78 74 65 72 69 6f ;./* M - exterio
27df0 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 r ring */...
27e00 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 20 20 ptr += 8;...
27e10 7d 0a 09 09 69 66 20 28 74 79 70 65 20 3d 3d 20 }...if (type ==
27e20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 4d 20 7c GAIA_POLYGONZM |
27e30 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
27e40 55 4c 54 49 50 4f 4c 59 47 4f 4e 5a 4d 0a 09 09 ULTIPOLYGONZM...
27e50 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 || type == G
27e60 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
27e70 45 43 54 49 4f 4e 5a 4d 29 0a 09 09 20 20 7b 0a ECTIONZM)... {.
27e80 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f .. gaiaExpo
27e90 72 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 31 2c rt64 (ptr, z, 1,
27ea0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
27eb0 2a 20 5a 20 2d 20 65 78 74 65 72 69 6f 72 20 72 * Z - exterior r
27ec0 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 ing */... g
27ed0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
27ee0 20 2b 20 38 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 + 8, m, 1, endi
27ef0 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2d an_arch);./* M -
27f00 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a exterior ring *
27f10 2f 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d /... ptr +=
27f20 20 31 36 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 16;... }..
27f30 7d 0a 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 }.. for (ib = 0
27f40 3b 20 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 ; ib < polyg->Nu
27f50 6d 49 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b mInteriors; ib++
27f60 29 0a 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d ).. {...rng =
27f70 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 polyg->Interior
27f80 73 20 2b 20 69 62 3b 0a 09 09 67 61 69 61 45 78 s + ib;...gaiaEx
27f90 70 6f 72 74 33 32 20 28 70 74 72 2c 20 72 6e 67 port32 (ptr, rng
27fa0 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 ->Points, 1, end
27fb0 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 ian_arch);./* #
27fc0 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 6f points - interio
27fd0 72 20 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 r ring */...ptr
27fe0 2b 3d 20 34 3b 0a 09 09 66 6f 72 20 28 69 76 20 += 4;...for (iv
27ff0 3d 20 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 = 0; iv < rng->P
28000 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 oints; iv++)...
28010 20 7b 0a 09 09 20 20 20 20 20 20 69 66 20 28 74 {... if (t
28020 79 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 ype == GAIA_POLY
28030 47 4f 4e 5a 20 7c 7c 20 74 79 70 65 20 3d 3d 20 GONZ || type ==
28040 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f GAIA_MULTIPOLYGO
28050 4e 5a 0a 09 09 09 20 20 7c 7c 20 74 79 70 65 20 NZ.... || type
28060 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 == GAIA_GEOMETRY
28070 43 4f 4c 4c 45 43 54 49 4f 4e 5a 29 0a 09 09 09 COLLECTIONZ)....
28080 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 {.... gaiaGet
28090 50 6f 69 6e 74 58 59 5a 20 28 72 6e 67 2d 3e 43 PointXYZ (rng->C
280a0 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
280b0 79 2c 20 26 7a 29 3b 0a 09 09 09 7d 0a 09 09 20 y, &z);....}...
280c0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 else if (ty
280d0 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 pe == GAIA_POLYG
280e0 4f 4e 4d 0a 09 09 09 20 20 20 20 20 20 20 7c 7c ONM.... ||
280f0 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
28100 4c 54 49 50 4f 4c 59 47 4f 4e 4d 0a 09 09 09 20 LTIPOLYGONM....
28110 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
28120 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
28130 4c 4c 45 43 54 49 4f 4e 4d 29 0a 09 09 09 7b 0a LLECTIONM)....{.
28140 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 6f ... gaiaGetPo
28150 69 6e 74 58 59 4d 20 28 72 6e 67 2d 3e 43 6f 6f intXYM (rng->Coo
28160 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c rds, iv, &x, &y,
28170 20 26 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 20 20 &m);....}...
28180 20 20 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 else if (type
28190 20 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e == GAIA_POLYGON
281a0 5a 4d 0a 09 09 09 20 20 20 20 20 20 20 7c 7c 20 ZM.... ||
281b0 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
281c0 54 49 50 4f 4c 59 47 4f 4e 5a 4d 0a 09 09 09 20 TIPOLYGONZM....
281d0 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
281e0 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
281f0 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a 09 09 09 7b LLECTIONZM)....{
28200 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 .... gaiaGetP
28210 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e 43 ointXYZM (rng->C
28220 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
28230 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 09 7d y, &z, &m);....}
28240 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a 09 09 ... else...
28250 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 .{.... gaiaGe
28260 74 50 6f 69 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f tPoint (rng->Coo
28270 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 rds, iv, &x, &y)
28280 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 67 ;....}... g
28290 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
282a0 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 , x, 1, endian_a
282b0 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 69 6e 74 rch);./* X - int
282c0 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 erior ring */...
282d0 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
282e0 36 34 20 28 70 74 72 20 2b 20 38 2c 20 79 2c 20 64 (ptr + 8, y,
282f0 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
28300 09 2f 2a 20 59 20 2d 20 69 6e 74 65 72 69 6f 72 ./* Y - interior
28310 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 ring */...
28320 20 70 74 72 20 2b 3d 20 31 36 3b 0a 09 09 20 20 ptr += 16;...
28330 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 if (type ==
28340 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 5a 20 7c 7c GAIA_POLYGONZ ||
28350 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 type == GAIA_MU
28360 4c 54 49 50 4f 4c 59 47 4f 4e 5a 0a 09 09 09 20 LTIPOLYGONZ....
28370 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
28380 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
28390 49 4f 4e 5a 29 0a 09 09 09 7b 0a 09 09 09 20 20 IONZ)....{....
283a0 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 gaiaExport64 (
283b0 70 74 72 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 ptr, z, 1, endia
283c0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2d 20 n_arch);./* Z -
283d0 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f exterior ring */
283e0 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 38 .... ptr += 8
283f0 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 69 ;....}... i
28400 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 5f f (type == GAIA_
28410 50 4f 4c 59 47 4f 4e 4d 20 7c 7c 20 74 79 70 65 POLYGONM || type
28420 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f == GAIA_MULTIPO
28430 4c 59 47 4f 4e 4d 0a 09 09 09 20 20 7c 7c 20 74 LYGONM.... || t
28440 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
28450 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 4d 29 ETRYCOLLECTIONM)
28460 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 ....{.... gai
28470 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
28480 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 m, 1, endian_arc
28490 68 29 3b 09 2f 2a 20 4d 20 2d 20 65 78 74 65 72 h);./* M - exter
284a0 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 09 20 ior ring */....
284b0 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 ptr += 8;....
284c0 7d 0a 09 09 20 20 20 20 20 20 69 66 20 28 74 79 }... if (ty
284d0 70 65 20 3d 3d 20 47 41 49 41 5f 50 4f 4c 59 47 pe == GAIA_POLYG
284e0 4f 4e 5a 4d 20 7c 7c 20 74 79 70 65 20 3d 3d 20 ONZM || type ==
284f0 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f GAIA_MULTIPOLYGO
28500 4e 5a 4d 0a 09 09 09 20 20 7c 7c 20 74 79 70 65 NZM.... || type
28510 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 == GAIA_GEOMETR
28520 59 43 4f 4c 4c 45 43 54 49 4f 4e 5a 4d 29 0a 09 YCOLLECTIONZM)..
28530 09 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 45 ..{.... gaiaE
28540 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 7a 2c xport64 (ptr, z,
28550 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
28560 3b 09 2f 2a 20 5a 20 2d 20 65 78 74 65 72 69 6f ;./* Z - exterio
28570 72 20 72 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 r ring */....
28580 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
28590 74 72 20 2b 20 38 2c 20 6d 2c 20 31 2c 20 65 6e tr + 8, m, 1, en
285a0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d dian_arch);./* M
285b0 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e 67 - exterior ring
285c0 20 2a 2f 0a 09 09 09 20 20 20 20 70 74 72 20 2b */.... ptr +
285d0 3d 20 31 36 3b 0a 09 09 09 7d 0a 09 09 20 20 7d = 16;....}... }
285e0 0a 09 20 20 20 20 7d 0a 09 20 20 70 6f 6c 79 67 .. }.. polyg
285f0 20 3d 20 70 6f 6c 79 67 2d 3e 4e 65 78 74 3b 0a = polyg->Next;.
28600 20 20 20 20 20 20 7d 0a 7d 0a 0a 47 41 49 41 47 }.}..GAIAG
28610 45 4f 5f 44 45 43 4c 41 52 45 20 69 6e 74 0a 67 EO_DECLARE int.g
28620 61 69 61 45 77 6b 62 47 65 74 50 6f 69 6e 74 20 aiaEwkbGetPoint
28630 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
28640 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 20 geom, unsigned
28650 63 68 61 72 20 2a 62 6c 6f 62 2c 0a 09 09 20 20 char *blob,...
28660 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 int offset, int
28670 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e 74 20 65 blob_size, int e
28680 6e 64 69 61 6e 2c 20 69 6e 74 20 65 6e 64 69 61 ndian, int endia
28690 6e 5f 61 72 63 68 2c 0a 09 09 20 20 69 6e 74 20 n_arch,... int
286a0 64 69 6d 73 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 dims).{./* decod
286b0 65 73 20 61 20 50 4f 49 4e 54 20 66 72 6f 6d 20 es a POINT from
286c0 50 6f 73 74 47 49 53 20 45 57 4b 42 20 62 69 6e PostGIS EWKB bin
286d0 61 72 79 20 47 45 4f 4d 45 54 52 59 20 2a 2f 0a ary GEOMETRY */.
286e0 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 double x;.
286f0 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 double y;.
28700 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f double z;. do
28710 75 62 6c 65 20 6d 3b 0a 20 20 20 20 73 77 69 74 uble m;. swit
28720 63 68 20 28 64 69 6d 73 29 0a 20 20 20 20 20 20 ch (dims).
28730 7b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 {. case GAI
28740 41 5f 58 59 5f 5a 5f 4d 3a 0a 09 20 20 69 66 20 A_XY_Z_M:.. if
28750 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f 66 66 (blob_size < off
28760 73 65 74 20 2b 20 33 32 29 0a 09 20 20 20 20 20 set + 32)..
28770 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 62 return -1;.. b
28780 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
28790 20 47 41 49 41 5f 58 59 5f 5a 3a 0a 20 20 20 20 GAIA_XY_Z:.
287a0 20 20 63 61 73 65 20 47 41 49 41 5f 58 59 5f 4d case GAIA_XY_M
287b0 3a 0a 09 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 :.. if (blob_si
287c0 7a 65 20 3c 20 6f 66 66 73 65 74 20 2b 20 32 34 ze < offset + 24
287d0 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 ).. return
287e0 2d 31 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 -1;.. break;.
287f0 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 20 default:..
28800 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 if (blob_size <
28810 6f 66 66 73 65 74 20 2b 20 31 36 29 0a 09 20 20 offset + 16)..
28820 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 return -1;..
28830 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d break;. }
28840 0a 20 20 20 20 78 20 3d 20 67 61 69 61 49 6d 70 . x = gaiaImp
28850 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b 20 6f 66 ort64 (blob + of
28860 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 6e fset, endian, en
28870 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
28880 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 20 20 20 offset += 8;.
28890 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 y = gaiaImport6
288a0 34 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 4 (blob + offset
288b0 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e , endian, endian
288c0 5f 61 72 63 68 29 3b 0a 20 20 20 20 6f 66 66 73 _arch);. offs
288d0 65 74 20 2b 3d 20 38 3b 0a 20 20 20 20 69 66 20 et += 8;. if
288e0 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 (dims == GAIA_XY
288f0 5f 5a 5f 4d 29 0a 20 20 20 20 20 20 7b 0a 09 20 _Z_M). {..
28900 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 z = gaiaImport6
28910 34 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 4 (blob + offset
28920 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e , endian, endian
28930 5f 61 72 63 68 29 3b 0a 09 20 20 6f 66 66 73 65 _arch);.. offse
28940 74 20 2b 3d 20 38 3b 0a 09 20 20 6d 20 3d 20 67 t += 8;.. m = g
28950 61 69 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f aiaImport64 (blo
28960 62 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 b + offset, endi
28970 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 an, endian_arch)
28980 3b 0a 09 20 20 6f 66 66 73 65 74 20 2b 3d 20 38 ;.. offset += 8
28990 3b 0a 09 20 20 67 61 69 61 41 64 64 50 6f 69 6e ;.. gaiaAddPoin
289a0 74 54 6f 47 65 6f 6d 43 6f 6c 6c 58 59 5a 4d 20 tToGeomCollXYZM
289b0 28 67 65 6f 6d 2c 20 78 2c 20 79 2c 20 7a 2c 20 (geom, x, y, z,
289c0 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 m);. }.
289d0 65 6c 73 65 20 69 66 20 28 64 69 6d 73 20 3d 3d else if (dims ==
289e0 20 47 41 49 41 5f 58 59 5f 5a 29 0a 20 20 20 20 GAIA_XY_Z).
289f0 20 20 7b 0a 09 20 20 7a 20 3d 20 67 61 69 61 49 {.. z = gaiaI
28a00 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b 20 mport64 (blob +
28a10 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 offset, endian,
28a20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
28a30 20 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 20 offset += 8;..
28a40 20 67 61 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 gaiaAddPointToG
28a50 65 6f 6d 43 6f 6c 6c 58 59 5a 20 28 67 65 6f 6d eomCollXYZ (geom
28a60 2c 20 78 2c 20 79 2c 20 7a 29 3b 0a 20 20 20 20 , x, y, z);.
28a70 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
28a80 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 (dims == GAIA_XY
28a90 5f 4d 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 6d _M). {.. m
28aa0 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
28ab0 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 2c 20 (blob + offset,
28ac0 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 endian, endian_a
28ad0 72 63 68 29 3b 0a 09 20 20 6f 66 66 73 65 74 20 rch);.. offset
28ae0 2b 3d 20 38 3b 0a 09 20 20 67 61 69 61 41 64 64 += 8;.. gaiaAdd
28af0 50 6f 69 6e 74 54 6f 47 65 6f 6d 43 6f 6c 6c 58 PointToGeomCollX
28b00 59 4d 20 28 67 65 6f 6d 2c 20 78 2c 20 79 2c 20 YM (geom, x, y,
28b10 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 m);. }.
28b20 65 6c 73 65 0a 09 67 61 69 61 41 64 64 50 6f 69 else..gaiaAddPoi
28b30 6e 74 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 ntToGeomColl (ge
28b40 6f 6d 2c 20 78 2c 20 79 29 3b 0a 20 20 20 20 72 om, x, y);. r
28b50 65 74 75 72 6e 20 6f 66 66 73 65 74 3b 0a 7d 0a eturn offset;.}.
28b60 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 45 .GAIAGEO_DECLARE
28b70 20 69 6e 74 0a 67 61 69 61 45 77 6b 62 47 65 74 int.gaiaEwkbGet
28b80 4c 69 6e 65 73 74 72 69 6e 67 20 28 67 61 69 61 Linestring (gaia
28b90 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d GeomCollPtr geom
28ba0 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char
28bb0 2a 62 6c 6f 62 2c 0a 09 09 20 20 20 20 20 20 20 *blob,...
28bc0 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 int offset, int
28bd0 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e 74 20 65 blob_size, int e
28be0 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 20 20 20 ndian,...
28bf0 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c int endian_arch,
28c00 20 69 6e 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a 20 int dims).{./*
28c10 64 65 63 6f 64 65 73 20 61 20 4c 49 4e 45 53 54 decodes a LINEST
28c20 52 49 4e 47 20 66 72 6f 6d 20 50 6f 73 74 47 49 RING from PostGI
28c30 53 20 62 69 6e 61 72 79 20 47 45 4f 4d 45 54 52 S binary GEOMETR
28c40 59 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 70 6f Y */. int npo
28c50 69 6e 74 73 3b 0a 20 20 20 20 69 6e 74 20 69 76 ints;. int iv
28c60 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 78 3b 0a ;. double x;.
28c70 20 20 20 20 64 6f 75 62 6c 65 20 79 3b 0a 20 20 double y;.
28c80 20 20 64 6f 75 62 6c 65 20 7a 3b 0a 20 20 20 20 double z;.
28c90 64 6f 75 62 6c 65 20 6d 3b 0a 20 20 20 20 67 61 double m;. ga
28ca0 69 61 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 iaLinestringPtr
28cb0 6c 6e 3b 0a 20 20 20 20 69 66 20 28 62 6c 6f 62 ln;. if (blob
28cc0 5f 73 69 7a 65 20 3c 20 6f 66 66 73 65 74 20 2b _size < offset +
28cd0 20 34 29 0a 09 72 65 74 75 72 6e 20 2d 31 3b 0a 4)..return -1;.
28ce0 20 20 20 20 6e 70 6f 69 6e 74 73 20 3d 20 67 61 npoints = ga
28cf0 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 iaImport32 (blob
28d00 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 + offset, endia
28d10 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b n, endian_arch);
28d20 0a 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 34 . offset += 4
28d30 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28 64 69 ;. switch (di
28d40 6d 73 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 ms). {.
28d50 20 20 63 61 73 65 20 47 41 49 41 5f 58 59 5f 5a case GAIA_XY_Z
28d60 5f 4d 3a 0a 09 20 20 69 66 20 28 62 6c 6f 62 5f _M:.. if (blob_
28d70 73 69 7a 65 20 3c 20 6f 66 66 73 65 74 20 2b 20 size < offset +
28d80 28 33 32 20 2a 20 6e 70 6f 69 6e 74 73 29 29 0a (32 * npoints)).
28d90 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 . return -1
28da0 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
28db0 20 20 63 61 73 65 20 47 41 49 41 5f 58 59 5f 5a case GAIA_XY_Z
28dc0 3a 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 :. case GAI
28dd0 41 5f 58 59 5f 4d 3a 0a 09 20 20 69 66 20 28 62 A_XY_M:.. if (b
28de0 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f 66 66 73 65 lob_size < offse
28df0 74 20 2b 20 28 32 34 20 2a 20 6e 70 6f 69 6e 74 t + (24 * npoint
28e00 73 29 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 s)).. retur
28e10 6e 20 2d 31 3b 0a 09 20 20 62 72 65 61 6b 3b 0a n -1;.. break;.
28e20 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 default:..
28e30 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 if (blob_size
28e40 3c 20 6f 66 66 73 65 74 20 2b 20 28 31 36 20 2a < offset + (16 *
28e50 20 6e 70 6f 69 6e 74 73 29 29 0a 09 20 20 20 20 npoints))..
28e60 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 return -1;..
28e70 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 break;. }.
28e80 20 20 20 6c 6e 20 3d 20 67 61 69 61 41 64 64 4c ln = gaiaAddL
28e90 69 6e 65 73 74 72 69 6e 67 54 6f 47 65 6f 6d 43 inestringToGeomC
28ea0 6f 6c 6c 20 28 67 65 6f 6d 2c 20 6e 70 6f 69 6e oll (geom, npoin
28eb0 74 73 29 3b 0a 20 20 20 20 66 6f 72 20 28 69 76 ts);. for (iv
28ec0 20 3d 20 30 3b 20 69 76 20 3c 20 6e 70 6f 69 6e = 0; iv < npoin
28ed0 74 73 3b 20 69 76 2b 2b 29 0a 20 20 20 20 20 20 ts; iv++).
28ee0 7b 0a 09 20 20 78 20 3d 20 67 61 69 61 49 6d 70 {.. x = gaiaImp
28ef0 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b 20 6f 66 ort64 (blob + of
28f00 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 6e fset, endian, en
28f10 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 6f dian_arch);.. o
28f20 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 20 20 79 ffset += 8;.. y
28f30 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
28f40 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 2c 20 (blob + offset,
28f50 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 endian, endian_a
28f60 72 63 68 29 3b 0a 09 20 20 6f 66 66 73 65 74 20 rch);.. offset
28f70 2b 3d 20 38 3b 0a 09 20 20 69 66 20 28 64 69 6d += 8;.. if (dim
28f80 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d s == GAIA_XY_Z_M
28f90 29 0a 09 20 20 20 20 7b 0a 09 09 7a 20 3d 20 67 ).. {...z = g
28fa0 61 69 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f aiaImport64 (blo
28fb0 62 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 b + offset, endi
28fc0 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 an, endian_arch)
28fd0 3b 0a 09 09 6f 66 66 73 65 74 20 2b 3d 20 38 3b ;...offset += 8;
28fe0 0a 09 09 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 ...m = gaiaImpor
28ff0 74 36 34 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 t64 (blob + offs
29000 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 et, endian, endi
29010 61 6e 5f 61 72 63 68 29 3b 0a 09 09 6f 66 66 73 an_arch);...offs
29020 65 74 20 2b 3d 20 38 3b 0a 09 09 67 61 69 61 53 et += 8;...gaiaS
29030 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 6c 6e 2d etPointXYZM (ln-
29040 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 >Coords, iv, x,
29050 79 2c 20 7a 2c 20 6d 29 3b 0a 09 20 20 20 20 7d y, z, m);.. }
29060 0a 09 20 20 65 6c 73 65 20 69 66 20 28 64 69 6d .. else if (dim
29070 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a s == GAIA_XY_Z).
29080 09 20 20 20 20 7b 0a 09 09 7a 20 3d 20 67 61 69 . {...z = gai
29090 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 aImport64 (blob
290a0 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e + offset, endian
290b0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
290c0 09 09 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 ..offset += 8;..
290d0 09 67 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a .gaiaSetPointXYZ
290e0 20 28 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (ln->Coords, iv
290f0 2c 20 78 2c 20 79 2c 20 7a 29 3b 0a 09 20 20 20 , x, y, z);..
29100 20 7d 0a 09 20 20 65 6c 73 65 20 69 66 20 28 64 }.. else if (d
29110 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d ims == GAIA_XY_M
29120 29 0a 09 20 20 20 20 7b 0a 09 09 6d 20 3d 20 67 ).. {...m = g
29130 61 69 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f aiaImport64 (blo
29140 62 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 b + offset, endi
29150 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 an, endian_arch)
29160 3b 0a 09 09 6f 66 66 73 65 74 20 2b 3d 20 38 3b ;...offset += 8;
29170 0a 09 09 67 61 69 61 53 65 74 50 6f 69 6e 74 58 ...gaiaSetPointX
29180 59 4d 20 28 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 YM (ln->Coords,
29190 69 76 2c 20 78 2c 20 79 2c 20 6d 29 3b 0a 09 20 iv, x, y, m);..
291a0 20 20 20 7d 0a 09 20 20 65 6c 73 65 0a 09 20 20 }.. else..
291b0 20 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e 74 gaiaSetPoint
291c0 20 28 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (ln->Coords, iv
291d0 2c 20 78 2c 20 79 29 3b 0a 20 20 20 20 20 20 7d , x, y);. }
291e0 0a 20 20 20 20 72 65 74 75 72 6e 20 6f 66 66 73 . return offs
291f0 65 74 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 et;.}..GAIAGEO_D
29200 45 43 4c 41 52 45 20 69 6e 74 0a 67 61 69 61 45 ECLARE int.gaiaE
29210 77 6b 62 47 65 74 50 6f 6c 79 67 6f 6e 20 28 67 wkbGetPolygon (g
29220 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 aiaGeomCollPtr g
29230 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 eom, unsigned ch
29240 61 72 20 2a 62 6c 6f 62 2c 0a 09 09 20 20 20 20 ar *blob,...
29250 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 int offset, int
29260 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e 74 20 65 blob_size, int e
29270 6e 64 69 61 6e 2c 0a 09 09 20 20 20 20 69 6e 74 ndian,... int
29280 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 69 6e endian_arch, in
29290 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a 20 64 65 63 t dims).{./* dec
292a0 6f 64 65 73 20 61 20 50 4f 4c 59 47 4f 4e 20 66 odes a POLYGON f
292b0 72 6f 6d 20 50 6f 73 74 47 49 53 20 62 69 6e 61 rom PostGIS bina
292c0 72 79 20 47 45 4f 4d 45 54 52 59 20 2a 2f 0a 20 ry GEOMETRY */.
292d0 20 20 20 69 6e 74 20 72 69 6e 67 73 3b 0a 20 20 int rings;.
292e0 20 20 69 6e 74 20 6e 70 6f 69 6e 74 73 3b 0a 20 int npoints;.
292f0 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 20 69 int iv;. i
29300 6e 74 20 69 62 3b 0a 20 20 20 20 64 6f 75 62 6c nt ib;. doubl
29310 65 20 78 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 e x;. double
29320 79 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 7a 3b y;. double z;
29330 0a 20 20 20 20 64 6f 75 62 6c 65 20 6d 3b 0a 20 . double m;.
29340 20 20 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 gaiaPolygonPt
29350 72 20 70 6f 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a r polyg = NULL;.
29360 20 20 20 20 67 61 69 61 52 69 6e 67 50 74 72 20 gaiaRingPtr
29370 72 6e 67 3b 0a 20 20 20 20 69 66 20 28 62 6c 6f rng;. if (blo
29380 62 5f 73 69 7a 65 20 3c 20 6f 66 66 73 65 74 20 b_size < offset
29390 2b 20 34 29 0a 09 72 65 74 75 72 6e 20 2d 31 3b + 4)..return -1;
293a0 0a 20 20 20 20 72 69 6e 67 73 20 3d 20 67 61 69 . rings = gai
293b0 61 49 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 aImport32 (blob
293c0 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e + offset, endian
293d0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
293e0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 34 3b offset += 4;
293f0 0a 20 20 20 20 66 6f 72 20 28 69 62 20 3d 20 30 . for (ib = 0
29400 3b 20 69 62 20 3c 20 72 69 6e 67 73 3b 20 69 62 ; ib < rings; ib
29410 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 ++). {.. i
29420 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f f (blob_size < o
29430 66 66 73 65 74 20 2b 20 34 29 0a 09 20 20 20 20 ffset + 4)..
29440 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 return -1;..
29450 6e 70 6f 69 6e 74 73 20 3d 20 67 61 69 61 49 6d npoints = gaiaIm
29460 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 2b 20 6f port32 (blob + o
29470 66 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 ffset, endian, e
29480 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 ndian_arch);..
29490 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 09 20 20 offset += 4;..
294a0 73 77 69 74 63 68 20 28 64 69 6d 73 29 0a 09 20 switch (dims)..
294b0 20 20 20 7b 0a 09 20 20 20 20 63 61 73 65 20 47 {.. case G
294c0 41 49 41 5f 58 59 5f 5a 5f 4d 3a 0a 09 09 69 66 AIA_XY_Z_M:...if
294d0 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f 66 (blob_size < of
294e0 66 73 65 74 20 2b 20 28 33 32 20 2a 20 6e 70 6f fset + (32 * npo
294f0 69 6e 74 73 29 29 0a 09 09 20 20 20 20 72 65 74 ints))... ret
29500 75 72 6e 20 2d 31 3b 0a 09 09 62 72 65 61 6b 3b urn -1;...break;
29510 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
29520 58 59 5f 5a 3a 0a 09 20 20 20 20 63 61 73 65 20 XY_Z:.. case
29530 47 41 49 41 5f 58 59 5f 4d 3a 0a 09 09 69 66 20 GAIA_XY_M:...if
29540 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f 66 66 (blob_size < off
29550 73 65 74 20 2b 20 28 32 34 20 2a 20 6e 70 6f 69 set + (24 * npoi
29560 6e 74 73 29 29 0a 09 09 20 20 20 20 72 65 74 75 nts))... retu
29570 72 6e 20 2d 31 3b 0a 09 09 62 72 65 61 6b 3b 0a rn -1;...break;.
29580 09 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 09 09 . default:...
29590 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 if (blob_size <
295a0 6f 66 66 73 65 74 20 2b 20 28 31 36 20 2a 20 6e offset + (16 * n
295b0 70 6f 69 6e 74 73 29 29 0a 09 09 20 20 20 20 72 points))... r
295c0 65 74 75 72 6e 20 2d 31 3b 0a 09 09 62 72 65 61 eturn -1;...brea
295d0 6b 3b 0a 09 20 20 20 20 7d 0a 09 20 20 69 66 20 k;.. }.. if
295e0 28 69 62 20 3d 3d 20 30 29 0a 09 20 20 20 20 7b (ib == 0).. {
295f0 0a 09 09 70 6f 6c 79 67 20 3d 20 67 61 69 61 41 ...polyg = gaiaA
29600 64 64 50 6f 6c 79 67 6f 6e 54 6f 47 65 6f 6d 43 ddPolygonToGeomC
29610 6f 6c 6c 20 28 67 65 6f 6d 2c 20 6e 70 6f 69 6e oll (geom, npoin
29620 74 73 2c 20 72 69 6e 67 73 20 2d 20 31 29 3b 0a ts, rings - 1);.
29630 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 ..rng = polyg->E
29640 78 74 65 72 69 6f 72 3b 0a 09 20 20 20 20 7d 0a xterior;.. }.
29650 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 72 . else.. r
29660 6e 67 20 3d 20 67 61 69 61 41 64 64 49 6e 74 65 ng = gaiaAddInte
29670 72 69 6f 72 52 69 6e 67 20 28 70 6f 6c 79 67 2c riorRing (polyg,
29680 20 69 62 20 2d 20 31 2c 20 6e 70 6f 69 6e 74 73 ib - 1, npoints
29690 29 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 );.. for (iv =
296a0 30 3b 20 69 76 20 3c 20 6e 70 6f 69 6e 74 73 3b 0; iv < npoints;
296b0 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 iv++).. {...
296c0 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 x = gaiaImport64
296d0 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 2c (blob + offset,
296e0 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f endian, endian_
296f0 61 72 63 68 29 3b 0a 09 09 6f 66 66 73 65 74 20 arch);...offset
29700 2b 3d 20 38 3b 0a 09 09 79 20 3d 20 67 61 69 61 += 8;...y = gaia
29710 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b Import64 (blob +
29720 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c offset, endian,
29730 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
29740 09 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 09 .offset += 8;...
29750 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 if (dims == GAIA
29760 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 7b 0a 09 _XY_Z_M)... {..
29770 09 20 20 20 20 20 20 7a 20 3d 20 67 61 69 61 49 . z = gaiaI
29780 6d 70 6f 72 74 36 34 20 28 62 6c 6f 62 20 2b 20 mport64 (blob +
29790 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 offset, endian,
297a0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
297b0 20 20 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 offset +=
297c0 38 3b 0a 09 09 20 20 20 20 20 20 6d 20 3d 20 67 8;... m = g
297d0 61 69 61 49 6d 70 6f 72 74 36 34 20 28 62 6c 6f aiaImport64 (blo
297e0 62 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 b + offset, endi
297f0 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 an, endian_arch)
29800 3b 0a 09 09 20 20 20 20 20 20 6f 66 66 73 65 74 ;... offset
29810 20 2b 3d 20 38 3b 0a 09 09 20 20 20 20 20 20 67 += 8;... g
29820 61 69 61 53 65 74 50 6f 69 6e 74 58 59 5a 4d 20 aiaSetPointXYZM
29830 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 (rng->Coords, iv
29840 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 , x, y, z, m);..
29850 09 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 . }...else if (
29860 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f dims == GAIA_XY_
29870 5a 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 Z)... {...
29880 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 z = gaiaImport6
29890 34 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 4 (blob + offset
298a0 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e , endian, endian
298b0 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 20 _arch);...
298c0 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 09 20 offset += 8;...
298d0 20 20 20 20 20 67 61 69 61 53 65 74 50 6f 69 6e gaiaSetPoin
298e0 74 58 59 5a 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 tXYZ (rng->Coord
298f0 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a 29 3b s, iv, x, y, z);
29900 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 ... }...else if
29910 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 (dims == GAIA_X
29920 59 5f 4d 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 Y_M)... {...
29930 20 20 20 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 m = gaiaImpor
29940 74 36 34 20 28 62 6c 6f 62 20 2b 20 6f 66 66 73 t64 (blob + offs
29950 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 et, endian, endi
29960 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 an_arch);...
29970 20 20 6f 66 66 73 65 74 20 2b 3d 20 38 3b 0a 09 offset += 8;..
29980 09 20 20 20 20 20 20 67 61 69 61 53 65 74 50 6f . gaiaSetPo
29990 69 6e 74 58 59 4d 20 28 72 6e 67 2d 3e 43 6f 6f intXYM (rng->Coo
299a0 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 6d rds, iv, x, y, m
299b0 29 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a );... }...else.
299c0 09 09 20 20 20 20 67 61 69 61 53 65 74 50 6f 69 .. gaiaSetPoi
299d0 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c nt (rng->Coords,
299e0 20 69 76 2c 20 78 2c 20 79 29 3b 0a 09 20 20 20 iv, x, y);..
299f0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 72 }. }. r
29a00 65 74 75 72 6e 20 6f 66 66 73 65 74 3b 0a 7d 0a eturn offset;.}.
29a10 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 45 .GAIAGEO_DECLARE
29a20 20 69 6e 74 0a 67 61 69 61 45 77 6b 62 47 65 74 int.gaiaEwkbGet
29a30 4d 75 6c 74 69 50 6f 69 6e 74 20 28 67 61 69 61 MultiPoint (gaia
29a40 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d GeomCollPtr geom
29a50 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 , unsigned char
29a60 2a 62 6c 6f 62 2c 0a 09 09 20 20 20 20 20 20 20 *blob,...
29a70 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e 74 20 int offset, int
29a80 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e 74 20 65 blob_size, int e
29a90 6e 64 69 61 6e 2c 20 69 6e 74 20 65 6e 64 69 61 ndian, int endia
29aa0 6e 5f 61 72 63 68 2c 0a 09 09 20 20 20 20 20 20 n_arch,...
29ab0 20 69 6e 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a 20 int dims).{./*
29ac0 64 65 63 6f 64 65 73 20 61 20 4d 55 4c 54 49 50 decodes a MULTIP
29ad0 4f 49 4e 54 20 66 72 6f 6d 20 50 6f 73 74 47 49 OINT from PostGI
29ae0 53 20 45 57 4b 42 20 62 69 6e 61 72 79 20 47 45 S EWKB binary GE
29af0 4f 4d 45 54 52 59 20 2a 2f 0a 20 20 20 20 69 6e OMETRY */. in
29b00 74 20 65 6e 74 69 74 69 65 73 3b 0a 20 20 20 20 t entities;.
29b10 69 6e 74 20 74 79 70 65 3b 0a 20 20 20 20 75 6e int type;. un
29b20 73 69 67 6e 65 64 20 63 68 61 72 20 78 74 79 70 signed char xtyp
29b30 65 5b 34 5d 3b 0a 20 20 20 20 69 6e 74 20 69 65 e[4];. int ie
29b40 3b 0a 20 20 20 20 69 6e 74 20 6f 66 66 3b 0a 20 ;. int off;.
29b50 20 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 if (blob_size
29b60 20 3c 20 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 < offset + 4)..
29b70 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 65 return -1;. e
29b80 6e 74 69 74 69 65 73 20 3d 20 67 61 69 61 49 6d ntities = gaiaIm
29b90 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 2b 20 6f port32 (blob + o
29ba0 66 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 ffset, endian, e
29bb0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
29bc0 20 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 offset += 4;.
29bd0 20 20 66 6f 72 20 28 69 65 20 3d 20 30 3b 20 69 for (ie = 0; i
29be0 65 20 3c 20 65 6e 74 69 74 69 65 73 3b 20 69 65 e < entities; ie
29bf0 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 ++). {.. i
29c00 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f f (blob_size < o
29c10 66 66 73 65 74 20 2b 20 35 29 0a 09 20 20 20 20 ffset + 5)..
29c20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 return -1;..
29c30 6d 65 6d 63 70 79 20 28 78 74 79 70 65 2c 20 62 memcpy (xtype, b
29c40 6c 6f 62 20 2b 20 6f 66 66 73 65 74 20 2b 20 31 lob + offset + 1
29c50 2c 20 34 29 3b 0a 09 20 20 69 66 20 28 65 6e 64 , 4);.. if (end
29c60 69 61 6e 29 0a 09 20 20 20 20 20 20 78 74 79 70 ian).. xtyp
29c70 65 5b 33 5d 20 3d 20 30 78 30 30 3b 0a 09 20 20 e[3] = 0x00;..
29c80 65 6c 73 65 0a 09 20 20 20 20 20 20 78 74 79 70 else.. xtyp
29c90 65 5b 30 5d 20 3d 20 30 78 30 30 3b 0a 09 20 20 e[0] = 0x00;..
29ca0 74 79 70 65 20 3d 20 67 61 69 61 49 6d 70 6f 72 type = gaiaImpor
29cb0 74 33 32 20 28 78 74 79 70 65 2c 20 65 6e 64 69 t32 (xtype, endi
29cc0 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 an, endian_arch)
29cd0 3b 0a 09 20 20 6f 66 66 73 65 74 20 2b 3d 20 35 ;.. offset += 5
29ce0 3b 0a 09 20 20 69 66 20 28 74 79 70 65 20 21 3d ;.. if (type !=
29cf0 20 47 41 49 41 5f 50 4f 49 4e 54 29 0a 09 20 20 GAIA_POINT)..
29d00 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 return -1;..
29d10 20 20 6f 66 66 20 3d 0a 09 20 20 20 20 20 20 67 off =.. g
29d20 61 69 61 45 77 6b 62 47 65 74 50 6f 69 6e 74 20 aiaEwkbGetPoint
29d30 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 6f 66 66 (geom, blob, off
29d40 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a 65 2c 20 set, blob_size,
29d50 65 6e 64 69 61 6e 2c 0a 09 09 09 09 65 6e 64 69 endian,.....endi
29d60 61 6e 5f 61 72 63 68 2c 20 64 69 6d 73 29 3b 0a an_arch, dims);.
29d70 09 20 20 69 66 20 28 6f 66 66 20 3c 20 30 29 0a . if (off < 0).
29d80 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 . return -1
29d90 3b 0a 09 20 20 6f 66 66 73 65 74 20 3d 20 6f 66 ;.. offset = of
29da0 66 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 72 f;. }. r
29db0 65 74 75 72 6e 20 6f 66 66 73 65 74 3b 0a 7d 0a eturn offset;.}.
29dc0 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 52 45 .GAIAGEO_DECLARE
29dd0 20 69 6e 74 0a 67 61 69 61 45 77 6b 62 47 65 74 int.gaiaEwkbGet
29de0 4d 75 6c 74 69 4c 69 6e 65 73 74 72 69 6e 67 20 MultiLinestring
29df0 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 (gaiaGeomCollPtr
29e00 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 64 20 geom, unsigned
29e10 63 68 61 72 20 2a 62 6c 6f 62 2c 0a 09 09 09 20 char *blob,....
29e20 20 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 int offset, i
29e30 6e 74 20 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e nt blob_size, in
29e40 74 20 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 20 t endian,....
29e50 20 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 int endian_arch
29e60 2c 20 69 6e 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a , int dims).{./*
29e70 20 64 65 63 6f 64 65 73 20 61 20 4d 55 4c 54 49 decodes a MULTI
29e80 4c 49 4e 45 53 54 52 49 4e 47 20 66 72 6f 6d 20 LINESTRING from
29e90 50 6f 73 74 47 49 53 20 45 57 4b 42 20 62 69 6e PostGIS EWKB bin
29ea0 61 72 79 20 47 45 4f 4d 45 54 52 59 20 2a 2f 0a ary GEOMETRY */.
29eb0 20 20 20 20 69 6e 74 20 65 6e 74 69 74 69 65 73 int entities
29ec0 3b 0a 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0a ;. int type;.
29ed0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha
29ee0 72 20 78 74 79 70 65 5b 34 5d 3b 0a 20 20 20 20 r xtype[4];.
29ef0 69 6e 74 20 69 65 3b 0a 20 20 20 20 69 6e 74 20 int ie;. int
29f00 6f 66 66 3b 0a 20 20 20 20 69 66 20 28 62 6c 6f off;. if (blo
29f10 62 5f 73 69 7a 65 20 3c 20 6f 66 66 73 65 74 20 b_size < offset
29f20 2b 20 34 29 0a 09 72 65 74 75 72 6e 20 2d 31 3b + 4)..return -1;
29f30 0a 20 20 20 20 65 6e 74 69 74 69 65 73 20 3d 20 . entities =
29f40 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c gaiaImport32 (bl
29f50 6f 62 20 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 ob + offset, end
29f60 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 ian, endian_arch
29f70 29 3b 0a 20 20 20 20 6f 66 66 73 65 74 20 2b 3d );. offset +=
29f80 20 34 3b 0a 20 20 20 20 66 6f 72 20 28 69 65 20 4;. for (ie
29f90 3d 20 30 3b 20 69 65 20 3c 20 65 6e 74 69 74 69 = 0; ie < entiti
29fa0 65 73 3b 20 69 65 2b 2b 29 0a 20 20 20 20 20 20 es; ie++).
29fb0 7b 0a 09 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 {.. if (blob_si
29fc0 7a 65 20 3c 20 6f 66 66 73 65 74 20 2b 20 35 29 ze < offset + 5)
29fd0 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d .. return -
29fe0 31 3b 0a 09 20 20 6d 65 6d 63 70 79 20 28 78 74 1;.. memcpy (xt
29ff0 79 70 65 2c 20 62 6c 6f 62 20 2b 20 6f 66 66 73 ype, blob + offs
2a000 65 74 20 2b 20 31 2c 20 34 29 3b 0a 09 20 20 69 et + 1, 4);.. i
2a010 66 20 28 65 6e 64 69 61 6e 29 0a 09 20 20 20 20 f (endian)..
2a020 20 20 78 74 79 70 65 5b 33 5d 20 3d 20 30 78 30 xtype[3] = 0x0
2a030 30 3b 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 0;.. else..
2a040 20 20 78 74 79 70 65 5b 30 5d 20 3d 20 30 78 30 xtype[0] = 0x0
2a050 30 3b 0a 09 20 20 74 79 70 65 20 3d 20 67 61 69 0;.. type = gai
2a060 61 49 6d 70 6f 72 74 33 32 20 28 78 74 79 70 65 aImport32 (xtype
2a070 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e , endian, endian
2a080 5f 61 72 63 68 29 3b 0a 09 20 20 6f 66 66 73 65 _arch);.. offse
2a090 74 20 2b 3d 20 35 3b 0a 09 20 20 69 66 20 28 74 t += 5;.. if (t
2a0a0 79 70 65 20 21 3d 20 47 41 49 41 5f 4c 49 4e 45 ype != GAIA_LINE
2a0b0 53 54 52 49 4e 47 29 0a 09 20 20 20 20 20 20 72 STRING).. r
2a0c0 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 6f 66 66 eturn -1;.. off
2a0d0 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 45 77 =.. gaiaEw
2a0e0 6b 62 47 65 74 4c 69 6e 65 73 74 72 69 6e 67 20 kbGetLinestring
2a0f0 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 6f 66 66 (geom, blob, off
2a100 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a 65 2c 0a set, blob_size,.
2a110 09 09 09 09 20 20 20 20 20 65 6e 64 69 61 6e 2c .... endian,
2a120 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 64 69 endian_arch, di
2a130 6d 73 29 3b 0a 09 20 20 69 66 20 28 6f 66 66 20 ms);.. if (off
2a140 3c 20 30 29 0a 09 20 20 20 20 20 20 72 65 74 75 < 0).. retu
2a150 72 6e 20 2d 31 3b 0a 09 20 20 6f 66 66 73 65 74 rn -1;.. offset
2a160 20 3d 20 6f 66 66 3b 0a 20 20 20 20 20 20 7d 0a = off;. }.
2a170 20 20 20 20 72 65 74 75 72 6e 20 6f 66 66 73 65 return offse
2a180 74 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 t;.}..GAIAGEO_DE
2a190 43 4c 41 52 45 20 69 6e 74 0a 67 61 69 61 45 77 CLARE int.gaiaEw
2a1a0 6b 62 47 65 74 4d 75 6c 74 69 50 6f 6c 79 67 6f kbGetMultiPolygo
2a1b0 6e 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 n (gaiaGeomCollP
2a1c0 74 72 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 tr geom, unsigne
2a1d0 64 20 63 68 61 72 20 2a 62 6c 6f 62 2c 0a 09 09 d char *blob,...
2a1e0 09 20 69 6e 74 20 6f 66 66 73 65 74 2c 20 69 6e . int offset, in
2a1f0 74 20 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 6e 74 t blob_size, int
2a200 20 65 6e 64 69 61 6e 2c 20 69 6e 74 20 65 6e 64 endian, int end
2a210 69 61 6e 5f 61 72 63 68 2c 0a 09 09 09 20 69 6e ian_arch,.... in
2a220 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a 20 64 65 63 t dims).{./* dec
2a230 6f 64 65 73 20 61 20 4d 55 4c 54 49 50 4f 4c 59 odes a MULTIPOLY
2a240 47 4f 4e 20 66 72 6f 6d 20 50 6f 73 74 47 49 53 GON from PostGIS
2a250 20 45 57 4b 42 20 62 69 6e 61 72 79 20 47 45 4f EWKB binary GEO
2a260 4d 45 54 52 59 20 2a 2f 0a 20 20 20 20 69 6e 74 METRY */. int
2a270 20 65 6e 74 69 74 69 65 73 3b 0a 20 20 20 20 69 entities;. i
2a280 6e 74 20 74 79 70 65 3b 0a 20 20 20 20 75 6e 73 nt type;. uns
2a290 69 67 6e 65 64 20 63 68 61 72 20 78 74 79 70 65 igned char xtype
2a2a0 5b 34 5d 3b 0a 20 20 20 20 69 6e 74 20 69 65 3b [4];. int ie;
2a2b0 0a 20 20 20 20 69 6e 74 20 6f 66 66 3b 0a 20 20 . int off;.
2a2c0 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 if (blob_size
2a2d0 3c 20 6f 66 66 73 65 74 20 2b 20 34 29 0a 09 72 < offset + 4)..r
2a2e0 65 74 75 72 6e 20 2d 31 3b 0a 20 20 20 20 65 6e eturn -1;. en
2a2f0 74 69 74 69 65 73 20 3d 20 67 61 69 61 49 6d 70 tities = gaiaImp
2a300 6f 72 74 33 32 20 28 62 6c 6f 62 20 2b 20 6f 66 ort32 (blob + of
2a310 66 73 65 74 2c 20 65 6e 64 69 61 6e 2c 20 65 6e fset, endian, en
2a320 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
2a330 6f 66 66 73 65 74 20 2b 3d 20 34 3b 0a 20 20 20 offset += 4;.
2a340 20 66 6f 72 20 28 69 65 20 3d 20 30 3b 20 69 65 for (ie = 0; ie
2a350 20 3c 20 65 6e 74 69 74 69 65 73 3b 20 69 65 2b < entities; ie+
2a360 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 +). {.. if
2a370 20 28 62 6c 6f 62 5f 73 69 7a 65 20 3c 20 6f 66 (blob_size < of
2a380 66 73 65 74 20 2b 20 35 29 0a 09 20 20 20 20 20 fset + 5)..
2a390 20 72 65 74 75 72 6e 20 2d 31 3b 0a 09 20 20 6d return -1;.. m
2a3a0 65 6d 63 70 79 20 28 78 74 79 70 65 2c 20 62 6c emcpy (xtype, bl
2a3b0 6f 62 20 2b 20 6f 66 66 73 65 74 20 2b 20 31 2c ob + offset + 1,
2a3c0 20 34 29 3b 0a 09 20 20 69 66 20 28 65 6e 64 69 4);.. if (endi
2a3d0 61 6e 29 0a 09 20 20 20 20 20 20 78 74 79 70 65 an).. xtype
2a3e0 5b 33 5d 20 3d 20 30 78 30 30 3b 0a 09 20 20 65 [3] = 0x00;.. e
2a3f0 6c 73 65 0a 09 20 20 20 20 20 20 78 74 79 70 65 lse.. xtype
2a400 5b 30 5d 20 3d 20 30 78 30 30 3b 0a 09 20 20 74 [0] = 0x00;.. t
2a410 79 70 65 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 ype = gaiaImport
2a420 33 32 20 28 78 74 79 70 65 2c 20 65 6e 64 69 61 32 (xtype, endia
2a430 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b n, endian_arch);
2a440 0a 09 20 20 6f 66 66 73 65 74 20 2b 3d 20 35 3b .. offset += 5;
2a450 0a 09 20 20 69 66 20 28 74 79 70 65 20 21 3d 20 .. if (type !=
2a460 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 29 0a 09 20 GAIA_POLYGON)..
2a470 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a return -1;.
2a480 09 20 20 6f 66 66 20 3d 0a 09 20 20 20 20 20 20 . off =..
2a490 67 61 69 61 45 77 6b 62 47 65 74 50 6f 6c 79 67 gaiaEwkbGetPolyg
2a4a0 6f 6e 20 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 on (geom, blob,
2a4b0 6f 66 66 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a offset, blob_siz
2a4c0 65 2c 20 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 e, endian,.....
2a4d0 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 64 69 endian_arch, di
2a4e0 6d 73 29 3b 0a 09 20 20 69 66 20 28 6f 66 66 20 ms);.. if (off
2a4f0 3c 20 30 29 0a 09 20 20 20 20 20 20 72 65 74 75 < 0).. retu
2a500 72 6e 20 2d 31 3b 0a 09 20 20 6f 66 66 73 65 74 rn -1;.. offset
2a510 20 3d 20 6f 66 66 3b 0a 20 20 20 20 20 20 7d 0a = off;. }.
2a520 20 20 20 20 72 65 74 75 72 6e 20 6f 66 66 73 65 return offse
2a530 74 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 t;.}..GAIAGEO_DE
2a540 43 4c 41 52 45 20 69 6e 74 0a 67 61 69 61 45 77 CLARE int.gaiaEw
2a550 6b 62 47 65 74 4d 75 6c 74 69 47 65 6f 6d 65 74 kbGetMultiGeomet
2a560 72 79 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c ry (gaiaGeomColl
2a570 50 74 72 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e Ptr geom, unsign
2a580 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 2c 0a 09 ed char *blob,..
2a590 09 09 20 20 69 6e 74 20 6f 66 66 73 65 74 2c 20 .. int offset,
2a5a0 69 6e 74 20 62 6c 6f 62 5f 73 69 7a 65 2c 20 69 int blob_size, i
2a5b0 6e 74 20 65 6e 64 69 61 6e 2c 0a 09 09 09 20 20 nt endian,....
2a5c0 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c int endian_arch,
2a5d0 20 69 6e 74 20 64 69 6d 73 29 0a 7b 0a 2f 2a 20 int dims).{./*
2a5e0 64 65 63 6f 64 65 73 20 61 20 4d 75 6c 74 69 47 decodes a MultiG
2a5f0 65 6f 6d 65 74 72 79 20 66 72 6f 6d 20 50 6f 73 eometry from Pos
2a600 74 47 49 53 20 45 57 4b 42 20 62 69 6e 61 72 79 tGIS EWKB binary
2a610 20 47 45 4f 4d 45 54 52 59 20 2a 2f 0a 20 20 20 GEOMETRY */.
2a620 20 69 6e 74 20 65 6e 74 69 74 69 65 73 3b 0a 20 int entities;.
2a630 20 20 20 69 6e 74 20 74 79 70 65 3b 0a 20 20 20 int type;.
2a640 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 78 unsigned char x
2a650 74 79 70 65 5b 34 5d 3b 0a 20 20 20 20 69 6e 74 type[4];. int
2a660 20 69 65 3b 0a 20 20 20 20 69 6e 74 20 6f 66 66 ie;. int off
2a670 3b 0a 20 20 20 20 69 66 20 28 62 6c 6f 62 5f 73 ;. if (blob_s
2a680 69 7a 65 20 3c 20 6f 66 66 73 65 74 20 2b 20 34 ize < offset + 4
2a690 29 0a 09 72 65 74 75 72 6e 20 2d 31 3b 0a 20 20 )..return -1;.
2a6a0 20 20 65 6e 74 69 74 69 65 73 20 3d 20 67 61 69 entities = gai
2a6b0 61 49 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 aImport32 (blob
2a6c0 2b 20 6f 66 66 73 65 74 2c 20 65 6e 64 69 61 6e + offset, endian
2a6d0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
2a6e0 20 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 34 3b offset += 4;
2a6f0 0a 20 20 20 20 66 6f 72 20 28 69 65 20 3d 20 30 . for (ie = 0
2a700 3b 20 69 65 20 3c 20 65 6e 74 69 74 69 65 73 3b ; ie < entities;
2a710 20 69 65 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 ie++). {..
2a720 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 7a 65 20 if (blob_size
2a730 3c 20 6f 66 66 73 65 74 20 2b 20 35 29 0a 09 20 < offset + 5)..
2a740 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0a return -1;.
2a750 09 20 20 6d 65 6d 63 70 79 20 28 78 74 79 70 65 . memcpy (xtype
2a760 2c 20 62 6c 6f 62 20 2b 20 6f 66 66 73 65 74 20 , blob + offset
2a770 2b 20 31 2c 20 34 29 3b 0a 09 20 20 69 66 20 28 + 1, 4);.. if (
2a780 65 6e 64 69 61 6e 29 0a 09 20 20 20 20 20 20 78 endian).. x
2a790 74 79 70 65 5b 33 5d 20 3d 20 30 78 30 30 3b 0a type[3] = 0x00;.
2a7a0 09 20 20 65 6c 73 65 0a 09 20 20 20 20 20 20 78 . else.. x
2a7b0 74 79 70 65 5b 30 5d 20 3d 20 30 78 30 30 3b 0a type[0] = 0x00;.
2a7c0 09 20 20 74 79 70 65 20 3d 20 67 61 69 61 49 6d . type = gaiaIm
2a7d0 70 6f 72 74 33 32 20 28 78 74 79 70 65 2c 20 65 port32 (xtype, e
2a7e0 6e 64 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 ndian, endian_ar
2a7f0 63 68 29 3b 0a 09 20 20 6f 66 66 73 65 74 20 2b ch);.. offset +
2a800 3d 20 35 3b 0a 09 20 20 73 77 69 74 63 68 20 28 = 5;.. switch (
2a810 74 79 70 65 29 0a 09 20 20 20 20 7b 0a 09 20 20 type).. {..
2a820 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 4e case GAIA_POIN
2a830 54 3a 0a 09 09 6f 66 66 20 3d 0a 09 09 20 20 20 T:...off =...
2a840 20 67 61 69 61 45 77 6b 62 47 65 74 50 6f 69 6e gaiaEwkbGetPoin
2a850 74 20 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 6f t (geom, blob, o
2a860 66 66 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a 65 ffset, blob_size
2a870 2c 20 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 , endian,.....
2a880 20 20 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c endian_arch,
2a890 20 64 69 6d 73 29 3b 0a 09 09 69 66 20 28 6f 66 dims);...if (of
2a8a0 66 20 3c 20 30 29 0a 09 09 20 20 20 20 72 65 74 f < 0)... ret
2a8b0 75 72 6e 20 2d 31 3b 0a 09 09 6f 66 66 73 65 74 urn -1;...offset
2a8c0 20 3d 20 6f 66 66 3b 0a 09 09 62 72 65 61 6b 3b = off;...break;
2a8d0 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f .. case GAIA_
2a8e0 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 09 6f 66 LINESTRING:...of
2a8f0 66 20 3d 0a 09 09 20 20 20 20 67 61 69 61 45 77 f =... gaiaEw
2a900 6b 62 47 65 74 4c 69 6e 65 73 74 72 69 6e 67 20 kbGetLinestring
2a910 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 6f 66 66 (geom, blob, off
2a920 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a 65 2c 0a set, blob_size,.
2a930 09 09 09 09 09 20 20 20 65 6e 64 69 61 6e 2c 20 ..... endian,
2a940 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 64 69 6d endian_arch, dim
2a950 73 29 3b 0a 09 09 69 66 20 28 6f 66 66 20 3c 20 s);...if (off <
2a960 30 29 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 0)... return
2a970 2d 31 3b 0a 09 09 6f 66 66 73 65 74 20 3d 20 6f -1;...offset = o
2a980 66 66 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 ff;...break;..
2a990 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 case GAIA_POLY
2a9a0 47 4f 4e 3a 0a 09 09 6f 66 66 20 3d 0a 09 09 20 GON:...off =...
2a9b0 20 20 20 67 61 69 61 45 77 6b 62 47 65 74 50 6f gaiaEwkbGetPo
2a9c0 6c 79 67 6f 6e 20 28 67 65 6f 6d 2c 20 62 6c 6f lygon (geom, blo
2a9d0 62 2c 20 6f 66 66 73 65 74 2c 20 62 6c 6f 62 5f b, offset, blob_
2a9e0 73 69 7a 65 2c 20 65 6e 64 69 61 6e 2c 0a 09 09 size, endian,...
2a9f0 09 09 09 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 ...endian_arch,
2aa00 64 69 6d 73 29 3b 0a 09 09 69 66 20 28 6f 66 66 dims);...if (off
2aa10 20 3c 20 30 29 0a 09 09 20 20 20 20 72 65 74 75 < 0)... retu
2aa20 72 6e 20 2d 31 3b 0a 09 09 6f 66 66 73 65 74 20 rn -1;...offset
2aa30 3d 20 6f 66 66 3b 0a 09 09 62 72 65 61 6b 3b 0a = off;...break;.
2aa40 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
2aa50 55 4c 54 49 50 4f 49 4e 54 3a 0a 09 09 6f 66 66 ULTIPOINT:...off
2aa60 20 3d 0a 09 09 20 20 20 20 67 61 69 61 45 77 6b =... gaiaEwk
2aa70 62 47 65 74 4d 75 6c 74 69 50 6f 69 6e 74 20 28 bGetMultiPoint (
2aa80 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 6f 66 66 73 geom, blob, offs
2aa90 65 74 2c 20 62 6c 6f 62 5f 73 69 7a 65 2c 0a 09 et, blob_size,..
2aaa0 09 09 09 09 20 20 20 65 6e 64 69 61 6e 2c 20 65 .... endian, e
2aab0 6e 64 69 61 6e 5f 61 72 63 68 2c 20 64 69 6d 73 ndian_arch, dims
2aac0 29 3b 0a 09 09 69 66 20 28 6f 66 66 20 3c 20 30 );...if (off < 0
2aad0 29 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 2d )... return -
2aae0 31 3b 0a 09 09 6f 66 66 73 65 74 20 3d 20 6f 66 1;...offset = of
2aaf0 66 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 f;...break;..
2ab00 20 63 61 73 65 20 47 41 49 41 5f 4d 55 4c 54 49 case GAIA_MULTI
2ab10 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 09 6f 66 LINESTRING:...of
2ab20 66 20 3d 0a 09 09 20 20 20 20 67 61 69 61 45 77 f =... gaiaEw
2ab30 6b 62 47 65 74 4d 75 6c 74 69 4c 69 6e 65 73 74 kbGetMultiLinest
2ab40 72 69 6e 67 20 28 67 65 6f 6d 2c 20 62 6c 6f 62 ring (geom, blob
2ab50 2c 20 6f 66 66 73 65 74 2c 20 62 6c 6f 62 5f 73 , offset, blob_s
2ab60 69 7a 65 2c 0a 09 09 09 09 09 09 65 6e 64 69 61 ize,.......endia
2ab70 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 n, endian_arch,
2ab80 64 69 6d 73 29 3b 0a 09 09 69 66 20 28 6f 66 66 dims);...if (off
2ab90 20 3c 20 30 29 0a 09 09 20 20 20 20 72 65 74 75 < 0)... retu
2aba0 72 6e 20 2d 31 3b 0a 09 09 6f 66 66 73 65 74 20 rn -1;...offset
2abb0 3d 20 6f 66 66 3b 0a 09 09 62 72 65 61 6b 3b 0a = off;...break;.
2abc0 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d . case GAIA_M
2abd0 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a 09 09 6f ULTIPOLYGON:...o
2abe0 66 66 20 3d 0a 09 09 20 20 20 20 67 61 69 61 45 ff =... gaiaE
2abf0 77 6b 62 47 65 74 4d 75 6c 74 69 50 6f 6c 79 67 wkbGetMultiPolyg
2ac00 6f 6e 20 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 on (geom, blob,
2ac10 6f 66 66 73 65 74 2c 20 62 6c 6f 62 5f 73 69 7a offset, blob_siz
2ac20 65 2c 0a 09 09 09 09 09 20 20 20 20 20 65 6e 64 e,...... end
2ac30 69 61 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 ian, endian_arch
2ac40 2c 20 64 69 6d 73 29 3b 0a 09 09 69 66 20 28 6f , dims);...if (o
2ac50 66 66 20 3c 20 30 29 0a 09 09 20 20 20 20 72 65 ff < 0)... re
2ac60 74 75 72 6e 20 2d 31 3b 0a 09 09 6f 66 66 73 65 turn -1;...offse
2ac70 74 20 3d 20 6f 66 66 3b 0a 09 09 62 72 65 61 6b t = off;...break
2ac80 3b 0a 09 20 20 20 20 63 61 73 65 20 47 41 49 41 ;.. case GAIA
2ac90 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
2aca0 49 4f 4e 3a 0a 09 09 6f 66 66 20 3d 0a 09 09 20 ION:...off =...
2acb0 20 20 20 67 61 69 61 45 77 6b 62 47 65 74 4d 75 gaiaEwkbGetMu
2acc0 6c 74 69 47 65 6f 6d 65 74 72 79 20 28 67 65 6f ltiGeometry (geo
2acd0 6d 2c 20 62 6c 6f 62 2c 20 6f 66 66 73 65 74 2c m, blob, offset,
2ace0 20 62 6c 6f 62 5f 73 69 7a 65 2c 0a 09 09 09 09 blob_size,.....
2acf0 09 20 20 20 20 20 20 65 6e 64 69 61 6e 2c 20 65 . endian, e
2ad00 6e 64 69 61 6e 5f 61 72 63 68 2c 20 64 69 6d 73 ndian_arch, dims
2ad10 29 3b 0a 09 09 69 66 20 28 6f 66 66 20 3c 20 30 );...if (off < 0
2ad20 29 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 2d )... return -
2ad30 31 3b 0a 09 09 6f 66 66 73 65 74 20 3d 20 6f 66 1;...offset = of
2ad40 66 3b 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 f;...break;..
2ad50 20 64 65 66 61 75 6c 74 3a 09 09 2f 2a 20 75 6e default:../* un
2ad60 65 78 70 65 63 74 65 64 3a 20 69 6e 76 61 6c 69 expected: invali
2ad70 64 20 45 57 4b 42 20 2a 2f 0a 09 09 72 65 74 75 d EWKB */...retu
2ad80 72 6e 20 2d 31 3b 0a 09 20 20 20 20 7d 3b 0a 20 rn -1;.. };.
2ad90 20 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 }. retur
2ada0 6e 20 6f 66 66 73 65 74 3b 0a 7d 0a 0a 73 74 61 n offset;.}..sta
2adb0 74 69 63 20 69 6e 74 0a 70 61 72 73 65 48 65 78 tic int.parseHex
2adc0 45 77 6b 62 42 79 74 65 20 28 63 6f 6e 73 74 20 EwkbByte (const
2add0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 68 69 unsigned char hi
2ade0 67 68 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e gh, const unsign
2adf0 65 64 20 63 68 61 72 20 6c 6f 77 2c 0a 09 09 20 ed char low,...
2ae00 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a unsigned char *
2ae10 62 79 74 65 29 0a 7b 0a 2f 2a 20 70 61 72 73 69 byte).{./* parsi
2ae20 6e 67 20 61 6e 20 48 65 78 61 64 65 63 69 6d 61 ng an Hexadecima
2ae30 6c 20 62 79 74 65 20 2a 2f 0a 20 20 20 20 75 6e l byte */. un
2ae40 73 69 67 6e 65 64 20 63 68 61 72 20 68 65 78 3b signed char hex;
2ae50 0a 20 20 20 20 73 77 69 74 63 68 20 28 68 69 67 . switch (hig
2ae60 68 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 h). {.
2ae70 20 63 61 73 65 20 27 30 27 3a 0a 09 20 20 68 65 case '0':.. he
2ae80 78 20 3d 20 31 36 20 2a 20 30 3b 0a 09 20 20 62 x = 16 * 0;.. b
2ae90 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
2aea0 20 27 31 27 3a 0a 09 20 20 68 65 78 20 3d 20 31 '1':.. hex = 1
2aeb0 36 20 2a 20 31 3b 0a 09 20 20 62 72 65 61 6b 3b 6 * 1;.. break;
2aec0 0a 20 20 20 20 20 20 63 61 73 65 20 27 32 27 3a . case '2':
2aed0 0a 09 20 20 68 65 78 20 3d 20 31 36 20 2a 20 32 .. hex = 16 * 2
2aee0 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
2aef0 20 20 63 61 73 65 20 27 33 27 3a 0a 09 20 20 68 case '3':.. h
2af00 65 78 20 3d 20 31 36 20 2a 20 33 3b 0a 09 20 20 ex = 16 * 3;..
2af10 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
2af20 65 20 27 34 27 3a 0a 09 20 20 68 65 78 20 3d 20 e '4':.. hex =
2af30 31 36 20 2a 20 34 3b 0a 09 20 20 62 72 65 61 6b 16 * 4;.. break
2af40 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 35 27 ;. case '5'
2af50 3a 0a 09 20 20 68 65 78 20 3d 20 31 36 20 2a 20 :.. hex = 16 *
2af60 35 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 5;.. break;.
2af70 20 20 20 63 61 73 65 20 27 36 27 3a 0a 09 20 20 case '6':..
2af80 68 65 78 20 3d 20 31 36 20 2a 20 36 3b 0a 09 20 hex = 16 * 6;..
2af90 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
2afa0 73 65 20 27 37 27 3a 0a 09 20 20 68 65 78 20 3d se '7':.. hex =
2afb0 20 31 36 20 2a 20 37 3b 0a 09 20 20 62 72 65 61 16 * 7;.. brea
2afc0 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 38 k;. case '8
2afd0 27 3a 0a 09 20 20 68 65 78 20 3d 20 31 36 20 2a ':.. hex = 16 *
2afe0 20 38 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 8;.. break;.
2aff0 20 20 20 20 63 61 73 65 20 27 39 27 3a 0a 09 20 case '9':..
2b000 20 68 65 78 20 3d 20 31 36 20 2a 20 39 3b 0a 09 hex = 16 * 9;..
2b010 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
2b020 61 73 65 20 27 41 27 3a 0a 20 20 20 20 20 20 63 ase 'A':. c
2b030 61 73 65 20 27 61 27 3a 0a 09 20 20 68 65 78 20 ase 'a':.. hex
2b040 3d 20 31 36 20 2a 20 31 30 3b 0a 09 20 20 62 72 = 16 * 10;.. br
2b050 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2b060 27 42 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 'B':. case
2b070 27 62 27 3a 0a 09 20 20 68 65 78 20 3d 20 31 36 'b':.. hex = 16
2b080 20 2a 20 31 31 3b 0a 09 20 20 62 72 65 61 6b 3b * 11;.. break;
2b090 0a 20 20 20 20 20 20 63 61 73 65 20 27 43 27 3a . case 'C':
2b0a0 0a 20 20 20 20 20 20 63 61 73 65 20 27 63 27 3a . case 'c':
2b0b0 0a 09 20 20 68 65 78 20 3d 20 31 36 20 2a 20 31 .. hex = 16 * 1
2b0c0 32 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 2;.. break;.
2b0d0 20 20 20 63 61 73 65 20 27 44 27 3a 0a 20 20 20 case 'D':.
2b0e0 20 20 20 63 61 73 65 20 27 64 27 3a 0a 09 20 20 case 'd':..
2b0f0 68 65 78 20 3d 20 31 36 20 2a 20 31 33 3b 0a 09 hex = 16 * 13;..
2b100 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
2b110 61 73 65 20 27 45 27 3a 0a 20 20 20 20 20 20 63 ase 'E':. c
2b120 61 73 65 20 27 65 27 3a 0a 09 20 20 68 65 78 20 ase 'e':.. hex
2b130 3d 20 31 36 20 2a 20 31 34 3b 0a 09 20 20 62 72 = 16 * 14;.. br
2b140 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2b150 27 46 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 'F':. case
2b160 27 66 27 3a 0a 09 20 20 68 65 78 20 3d 20 31 36 'f':.. hex = 16
2b170 20 2a 20 31 35 3b 0a 09 20 20 62 72 65 61 6b 3b * 15;.. break;
2b180 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a . default:.
2b190 09 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 . return 0;.
2b1a0 20 20 20 7d 3b 0a 20 20 20 20 73 77 69 74 63 68 };. switch
2b1b0 20 28 6c 6f 77 29 0a 20 20 20 20 20 20 7b 0a 20 (low). {.
2b1c0 20 20 20 20 20 63 61 73 65 20 27 30 27 3a 0a 09 case '0':..
2b1d0 20 20 68 65 78 20 2b 3d 20 30 3b 0a 09 20 20 62 hex += 0;.. b
2b1e0 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 reak;. case
2b1f0 20 27 31 27 3a 0a 09 20 20 68 65 78 20 2b 3d 20 '1':.. hex +=
2b200 31 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 1;.. break;.
2b210 20 20 20 63 61 73 65 20 27 32 27 3a 0a 09 20 20 case '2':..
2b220 68 65 78 20 2b 3d 20 32 3b 0a 09 20 20 62 72 65 hex += 2;.. bre
2b230 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 ak;. case '
2b240 33 27 3a 0a 09 20 20 68 65 78 20 2b 3d 20 33 3b 3':.. hex += 3;
2b250 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
2b260 20 63 61 73 65 20 27 34 27 3a 0a 09 20 20 68 65 case '4':.. he
2b270 78 20 2b 3d 20 34 3b 0a 09 20 20 62 72 65 61 6b x += 4;.. break
2b280 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 35 27 ;. case '5'
2b290 3a 0a 09 20 20 68 65 78 20 2b 3d 20 35 3b 0a 09 :.. hex += 5;..
2b2a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
2b2b0 61 73 65 20 27 36 27 3a 0a 09 20 20 68 65 78 20 ase '6':.. hex
2b2c0 2b 3d 20 36 3b 0a 09 20 20 62 72 65 61 6b 3b 0a += 6;.. break;.
2b2d0 20 20 20 20 20 20 63 61 73 65 20 27 37 27 3a 0a case '7':.
2b2e0 09 20 20 68 65 78 20 2b 3d 20 37 3b 0a 09 20 20 . hex += 7;..
2b2f0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
2b300 65 20 27 38 27 3a 0a 09 20 20 68 65 78 20 2b 3d e '8':.. hex +=
2b310 20 38 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 8;.. break;.
2b320 20 20 20 20 63 61 73 65 20 27 39 27 3a 0a 09 20 case '9':..
2b330 20 68 65 78 20 2b 3d 20 39 3b 0a 09 20 20 62 72 hex += 9;.. br
2b340 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2b350 27 41 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 'A':. case
2b360 27 61 27 3a 0a 09 20 20 68 65 78 20 2b 3d 20 31 'a':.. hex += 1
2b370 30 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 0;.. break;.
2b380 20 20 20 63 61 73 65 20 27 42 27 3a 0a 20 20 20 case 'B':.
2b390 20 20 20 63 61 73 65 20 27 62 27 3a 0a 09 20 20 case 'b':..
2b3a0 68 65 78 20 2b 3d 20 31 31 3b 0a 09 20 20 62 72 hex += 11;.. br
2b3b0 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2b3c0 27 43 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 'C':. case
2b3d0 27 63 27 3a 0a 09 20 20 68 65 78 20 2b 3d 20 31 'c':.. hex += 1
2b3e0 32 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 2;.. break;.
2b3f0 20 20 20 63 61 73 65 20 27 44 27 3a 0a 20 20 20 case 'D':.
2b400 20 20 20 63 61 73 65 20 27 64 27 3a 0a 09 20 20 case 'd':..
2b410 68 65 78 20 2b 3d 20 31 33 3b 0a 09 20 20 62 72 hex += 13;.. br
2b420 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2b430 27 45 27 3a 0a 20 20 20 20 20 20 63 61 73 65 20 'E':. case
2b440 27 65 27 3a 0a 09 20 20 68 65 78 20 2b 3d 20 31 'e':.. hex += 1
2b450 34 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 4;.. break;.
2b460 20 20 20 63 61 73 65 20 27 46 27 3a 0a 20 20 20 case 'F':.
2b470 20 20 20 63 61 73 65 20 27 66 27 3a 0a 09 20 20 case 'f':..
2b480 68 65 78 20 2b 3d 20 31 35 3b 0a 09 20 20 62 72 hex += 15;.. br
2b490 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 eak;. defau
2b4a0 6c 74 3a 0a 09 20 20 72 65 74 75 72 6e 20 30 3b lt:.. return 0;
2b4b0 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 2a 62 . };. *b
2b4c0 79 74 65 20 3d 20 68 65 78 3b 0a 20 20 20 20 72 yte = hex;. r
2b4d0 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 47 41 49 41 eturn 1;.}..GAIA
2b4e0 47 45 4f 5f 44 45 43 4c 41 52 45 20 75 6e 73 69 GEO_DECLARE unsi
2b4f0 67 6e 65 64 20 63 68 61 72 20 2a 0a 67 61 69 61 gned char *.gaia
2b500 50 61 72 73 65 48 65 78 45 57 4b 42 20 28 63 6f ParseHexEWKB (co
2b510 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 nst unsigned cha
2b520 72 20 2a 62 6c 6f 62 5f 68 65 78 2c 20 69 6e 74 r *blob_hex, int
2b530 20 2a 62 6c 6f 62 5f 73 69 7a 65 29 0a 7b 0a 2f *blob_size).{./
2b540 2a 20 70 61 72 73 69 6e 67 20 61 6e 20 48 65 78 * parsing an Hex
2b550 61 64 65 63 69 6d 61 6c 20 45 57 4b 42 20 47 65 adecimal EWKB Ge
2b560 6f 6d 65 74 72 79 20 2a 2f 0a 20 20 20 20 75 6e ometry */. un
2b570 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c 6f signed char *blo
2b580 62 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 b;. unsigned
2b590 63 68 61 72 20 2a 70 5f 6f 75 74 3b 0a 20 20 20 char *p_out;.
2b5a0 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 const unsigned
2b5b0 63 68 61 72 20 2a 70 5f 69 6e 3b 0a 20 20 20 20 char *p_in;.
2b5c0 63 68 61 72 20 68 69 67 68 3b 0a 20 20 20 20 63 char high;. c
2b5d0 68 61 72 20 6c 6f 77 3b 0a 20 20 20 20 75 6e 73 har low;. uns
2b5e0 69 67 6e 65 64 20 63 68 61 72 20 68 65 78 3b 0a igned char hex;.
2b5f0 20 20 20 20 69 6e 74 20 73 69 7a 65 3b 0a 20 20 int size;.
2b600 20 20 69 6e 74 20 6c 65 6e 20 3d 20 73 74 72 6c int len = strl
2b610 65 6e 20 28 28 63 6f 6e 73 74 20 63 68 61 72 20 en ((const char
2b620 2a 29 20 62 6c 6f 62 5f 68 65 78 29 3b 0a 20 20 *) blob_hex);.
2b630 20 20 73 69 7a 65 20 3d 20 6c 65 6e 20 2f 20 32 size = len / 2
2b640 3b 0a 20 20 20 20 69 66 20 28 73 69 7a 65 20 2a ;. if (size *
2b650 20 32 20 21 3d 20 6c 65 6e 29 0a 09 72 65 74 75 2 != len)..retu
2b660 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 62 6c 6f rn NULL;. blo
2b670 62 20 3d 20 6d 61 6c 6c 6f 63 20 28 73 69 7a 65 b = malloc (size
2b680 29 3b 0a 20 20 20 20 69 66 20 28 21 62 6c 6f 62 );. if (!blob
2b690 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a )..return NULL;.
2b6a0 20 20 20 20 2a 62 6c 6f 62 5f 73 69 7a 65 20 3d *blob_size =
2b6b0 20 73 69 7a 65 3b 0a 20 20 20 20 70 5f 69 6e 20 size;. p_in
2b6c0 3d 20 62 6c 6f 62 5f 68 65 78 3b 0a 20 20 20 20 = blob_hex;.
2b6d0 70 5f 6f 75 74 20 3d 20 62 6c 6f 62 3b 0a 20 20 p_out = blob;.
2b6e0 20 20 77 68 69 6c 65 20 28 2a 70 5f 69 6e 20 21 while (*p_in !
2b6f0 3d 20 27 5c 30 27 29 0a 20 20 20 20 20 20 7b 0a = '\0'). {.
2b700 09 20 20 68 69 67 68 20 3d 20 2a 70 5f 69 6e 2b . high = *p_in+
2b710 2b 3b 0a 09 20 20 6c 6f 77 20 3d 20 2a 70 5f 69 +;.. low = *p_i
2b720 6e 2b 2b 3b 0a 09 20 20 69 66 20 28 21 70 61 72 n++;.. if (!par
2b730 73 65 48 65 78 45 77 6b 62 42 79 74 65 20 28 68 seHexEwkbByte (h
2b740 69 67 68 2c 20 6c 6f 77 2c 20 26 68 65 78 29 29 igh, low, &hex))
2b750 0a 09 20 20 20 20 7b 0a 09 09 66 72 65 65 20 28 .. {...free (
2b760 62 6c 6f 62 29 3b 0a 09 09 72 65 74 75 72 6e 20 blob);...return
2b770 4e 55 4c 4c 3b 0a 09 20 20 20 20 7d 0a 09 20 20 NULL;.. }..
2b780 2a 70 5f 6f 75 74 2b 2b 20 3d 20 68 65 78 3b 0a *p_out++ = hex;.
2b790 20 20 20 20 20 20 7d 0a 20 20 20 20 2a 62 6c 6f }. *blo
2b7a0 62 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 b_size = size;.
2b7b0 20 20 20 72 65 74 75 72 6e 20 62 6c 6f 62 3b 0a return blob;.
2b7c0 7d 0a 0a 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 }..gaiaGeomCollP
2b7d0 74 72 0a 67 61 69 61 46 72 6f 6d 45 57 4b 42 20 tr.gaiaFromEWKB
2b7e0 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 (const unsigned
2b7f0 63 68 61 72 20 2a 69 6e 5f 62 75 66 66 65 72 29 char *in_buffer)
2b800 0a 7b 0a 2f 2a 20 63 72 65 61 74 65 73 20 61 20 .{./* creates a
2b810 47 61 69 61 20 6f 77 6e 20 47 65 6f 6d 65 74 72 Gaia own Geometr
2b820 79 20 66 72 6f 6d 20 47 45 4f 53 2f 50 6f 73 74 y from GEOS/Post
2b830 47 49 53 20 45 57 4b 42 20 2a 2f 0a 20 20 20 20 GIS EWKB */.
2b840 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 unsigned char *b
2b850 6c 6f 62 3b 0a 20 20 20 20 69 6e 74 20 62 6c 6f lob;. int blo
2b860 62 5f 73 69 7a 65 3b 0a 20 20 20 20 75 6e 73 69 b_size;. unsi
2b870 67 6e 65 64 20 63 68 61 72 20 78 74 79 70 65 5b gned char xtype[
2b880 34 5d 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 4];. unsigned
2b890 20 63 68 61 72 20 78 64 69 6d 73 3b 0a 20 20 20 char xdims;.
2b8a0 20 69 6e 74 20 74 79 70 65 3b 0a 20 20 20 20 69 int type;. i
2b8b0 6e 74 20 68 61 73 5f 7a 20 3d 20 30 3b 0a 20 20 nt has_z = 0;.
2b8c0 20 20 69 6e 74 20 68 61 73 5f 6d 20 3d 20 30 3b int has_m = 0;
2b8d0 0a 20 20 20 20 69 6e 74 20 64 69 6d 73 20 3d 20 . int dims =
2b8e0 47 41 49 41 5f 58 59 3b 0a 20 20 20 20 69 6e 74 GAIA_XY;. int
2b8f0 20 73 72 69 64 3b 0a 20 20 20 20 69 6e 74 20 72 srid;. int r
2b900 65 74 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 69 et;. int endi
2b910 61 6e 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 69 an;. int endi
2b920 61 6e 5f 61 72 63 68 20 3d 20 67 61 69 61 45 6e an_arch = gaiaEn
2b930 64 69 61 6e 41 72 63 68 20 28 29 3b 0a 20 20 20 dianArch ();.
2b940 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 72 gaiaGeomCollPtr
2b950 20 67 65 6f 6d 20 3d 20 4e 55 4c 4c 3b 0a 20 20 geom = NULL;.
2b960 20 20 62 6c 6f 62 20 3d 20 67 61 69 61 50 61 72 blob = gaiaPar
2b970 73 65 48 65 78 45 57 4b 42 20 28 69 6e 5f 62 75 seHexEWKB (in_bu
2b980 66 66 65 72 2c 20 26 62 6c 6f 62 5f 73 69 7a 65 ffer, &blob_size
2b990 29 3b 0a 20 20 20 20 69 66 20 28 21 62 6c 6f 62 );. if (!blob
2b9a0 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a )..return NULL;.
2b9b0 20 20 20 20 69 66 20 28 62 6c 6f 62 5f 73 69 7a if (blob_siz
2b9c0 65 20 3c 20 39 29 0a 20 20 20 20 20 20 7b 0a 09 e < 9). {..
2b9d0 20 20 66 72 65 65 20 28 62 6c 6f 62 29 3b 0a 09 free (blob);..
2b9e0 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 return NULL;.
2b9f0 20 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 2a }. if (*
2ba00 28 62 6c 6f 62 20 2b 20 30 29 20 3d 3d 20 30 78 (blob + 0) == 0x
2ba10 30 31 29 0a 09 65 6e 64 69 61 6e 20 3d 20 31 3b 01)..endian = 1;
2ba20 0a 20 20 20 20 65 6c 73 65 0a 09 65 6e 64 69 61 . else..endia
2ba30 6e 20 3d 20 30 3b 0a 20 20 20 20 6d 65 6d 63 70 n = 0;. memcp
2ba40 79 20 28 78 74 79 70 65 2c 20 62 6c 6f 62 20 2b y (xtype, blob +
2ba50 20 31 2c 20 34 29 3b 0a 20 20 20 20 69 66 20 28 1, 4);. if (
2ba60 65 6e 64 69 61 6e 29 0a 20 20 20 20 20 20 7b 0a endian). {.
2ba70 09 20 20 78 64 69 6d 73 20 3d 20 78 74 79 70 65 . xdims = xtype
2ba80 5b 33 5d 3b 0a 09 20 20 78 74 79 70 65 5b 33 5d [3];.. xtype[3]
2ba90 20 3d 20 30 78 30 30 3b 0a 20 20 20 20 20 20 7d = 0x00;. }
2baa0 0a 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20 20 . else.
2bab0 7b 0a 09 20 20 78 64 69 6d 73 20 3d 20 78 74 79 {.. xdims = xty
2bac0 70 65 5b 30 5d 3b 0a 09 20 20 78 74 79 70 65 5b pe[0];.. xtype[
2bad0 30 5d 20 3d 20 30 78 30 30 3b 0a 20 20 20 20 20 0] = 0x00;.
2bae0 20 7d 0a 20 20 20 20 74 79 70 65 20 3d 20 67 61 }. type = ga
2baf0 69 61 49 6d 70 6f 72 74 33 32 20 28 78 74 79 70 iaImport32 (xtyp
2bb00 65 2c 20 65 6e 64 69 61 6e 2c 20 65 6e 64 69 61 e, endian, endia
2bb10 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 69 66 20 n_arch);. if
2bb20 28 78 64 69 6d 73 20 26 20 30 78 34 30 29 0a 09 (xdims & 0x40)..
2bb30 68 61 73 5f 6d 20 3d 20 31 3b 0a 20 20 20 20 69 has_m = 1;. i
2bb40 66 20 28 78 64 69 6d 73 20 26 20 30 78 38 30 29 f (xdims & 0x80)
2bb50 0a 09 68 61 73 5f 7a 20 3d 20 31 3b 0a 20 20 20 ..has_z = 1;.
2bb60 20 69 66 20 28 68 61 73 5f 6d 20 26 26 20 68 61 if (has_m && ha
2bb70 73 5f 7a 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 s_z). {..
2bb80 64 69 6d 73 20 3d 20 47 41 49 41 5f 58 59 5f 5a dims = GAIA_XY_Z
2bb90 5f 4d 3b 0a 09 20 20 67 65 6f 6d 20 3d 20 67 61 _M;.. geom = ga
2bba0 69 61 41 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 iaAllocGeomCollX
2bbb0 59 5a 4d 20 28 29 3b 0a 20 20 20 20 20 20 7d 0a YZM ();. }.
2bbc0 20 20 20 20 65 6c 73 65 20 69 66 20 28 68 61 73 else if (has
2bbd0 5f 6d 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 64 _m). {.. d
2bbe0 69 6d 73 20 3d 20 47 41 49 41 5f 58 59 5f 4d 3b ims = GAIA_XY_M;
2bbf0 0a 09 20 20 67 65 6f 6d 20 3d 20 67 61 69 61 41 .. geom = gaiaA
2bc00 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 4d 20 llocGeomCollXYM
2bc10 28 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 ();. }.
2bc20 65 6c 73 65 20 69 66 20 28 68 61 73 5f 7a 29 0a else if (has_z).
2bc30 20 20 20 20 20 20 7b 0a 09 20 20 64 69 6d 73 20 {.. dims
2bc40 3d 20 47 41 49 41 5f 58 59 5f 5a 3b 0a 09 20 20 = GAIA_XY_Z;..
2bc50 67 65 6f 6d 20 3d 20 67 61 69 61 41 6c 6c 6f 63 geom = gaiaAlloc
2bc60 47 65 6f 6d 43 6f 6c 6c 58 59 5a 20 28 29 3b 0a GeomCollXYZ ();.
2bc70 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 }. else
2bc80 0a 20 20 20 20 20 20 7b 0a 09 20 20 64 69 6d 73 . {.. dims
2bc90 20 3d 20 47 41 49 41 5f 58 59 3b 0a 09 20 20 67 = GAIA_XY;.. g
2bca0 65 6f 6d 20 3d 20 67 61 69 61 41 6c 6c 6f 63 47 eom = gaiaAllocG
2bcb0 65 6f 6d 43 6f 6c 6c 20 28 29 3b 0a 20 20 20 20 eomColl ();.
2bcc0 20 20 7d 0a 20 20 20 20 73 72 69 64 20 3d 20 67 }. srid = g
2bcd0 61 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c 6f aiaImport32 (blo
2bce0 62 20 2b 20 35 2c 20 65 6e 64 69 61 6e 2c 20 65 b + 5, endian, e
2bcf0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
2bd00 20 67 65 6f 6d 2d 3e 53 72 69 64 20 3d 20 73 72 geom->Srid = sr
2bd10 69 64 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 6d id;. if (geom
2bd20 2d 3e 53 72 69 64 20 3c 3d 20 30 29 0a 09 67 65 ->Srid <= 0)..ge
2bd30 6f 6d 2d 3e 53 72 69 64 20 3d 20 30 3b 0a 20 20 om->Srid = 0;.
2bd40 20 20 73 77 69 74 63 68 20 28 74 79 70 65 29 0a switch (type).
2bd50 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 63 61 {. ca
2bd60 73 65 20 47 41 49 41 5f 50 4f 49 4e 54 3a 0a 09 se GAIA_POINT:..
2bd70 20 20 72 65 74 20 3d 0a 09 20 20 20 20 20 20 67 ret =.. g
2bd80 61 69 61 45 77 6b 62 47 65 74 50 6f 69 6e 74 20 aiaEwkbGetPoint
2bd90 28 67 65 6f 6d 2c 20 62 6c 6f 62 2c 20 39 2c 20 (geom, blob, 9,
2bda0 62 6c 6f 62 5f 73 69 7a 65 2c 20 65 6e 64 69 61 blob_size, endia
2bdb0 6e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 0a n, endian_arch,.
2bdc0 09 09 09 09 64 69 6d 73 29 3b 0a 09 20 20 62 72 ....dims);.. br
2bdd0 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 eak;. case
2bde0 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 3a GAIA_LINESTRING:
2bdf0 0a 09 20 20 72 65 74 20 3d 0a 09 20 20 20 20 20 .. ret =..
2be00 20 67 61 69 61 45 77 6b 62 47 65 74 4c 69 6e 65 gaiaEwkbGetLine
2be10 73 74 72 69 6e 67 20 28 67 65 6f 6d 2c 20 62 6c string (geom, bl
2be20 6f 62 2c 20 39 2c 20 62 6c 6f 62 5f 73 69 7a 65 ob, 9, blob_size
2be30 2c 20 65 6e 64 69 61 6e 2c 0a 09 09 09 09 20 20 , endian,.....
2be40 20 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 endian_arch,
2be50 64 69 6d 73 29 3b 0a 09 20 20 62 72 65 61 6b 3b dims);.. break;
2be60 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
2be70 5f 50 4f 4c 59 47 4f 4e 3a 0a 09 20 20 72 65 74 _POLYGON:.. ret
2be80 20 3d 0a 09 20 20 20 20 20 20 67 61 69 61 45 77 =.. gaiaEw
2be90 6b 62 47 65 74 50 6f 6c 79 67 6f 6e 20 28 67 65 kbGetPolygon (ge
2bea0 6f 6d 2c 20 62 6c 6f 62 2c 20 39 2c 20 62 6c 6f om, blob, 9, blo
2beb0 62 5f 73 69 7a 65 2c 20 65 6e 64 69 61 6e 2c 20 b_size, endian,
2bec0 65 6e 64 69 61 6e 5f 61 72 63 68 2c 0a 09 09 09 endian_arch,....
2bed0 09 20 20 64 69 6d 73 29 3b 0a 09 20 20 62 72 65 . dims);.. bre
2bee0 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c ak;. defaul
2bef0 74 3a 0a 09 20 20 72 65 74 20 3d 0a 09 20 20 20 t:.. ret =..
2bf00 20 20 20 67 61 69 61 45 77 6b 62 47 65 74 4d 75 gaiaEwkbGetMu
2bf10 6c 74 69 47 65 6f 6d 65 74 72 79 20 28 67 65 6f ltiGeometry (geo
2bf20 6d 2c 20 62 6c 6f 62 2c 20 39 2c 20 62 6c 6f 62 m, blob, 9, blob
2bf30 5f 73 69 7a 65 2c 20 65 6e 64 69 61 6e 2c 0a 09 _size, endian,..
2bf40 09 09 09 09 65 6e 64 69 61 6e 5f 61 72 63 68 2c ....endian_arch,
2bf50 20 64 69 6d 73 29 3b 0a 09 20 20 62 72 65 61 6b dims);.. break
2bf60 3b 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 66 ;. };. f
2bf70 72 65 65 20 28 62 6c 6f 62 29 3b 0a 20 20 20 20 ree (blob);.
2bf80 69 66 20 28 72 65 74 20 3c 20 30 29 0a 20 20 20 if (ret < 0).
2bf90 20 20 20 7b 0a 09 20 20 2f 2a 20 69 6e 76 61 6c {.. /* inval
2bfa0 69 64 20 45 57 4b 42 20 21 21 21 20 2a 2f 0a 09 id EWKB !!! */..
2bfb0 20 20 67 61 69 61 46 72 65 65 47 65 6f 6d 43 6f gaiaFreeGeomCo
2bfc0 6c 6c 20 28 67 65 6f 6d 29 3b 0a 09 20 20 72 65 ll (geom);.. re
2bfd0 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 turn NULL;.
2bfe0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 67 65 }. return ge
2bff0 6f 6d 3b 0a 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 om;.}..GAIAGEO_D
2c000 45 43 4c 41 52 45 20 76 6f 69 64 0a 67 61 69 61 ECLARE void.gaia
2c010 54 6f 45 57 4b 42 20 28 67 61 69 61 4f 75 74 42 ToEWKB (gaiaOutB
2c020 75 66 66 65 72 50 74 72 20 6f 75 74 5f 62 75 66 ufferPtr out_buf
2c030 2c 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 , gaiaGeomCollPt
2c040 72 20 67 65 6f 6d 29 0a 7b 0a 2f 2a 20 70 72 69 r geom).{./* pri
2c050 6e 74 73 20 74 68 65 20 47 45 4f 53 2f 50 6f 73 nts the GEOS/Pos
2c060 74 47 49 53 20 45 57 4b 42 20 74 65 78 74 20 72 tGIS EWKB text r
2c070 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 epresentation of
2c080 20 63 75 72 72 65 6e 74 20 67 65 6f 6d 65 74 72 current geometr
2c090 79 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 62 75 y */. char bu
2c0a0 66 5b 32 30 34 38 5d 3b 0a 20 20 20 20 75 6e 73 f[2048];. uns
2c0b0 69 67 6e 65 64 20 63 68 61 72 20 65 6e 64 69 61 igned char endia
2c0c0 6e 5f 62 75 66 5b 31 36 5d 3b 0a 20 20 20 20 63 n_buf[16];. c
2c0d0 68 61 72 20 62 79 74 65 5b 33 5d 3b 0a 20 20 20 har byte[3];.
2c0e0 20 63 68 61 72 20 2a 70 74 72 3b 0a 20 20 20 20 char *ptr;.
2c0f0 69 6e 74 20 73 69 7a 65 3b 0a 20 20 20 20 69 6e int size;. in
2c100 74 20 74 79 70 65 3b 0a 20 20 20 20 69 6e 74 20 t type;. int
2c110 65 6e 74 69 74 69 65 73 20 3d 20 30 3b 0a 20 20 entities = 0;.
2c120 20 20 69 6e 74 20 6e 5f 70 6f 69 6e 74 73 20 3d int n_points =
2c130 20 30 3b 0a 20 20 20 20 69 6e 74 20 6e 5f 6c 69 0;. int n_li
2c140 6e 65 73 74 72 69 6e 67 73 20 3d 20 30 3b 0a 20 nestrings = 0;.
2c150 20 20 20 69 6e 74 20 6e 5f 70 6f 6c 79 67 6f 6e int n_polygon
2c160 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e 74 20 69 s = 0;. int i
2c170 3b 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 ;. int iv;.
2c180 20 20 69 6e 74 20 69 62 3b 0a 20 20 20 20 64 6f int ib;. do
2c190 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f 75 62 uble x;. doub
2c1a0 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le y;. double
2c1b0 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 6d z;. double m
2c1c0 3b 0a 20 20 20 20 69 6e 74 20 65 6e 64 69 61 6e ;. int endian
2c1d0 5f 61 72 63 68 20 3d 20 67 61 69 61 45 6e 64 69 _arch = gaiaEndi
2c1e0 61 6e 41 72 63 68 20 28 29 3b 0a 20 20 20 20 67 anArch ();. g
2c1f0 61 69 61 50 6f 69 6e 74 50 74 72 20 70 74 3b 0a aiaPointPtr pt;.
2c200 20 20 20 20 67 61 69 61 4c 69 6e 65 73 74 72 69 gaiaLinestri
2c210 6e 67 50 74 72 20 6c 6e 3b 0a 20 20 20 20 67 61 ngPtr ln;. ga
2c220 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 67 3b iaPolygonPtr pg;
2c230 0a 20 20 20 20 67 61 69 61 52 69 6e 67 50 74 72 . gaiaRingPtr
2c240 20 72 6e 67 3b 0a 20 20 20 20 67 61 69 61 50 6f rng;. gaiaPo
2c250 69 6e 74 50 74 72 20 70 6f 69 6e 74 20 3d 20 4e intPtr point = N
2c260 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 4c 69 6e ULL;. gaiaLin
2c270 65 73 74 72 69 6e 67 50 74 72 20 6c 69 6e 65 20 estringPtr line
2c280 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 = NULL;. gaia
2c290 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f 6c 79 67 PolygonPtr polyg
2c2a0 20 3d 20 4e 55 4c 4c 3b 0a 0a 2f 2a 20 70 72 65 = NULL;../* pre
2c2b0 63 6f 6d 70 75 74 69 6e 67 20 74 68 65 20 72 65 computing the re
2c2c0 71 75 69 72 65 64 20 73 69 7a 65 20 2a 2f 0a 20 quired size */.
2c2d0 20 20 20 73 69 7a 65 20 3d 20 35 3b 09 09 09 2f size = 5;.../
2c2e0 2a 20 53 52 49 44 20 61 6e 64 20 74 65 72 6d 69 * SRID and termi
2c2f0 6e 61 74 69 6e 67 20 27 5c 30 27 20 2a 2f 0a 20 nating '\0' */.
2c300 20 20 20 70 74 20 3d 20 67 65 6f 6d 2d 3e 46 69 pt = geom->Fi
2c310 72 73 74 50 6f 69 6e 74 3b 0a 20 20 20 20 77 68 rstPoint;. wh
2c320 69 6c 65 20 28 70 74 29 0a 20 20 20 20 20 20 7b ile (pt). {
2c330 0a 09 20 20 70 6f 69 6e 74 20 3d 20 70 74 3b 0a .. point = pt;.
2c340 09 20 20 65 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 . entities++;..
2c350 20 20 6e 5f 70 6f 69 6e 74 73 2b 2b 3b 0a 09 20 n_points++;..
2c360 20 70 74 20 3d 20 70 74 2d 3e 4e 65 78 74 3b 0a pt = pt->Next;.
2c370 20 20 20 20 20 20 7d 0a 20 20 20 20 6c 6e 20 3d }. ln =
2c380 20 67 65 6f 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 geom->FirstLine
2c390 73 74 72 69 6e 67 3b 0a 20 20 20 20 77 68 69 6c string;. whil
2c3a0 65 20 28 6c 6e 29 0a 20 20 20 20 20 20 7b 0a 09 e (ln). {..
2c3b0 20 20 6c 69 6e 65 20 3d 20 6c 6e 3b 0a 09 20 20 line = ln;..
2c3c0 65 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 20 20 6e entities++;.. n
2c3d0 5f 6c 69 6e 65 73 74 72 69 6e 67 73 2b 2b 3b 0a _linestrings++;.
2c3e0 09 20 20 6c 6e 20 3d 20 6c 6e 2d 3e 4e 65 78 74 . ln = ln->Next
2c3f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 70 67 ;. }. pg
2c400 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 6f = geom->FirstPo
2c410 6c 79 67 6f 6e 3b 0a 20 20 20 20 77 68 69 6c 65 lygon;. while
2c420 20 28 70 67 29 0a 20 20 20 20 20 20 7b 0a 09 20 (pg). {..
2c430 20 70 6f 6c 79 67 20 3d 20 70 67 3b 0a 09 20 20 polyg = pg;..
2c440 65 6e 74 69 74 69 65 73 2b 2b 3b 0a 09 20 20 6e entities++;.. n
2c450 5f 70 6f 6c 79 67 6f 6e 73 2b 2b 3b 0a 09 20 20 _polygons++;..
2c460 70 67 20 3d 20 70 67 2d 3e 4e 65 78 74 3b 0a 20 pg = pg->Next;.
2c470 20 20 20 20 20 7d 0a 20 20 20 20 69 66 20 28 6e }. if (n
2c480 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 20 26 26 20 _points == 0 &&
2c490 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 20 n_polygons == 0
2c4a0 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 && n_linestrings
2c4b0 20 3d 3d 20 30 29 0a 09 72 65 74 75 72 6e 3b 0a == 0)..return;.
2c4c0 2f 2a 20 6f 6b 2c 20 77 65 20 63 61 6e 20 64 65 /* ok, we can de
2c4d0 74 65 72 6d 69 6e 65 20 74 68 65 20 67 65 6f 6d termine the geom
2c4e0 65 74 72 79 20 63 6c 61 73 73 20 2a 2f 0a 20 20 etry class */.
2c4f0 20 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d if (n_points =
2c500 3d 20 31 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 = 1 && n_linestr
2c510 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 ings == 0 && n_p
2c520 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 olygons == 0).
2c530 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f {.. if (geo
2c540 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 m->DeclaredType
2c550 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 == GAIA_MULTIPOI
2c560 4e 54 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 NT).. type
2c570 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e = GAIA_MULTIPOIN
2c580 54 3b 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 T;.. else if (g
2c590 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 eom->DeclaredTyp
2c5a0 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
2c5b0 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 RYCOLLECTION)..
2c5c0 20 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 type = GAIA
2c5d0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
2c5e0 49 4f 4e 3b 0a 09 20 20 65 6c 73 65 0a 09 20 20 ION;.. else..
2c5f0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
2c600 50 4f 49 4e 54 3b 0a 20 20 20 20 20 20 7d 0a 20 POINT;. }.
2c610 20 20 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f else if (n_po
2c620 69 6e 74 73 20 3e 20 31 20 26 26 20 6e 5f 6c 69 ints > 1 && n_li
2c630 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 26 nestrings == 0 &
2c640 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 & n_polygons ==
2c650 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 0). {.. if
2c660 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 (geom->Declared
2c670 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f Type == GAIA_GEO
2c680 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 METRYCOLLECTION)
2c690 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 47 .. type = G
2c6a0 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
2c6b0 45 43 54 49 4f 4e 3b 0a 09 20 20 65 6c 73 65 0a ECTION;.. else.
2c6c0 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 47 41 . type = GA
2c6d0 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a 20 IA_MULTIPOINT;.
2c6e0 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 }. else
2c6f0 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 if (n_points ==
2c700 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 0 && n_linestrin
2c710 67 73 20 3d 3d 20 31 20 26 26 20 6e 5f 70 6f 6c gs == 1 && n_pol
2c720 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 20 20 ygons == 0).
2c730 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d {.. if (geom-
2c740 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d >DeclaredType ==
2c750 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 GAIA_MULTILINES
2c760 54 52 49 4e 47 29 0a 09 20 20 20 20 20 20 74 79 TRING).. ty
2c770 70 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c pe = GAIA_MULTIL
2c780 49 4e 45 53 54 52 49 4e 47 3b 0a 09 20 20 65 6c INESTRING;.. el
2c790 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 se if (geom->Dec
2c7a0 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
2c7b0 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
2c7c0 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 74 79 70 TION).. typ
2c7d0 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 e = GAIA_GEOMETR
2c7e0 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 YCOLLECTION;..
2c7f0 65 6c 73 65 0a 09 20 20 20 20 20 20 74 79 70 65 else.. type
2c800 20 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 = GAIA_LINESTRI
2c810 4e 47 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 NG;. }.
2c820 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 else if (n_point
2c830 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 s == 0 && n_line
2c840 73 74 72 69 6e 67 73 20 3e 20 31 20 26 26 20 6e strings > 1 && n
2c850 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a _polygons == 0).
2c860 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 {.. if (g
2c870 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 eom->DeclaredTyp
2c880 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
2c890 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 RYCOLLECTION)..
2c8a0 20 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 type = GAIA
2c8b0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
2c8c0 49 4f 4e 3b 0a 09 20 20 65 6c 73 65 0a 09 20 20 ION;.. else..
2c8d0 20 20 20 20 74 79 70 65 20 3d 20 47 41 49 41 5f type = GAIA_
2c8e0 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 3b MULTILINESTRING;
2c8f0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 . }. els
2c900 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d e if (n_points =
2c910 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 = 0 && n_linestr
2c920 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 ings == 0 && n_p
2c930 6f 6c 79 67 6f 6e 73 20 3d 3d 20 31 29 0a 20 20 olygons == 1).
2c940 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f {.. if (geo
2c950 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 m->DeclaredType
2c960 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c == GAIA_MULTIPOL
2c970 59 47 4f 4e 29 0a 09 20 20 20 20 20 20 74 79 70 YGON).. typ
2c980 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
2c990 4c 59 47 4f 4e 3b 0a 09 20 20 65 6c 73 65 20 69 LYGON;.. else i
2c9a0 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 f (geom->Declare
2c9b0 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 dType == GAIA_GE
2c9c0 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e OMETRYCOLLECTION
2c9d0 29 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 ).. type =
2c9e0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
2c9f0 4c 45 43 54 49 4f 4e 3b 0a 09 20 20 65 6c 73 65 LECTION;.. else
2ca00 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 47 .. type = G
2ca10 41 49 41 5f 50 4f 4c 59 47 4f 4e 3b 0a 20 20 20 AIA_POLYGON;.
2ca20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 }. else if
2ca30 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d 20 30 20 (n_points == 0
2ca40 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 67 73 && n_linestrings
2ca50 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f 6c 79 67 == 0 && n_polyg
2ca60 6f 6e 73 20 3e 20 31 29 0a 20 20 20 20 20 20 7b ons > 1). {
2ca70 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 .. if (geom->De
2ca80 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 claredType == GA
2ca90 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
2caa0 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 74 79 CTION).. ty
2cab0 70 65 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 pe = GAIA_GEOMET
2cac0 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 20 RYCOLLECTION;..
2cad0 20 65 6c 73 65 0a 09 20 20 20 20 20 20 74 79 70 else.. typ
2cae0 65 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f e = GAIA_MULTIPO
2caf0 4c 59 47 4f 4e 3b 0a 20 20 20 20 20 20 7d 0a 20 LYGON;. }.
2cb00 20 20 20 65 6c 73 65 0a 09 74 79 70 65 20 3d 20 else..type =
2cb10 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
2cb20 4c 45 43 54 49 4f 4e 3b 0a 2f 2a 20 61 6e 64 20 LECTION;./* and
2cb30 6e 6f 77 20 77 65 20 63 6f 6d 70 75 74 65 20 74 now we compute t
2cb40 68 65 20 73 69 7a 65 20 6f 66 20 45 57 4b 42 20 he size of EWKB
2cb50 2a 2f 0a 20 20 20 20 73 69 7a 65 20 2b 3d 20 31 */. size += 1
2cb60 30 3b 09 09 09 2f 2a 20 68 65 61 64 65 72 20 73 0;.../* header s
2cb70 69 7a 65 20 2a 2f 0a 20 20 20 20 69 66 20 28 74 ize */. if (t
2cb80 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
2cb90 49 50 4f 49 4e 54 20 7c 7c 20 74 79 70 65 20 3d IPOINT || type =
2cba0 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 = GAIA_MULTILINE
2cbb0 53 54 52 49 4e 47 0a 09 7c 7c 20 74 79 70 65 20 STRING..|| type
2cbc0 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c == GAIA_MULTIPOL
2cbd0 59 47 4f 4e 20 7c 7c 20 74 79 70 65 20 3d 3d 20 YGON || type ==
2cbe0 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
2cbf0 4c 45 43 54 49 4f 4e 29 0a 09 73 69 7a 65 20 2b LECTION)..size +
2cc00 3d 20 38 3b 0a 20 20 20 20 70 6f 69 6e 74 20 3d = 8;. point =
2cc10 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 69 6e geom->FirstPoin
2cc20 74 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 6f t;. while (po
2cc30 69 6e 74 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 int). {..
2cc40 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 if (type == GAIA
2cc50 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c 7c 20 74 _MULTIPOINT || t
2cc60 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
2cc70 49 4c 49 4e 45 53 54 52 49 4e 47 0a 09 20 20 20 ILINESTRING..
2cc80 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 || type == GA
2cc90 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 20 IA_MULTIPOLYGON
2cca0 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f || type == GAIA_
2ccb0 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 GEOMETRYCOLLECTI
2ccc0 4f 4e 29 0a 09 20 20 20 20 20 20 73 69 7a 65 20 ON).. size
2ccd0 2b 3d 20 31 30 3b 0a 09 20 20 69 66 20 28 67 65 += 10;.. if (ge
2cce0 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
2ccf0 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 0a el == GAIA_XY_Z.
2cd00 09 20 20 20 20 20 20 7c 7c 20 67 65 6f 6d 2d 3e . || geom->
2cd10 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
2cd20 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 20 20 = GAIA_XY_M)..
2cd30 20 20 20 20 73 69 7a 65 20 2b 3d 20 34 38 3b 09 size += 48;.
2cd40 2f 2a 20 74 68 72 65 65 20 64 6f 75 62 6c 65 73 /* three doubles
2cd50 20 66 6f 72 20 65 61 63 68 20 50 4f 49 4e 54 20 for each POINT
2cd60 2a 2f 0a 09 20 20 65 6c 73 65 20 69 66 20 28 67 */.. else if (g
2cd70 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
2cd80 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
2cd90 5f 4d 29 0a 09 20 20 20 20 20 20 73 69 7a 65 20 _M).. size
2cda0 2b 3d 20 36 34 3b 09 2f 2a 20 66 6f 75 72 20 64 += 64;./* four d
2cdb0 6f 75 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 oubles for each
2cdc0 50 4f 49 4e 54 20 2a 2f 0a 09 20 20 65 6c 73 65 POINT */.. else
2cdd0 0a 09 20 20 20 20 20 20 73 69 7a 65 20 2b 3d 20 .. size +=
2cde0 33 32 3b 09 2f 2a 20 74 77 6f 20 64 6f 75 62 6c 32;./* two doubl
2cdf0 65 73 20 66 6f 72 20 65 61 63 68 20 50 4f 49 4e es for each POIN
2ce00 54 20 2a 2f 0a 09 20 20 70 6f 69 6e 74 20 3d 20 T */.. point =
2ce10 70 6f 69 6e 74 2d 3e 4e 65 78 74 3b 0a 20 20 20 point->Next;.
2ce20 20 20 20 7d 0a 20 20 20 20 6c 69 6e 65 20 3d 20 }. line =
2ce30 67 65 6f 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 73 geom->FirstLines
2ce40 74 72 69 6e 67 3b 0a 20 20 20 20 77 68 69 6c 65 tring;. while
2ce50 20 28 6c 69 6e 65 29 0a 20 20 20 20 20 20 7b 0a (line). {.
2ce60 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 . if (type == G
2ce70 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c AIA_MULTIPOINT |
2ce80 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d | type == GAIA_M
2ce90 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 0a 09 ULTILINESTRING..
2cea0 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 3d 3d || type ==
2ceb0 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 GAIA_MULTIPOLYG
2cec0 4f 4e 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 ON || type == GA
2ced0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
2cee0 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 73 69 CTION).. si
2cef0 7a 65 20 2b 3d 20 31 30 3b 0a 09 20 20 69 66 20 ze += 10;.. if
2cf00 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
2cf10 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
2cf20 5f 5a 0a 09 20 20 20 20 20 20 7c 7c 20 67 65 6f _Z.. || geo
2cf30 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
2cf40 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
2cf50 09 20 20 20 20 20 20 73 69 7a 65 20 2b 3d 20 38 . size += 8
2cf60 20 2b 20 28 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 + (line->Points
2cf70 20 2a 20 34 38 29 3b 09 2f 2a 20 74 68 72 65 65 * 48);./* three
2cf80 20 64 6f 75 62 6c 65 73 20 66 6f 72 20 65 61 63 doubles for eac
2cf90 68 20 56 45 52 54 45 58 20 2a 2f 0a 09 20 20 65 h VERTEX */.. e
2cfa0 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
2cfb0 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
2cfc0 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 GAIA_XY_Z_M)..
2cfd0 20 20 20 20 73 69 7a 65 20 2b 3d 20 38 20 2b 20 size += 8 +
2cfe0 28 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 20 2a 20 (line->Points *
2cff0 36 34 29 3b 09 2f 2a 20 66 6f 75 72 20 64 6f 75 64);./* four dou
2d000 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 56 45 bles for each VE
2d010 52 54 45 58 20 2a 2f 0a 09 20 20 65 6c 73 65 0a RTEX */.. else.
2d020 09 20 20 20 20 20 20 73 69 7a 65 20 2b 3d 20 38 . size += 8
2d030 20 2b 20 28 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 + (line->Points
2d040 20 2a 20 33 32 29 3b 09 2f 2a 20 74 77 6f 20 64 * 32);./* two d
2d050 6f 75 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 oubles for each
2d060 56 45 52 54 45 58 20 2a 2f 0a 09 20 20 6c 69 6e VERTEX */.. lin
2d070 65 20 3d 20 6c 69 6e 65 2d 3e 4e 65 78 74 3b 0a e = line->Next;.
2d080 20 20 20 20 20 20 7d 0a 20 20 20 20 70 6f 6c 79 }. poly
2d090 67 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 50 g = geom->FirstP
2d0a0 6f 6c 79 67 6f 6e 3b 0a 20 20 20 20 77 68 69 6c olygon;. whil
2d0b0 65 20 28 70 6f 6c 79 67 29 0a 20 20 20 20 20 20 e (polyg).
2d0c0 7b 0a 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d {.. if (type ==
2d0d0 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 GAIA_MULTIPOINT
2d0e0 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
2d0f0 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 _MULTILINESTRING
2d100 0a 09 20 20 20 20 20 20 7c 7c 20 74 79 70 65 20 .. || type
2d110 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 4c == GAIA_MULTIPOL
2d120 59 47 4f 4e 20 7c 7c 20 74 79 70 65 20 3d 3d 20 YGON || type ==
2d130 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c GAIA_GEOMETRYCOL
2d140 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 LECTION)..
2d150 73 69 7a 65 20 2b 3d 20 31 30 3b 0a 09 20 20 72 size += 10;.. r
2d160 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 65 ng = polyg->Exte
2d170 72 69 6f 72 3b 0a 09 20 20 69 66 20 28 67 65 6f rior;.. if (geo
2d180 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
2d190 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 0a 09 l == GAIA_XY_Z..
2d1a0 20 20 20 20 20 20 7c 7c 20 67 65 6f 6d 2d 3e 44 || geom->D
2d1b0 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
2d1c0 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 20 20 20 GAIA_XY_M)..
2d1d0 20 20 20 73 69 7a 65 20 2b 3d 20 31 36 20 2b 20 size += 16 +
2d1e0 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2a 20 34 (rng->Points * 4
2d1f0 38 29 3b 09 2f 2a 20 74 68 72 65 65 20 64 6f 75 8);./* three dou
2d200 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 56 45 bles for each VE
2d210 52 54 45 58 20 2a 2f 0a 09 20 20 65 6c 73 65 20 RTEX */.. else
2d220 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
2d230 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
2d240 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 20 20 20 20 _XY_Z_M)..
2d250 73 69 7a 65 20 2b 3d 20 31 36 20 2b 20 28 72 6e size += 16 + (rn
2d260 67 2d 3e 50 6f 69 6e 74 73 20 2a 20 36 34 29 3b g->Points * 64);
2d270 09 2f 2a 20 66 6f 75 72 20 64 6f 75 62 6c 65 73 ./* four doubles
2d280 20 66 6f 72 20 65 61 63 68 20 56 45 52 54 45 58 for each VERTEX
2d290 20 2a 2f 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 */.. else..
2d2a0 20 20 20 73 69 7a 65 20 2b 3d 20 31 36 20 2b 20 size += 16 +
2d2b0 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2a 20 33 (rng->Points * 3
2d2c0 32 29 3b 09 2f 2a 20 74 77 6f 20 64 6f 75 62 6c 2);./* two doubl
2d2d0 65 73 20 66 6f 72 20 65 61 63 68 20 56 45 52 54 es for each VERT
2d2e0 45 58 20 2a 2f 0a 09 20 20 66 6f 72 20 28 69 62 EX */.. for (ib
2d2f0 20 3d 20 30 3b 20 69 62 20 3c 20 70 6f 6c 79 67 = 0; ib < polyg
2d300 2d 3e 4e 75 6d 49 6e 74 65 72 69 6f 72 73 3b 20 ->NumInteriors;
2d310 69 62 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 72 ib++).. {...r
2d320 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 49 6e 74 65 ng = polyg->Inte
2d330 72 69 6f 72 73 20 2b 20 69 62 3b 0a 09 09 69 66 riors + ib;...if
2d340 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
2d350 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
2d360 59 5f 5a 0a 09 09 20 20 20 20 7c 7c 20 67 65 6f Y_Z... || geo
2d370 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
2d380 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a l == GAIA_XY_M).
2d390 09 09 20 20 20 20 73 69 7a 65 20 2b 3d 20 38 20 .. size += 8
2d3a0 2b 20 28 72 6e 67 2d 3e 50 6f 69 6e 74 73 20 2a + (rng->Points *
2d3b0 20 34 38 29 3b 09 2f 2a 20 74 68 72 65 65 20 64 48);./* three d
2d3c0 6f 75 62 6c 65 73 20 66 6f 72 20 65 61 63 68 20 oubles for each
2d3d0 56 45 52 54 45 58 20 2a 2f 0a 09 09 65 6c 73 65 VERTEX */...else
2d3e0 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e if (geom->Dimen
2d3f0 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
2d400 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 20 A_XY_Z_M)...
2d410 73 69 7a 65 20 2b 3d 20 38 20 2b 20 28 72 6e 67 size += 8 + (rng
2d420 2d 3e 50 6f 69 6e 74 73 20 2a 20 36 34 29 3b 09 ->Points * 64);.
2d430 2f 2a 20 66 6f 75 72 20 64 6f 75 62 6c 65 73 20 /* four doubles
2d440 66 6f 72 20 65 61 63 68 20 56 45 52 54 45 58 20 for each VERTEX
2d450 2a 2f 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 */...else...
2d460 73 69 7a 65 20 2b 3d 20 38 20 2b 20 28 72 6e 67 size += 8 + (rng
2d470 2d 3e 50 6f 69 6e 74 73 20 2a 20 33 32 29 3b 09 ->Points * 32);.
2d480 2f 2a 20 74 77 6f 20 64 6f 75 62 6c 65 73 20 66 /* two doubles f
2d490 6f 72 20 65 61 63 68 20 56 45 52 54 45 58 20 2a or each VERTEX *
2d4a0 2f 0a 09 20 20 20 20 7d 0a 09 20 20 70 6f 6c 79 /.. }.. poly
2d4b0 67 20 3d 20 70 6f 6c 79 67 2d 3e 4e 65 78 74 3b g = polyg->Next;
2d4c0 0a 20 20 20 20 20 20 7d 0a 2f 2a 20 61 6e 64 20 . }./* and
2d4d0 66 69 6e 61 6c 6c 79 20 77 65 20 62 75 69 6c 64 finally we build
2d4e0 20 74 68 65 20 45 57 4b 42 20 65 78 70 72 65 73 the EWKB expres
2d4f0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 70 74 72 20 sion */. ptr
2d500 3d 20 62 75 66 3b 0a 20 20 20 20 2a 70 74 72 2b = buf;. *ptr+
2d510 2b 20 3d 20 27 30 27 3b 09 09 2f 2a 20 6c 69 74 + = '0';../* lit
2d520 74 6c 65 20 65 6e 64 69 61 6e 20 62 79 74 65 20 tle endian byte
2d530 6f 72 64 65 72 20 2a 2f 0a 20 20 20 20 2a 70 74 order */. *pt
2d540 72 2b 2b 20 3d 20 27 31 27 3b 0a 20 20 20 20 67 r++ = '1';. g
2d550 61 69 61 45 78 70 6f 72 74 33 32 20 28 65 6e 64 aiaExport32 (end
2d560 69 61 6e 5f 62 75 66 2c 20 74 79 70 65 2c 20 31 ian_buf, type, 1
2d570 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
2d580 2f 2a 20 74 68 65 20 6d 61 69 6e 20 43 4c 41 53 /* the main CLAS
2d590 53 20 54 59 50 45 20 2a 2f 0a 20 20 20 20 66 6f S TYPE */. fo
2d5a0 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 33 3b r (i = 0; i < 3;
2d5b0 20 69 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 i++). {..
2d5c0 20 2f 2a 20 43 41 56 45 41 54 3a 20 74 68 65 20 /* CAVEAT: the
2d5d0 34 74 68 20 62 79 74 65 20 69 6e 20 50 6f 73 74 4th byte in Post
2d5e0 47 49 53 20 65 6e 63 6f 64 65 73 20 4d 2f 5a 20 GIS encodes M/Z
2d5f0 70 72 65 73 65 6e 63 65 20 21 21 21 21 20 2a 2f presence !!!! */
2d600 0a 09 20 20 73 70 72 69 6e 74 66 20 28 62 79 74 .. sprintf (byt
2d610 65 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 e, "%02X", endia
2d620 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 20 20 2a 70 n_buf[i]);.. *p
2d630 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a tr++ = byte[0];.
2d640 09 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 . *ptr++ = byte
2d650 5b 31 5d 3b 0a 20 20 20 20 20 20 7d 0a 2f 2a 20 [1];. }./*
2d660 6d 61 72 6b 69 6e 67 20 64 69 6d 65 6e 73 69 6f marking dimensio
2d670 6e 73 20 61 6e 64 20 4d 2f 5a 20 70 72 65 73 65 ns and M/Z prese
2d680 6e 63 65 20 2a 2f 0a 20 20 20 20 69 66 20 28 67 nce */. if (g
2d690 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
2d6a0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
2d6b0 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2a 70 74 ). {.. *pt
2d6c0 72 2b 2b 20 3d 20 27 41 27 3b 0a 09 20 20 2a 70 r++ = 'A';.. *p
2d6d0 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 20 20 20 20 tr++ = '0';.
2d6e0 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 20 }. else if
2d6f0 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
2d700 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
2d710 5f 4d 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2a _M). {.. *
2d720 70 74 72 2b 2b 20 3d 20 27 36 27 3b 0a 09 20 20 ptr++ = '6';..
2d730 2a 70 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 20 20 *ptr++ = '0';.
2d740 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 }. else i
2d750 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
2d760 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
2d770 58 59 5f 5a 5f 4d 29 0a 20 20 20 20 20 20 7b 0a XY_Z_M). {.
2d780 09 20 20 2a 70 74 72 2b 2b 20 3d 20 27 45 27 3b . *ptr++ = 'E';
2d790 0a 09 20 20 2a 70 74 72 2b 2b 20 3d 20 27 30 27 .. *ptr++ = '0'
2d7a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c ;. }. el
2d7b0 73 65 0a 20 20 20 20 20 20 7b 0a 09 20 20 2a 70 se. {.. *p
2d7c0 74 72 2b 2b 20 3d 20 27 32 27 3b 0a 09 20 20 2a tr++ = '2';.. *
2d7d0 70 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 20 20 20 ptr++ = '0';.
2d7e0 20 20 20 7d 0a 20 20 20 20 67 61 69 61 45 78 70 }. gaiaExp
2d7f0 6f 72 74 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 ort32 (endian_bu
2d800 66 2c 20 67 65 6f 6d 2d 3e 53 72 69 64 2c 20 31 f, geom->Srid, 1
2d810 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
2d820 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 for (i = 0;
2d830 69 20 3c 20 34 3b 20 69 2b 2b 29 0a 20 20 20 20 i < 4; i++).
2d840 20 20 7b 0a 09 20 20 73 70 72 69 6e 74 66 20 28 {.. sprintf (
2d850 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 65 6e byte, "%02X", en
2d860 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 20 dian_buf[i]);..
2d870 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 *ptr++ = byte[0
2d880 5d 3b 0a 09 20 20 2a 70 74 72 2b 2b 20 3d 20 62 ];.. *ptr++ = b
2d890 79 74 65 5b 31 5d 3b 0a 20 20 20 20 20 20 7d 0a yte[1];. }.
2d8a0 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 27 5c 30 *ptr++ = '\0
2d8b0 27 3b 0a 20 20 20 20 67 61 69 61 41 70 70 65 6e ';. gaiaAppen
2d8c0 64 54 6f 4f 75 74 42 75 66 66 65 72 20 28 6f 75 dToOutBuffer (ou
2d8d0 74 5f 62 75 66 2c 20 62 75 66 29 3b 0a 20 20 20 t_buf, buf);.
2d8e0 20 70 74 72 20 3d 20 62 75 66 3b 0a 20 20 20 20 ptr = buf;.
2d8f0 69 66 20 28 74 79 70 65 20 3d 3d 20 47 41 49 41 if (type == GAIA
2d900 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c 7c 20 74 _MULTIPOINT || t
2d910 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
2d920 49 4c 49 4e 45 53 54 52 49 4e 47 0a 09 7c 7c 20 ILINESTRING..||
2d930 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c type == GAIA_MUL
2d940 54 49 50 4f 4c 59 47 4f 4e 20 7c 7c 20 74 79 70 TIPOLYGON || typ
2d950 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 e == GAIA_GEOMET
2d960 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 20 20 RYCOLLECTION).
2d970 20 20 20 20 7b 0a 09 20 20 67 61 69 61 45 78 70 {.. gaiaExp
2d980 6f 72 74 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 ort32 (endian_bu
2d990 66 2c 20 65 6e 74 69 74 69 65 73 2c 20 31 2c 20 f, entities, 1,
2d9a0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a endian_arch);./*
2d9b0 20 69 74 27 73 20 61 20 63 6f 6c 6c 65 63 74 69 it's a collecti
2d9c0 6f 6e 3b 20 23 20 65 6e 74 69 74 69 65 73 20 2a on; # entities *
2d9d0 2f 0a 09 20 20 66 6f 72 20 28 69 20 3d 20 30 3b /.. for (i = 0;
2d9e0 20 69 20 3c 20 34 3b 20 69 2b 2b 29 0a 09 20 20 i < 4; i++)..
2d9f0 20 20 7b 0a 09 09 73 70 72 69 6e 74 66 20 28 62 {...sprintf (b
2da00 79 74 65 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 yte, "%02X", end
2da10 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 09 2a ian_buf[i]);...*
2da20 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b ptr++ = byte[0];
2da30 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 ...*ptr++ = byte
2da40 5b 31 5d 3b 0a 09 20 20 20 20 7d 0a 20 20 20 20 [1];.. }.
2da50 20 20 7d 0a 20 20 20 20 70 6f 69 6e 74 20 3d 20 }. point =
2da60 67 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 69 6e 74 geom->FirstPoint
2da70 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 6f 69 ;. while (poi
2da80 6e 74 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 nt). {.. i
2da90 66 20 28 28 70 74 72 20 2d 20 62 75 66 29 20 3e f ((ptr - buf) >
2daa0 20 31 30 32 34 29 0a 09 20 20 20 20 7b 0a 09 09 1024).. {...
2dab0 2f 2a 20 66 6c 75 73 68 69 6e 67 20 74 68 65 20 /* flushing the
2dac0 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 internal buffer
2dad0 2a 2f 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 27 5c */...*ptr++ = '\
2dae0 30 27 3b 0a 09 09 67 61 69 61 41 70 70 65 6e 64 0';...gaiaAppend
2daf0 54 6f 4f 75 74 42 75 66 66 65 72 20 28 6f 75 74 ToOutBuffer (out
2db00 5f 62 75 66 2c 20 62 75 66 29 3b 0a 09 09 70 74 _buf, buf);...pt
2db10 72 20 3d 20 62 75 66 3b 0a 09 20 20 20 20 7d 0a r = buf;.. }.
2db20 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 . if (type == G
2db30 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 20 7c AIA_MULTIPOINT |
2db40 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 | type == GAIA_G
2db50 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f EOMETRYCOLLECTIO
2db60 4e 29 0a 09 20 20 20 20 7b 0a 09 09 2a 70 74 72 N).. {...*ptr
2db70 2b 2b 20 3d 20 27 30 27 3b 0a 09 09 2a 70 74 72 ++ = '0';...*ptr
2db80 2b 2b 20 3d 20 27 31 27 3b 0a 09 09 2f 2a 20 69 ++ = '1';.../* i
2db90 74 27 73 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e t's a collection
2dba0 3a 20 74 68 65 20 43 4c 41 53 53 20 54 59 50 45 : the CLASS TYPE
2dbb0 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d 65 6e for this elemen
2dbc0 74 20 2a 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 t */...gaiaExpor
2dbd0 74 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c t32 (endian_buf,
2dbe0 20 47 41 49 41 5f 50 4f 49 4e 54 2c 20 31 2c 20 GAIA_POINT, 1,
2dbf0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
2dc00 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 for (i = 0; i <
2dc10 33 3b 20 69 2b 2b 29 0a 09 09 20 20 7b 0a 09 09 3; i++)... {...
2dc20 20 20 20 20 20 20 2f 2a 20 43 41 56 45 41 54 3a /* CAVEAT:
2dc30 20 74 68 65 20 34 74 68 20 62 79 74 65 20 69 6e the 4th byte in
2dc40 20 50 6f 73 74 47 49 53 20 65 6e 63 6f 64 65 73 PostGIS encodes
2dc50 20 4d 2f 5a 20 70 72 65 73 65 6e 63 65 20 21 21 M/Z presence !!
2dc60 21 21 20 2a 2f 0a 09 09 20 20 20 20 20 20 73 70 !! */... sp
2dc70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 rintf (byte, "%0
2dc80 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 2X", endian_buf[
2dc90 69 5d 29 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 i]);... *pt
2dca0 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 r++ = byte[0];..
2dcb0 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 . *ptr++ =
2dcc0 62 79 74 65 5b 31 5d 3b 0a 09 09 20 20 7d 0a 09 byte[1];... }..
2dcd0 09 2f 2a 20 6d 61 72 6b 69 6e 67 20 4d 2f 5a 20 ./* marking M/Z
2dce0 70 72 65 73 65 6e 63 65 20 2a 2f 0a 09 09 69 66 presence */...if
2dcf0 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
2dd00 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
2dd10 59 5f 5a 29 0a 09 09 20 20 20 20 2a 70 74 72 2b Y_Z)... *ptr+
2dd20 2b 20 3d 20 27 38 27 3b 0a 09 09 65 6c 73 65 20 + = '8';...else
2dd30 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
2dd40 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
2dd50 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 2a 70 74 _XY_M)... *pt
2dd60 72 2b 2b 20 3d 20 27 34 27 3b 0a 09 09 65 6c 73 r++ = '4';...els
2dd70 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
2dd80 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
2dd90 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 20 IA_XY_Z_M)...
2dda0 20 2a 70 74 72 2b 2b 20 3d 20 27 43 27 3b 0a 09 *ptr++ = 'C';..
2ddb0 09 65 6c 73 65 0a 09 09 20 20 20 20 2a 70 74 72 .else... *ptr
2ddc0 2b 2b 20 3d 20 27 30 27 3b 0a 09 09 2a 70 74 72 ++ = '0';...*ptr
2ddd0 2b 2b 20 3d 20 27 30 27 3b 0a 09 20 20 20 20 7d ++ = '0';.. }
2dde0 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 .. gaiaExport64
2ddf0 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 70 6f (endian_buf, po
2de00 69 6e 74 2d 3e 58 2c 20 31 2c 20 65 6e 64 69 61 int->X, 1, endia
2de10 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2a 2f n_arch);./* X */
2de20 0a 09 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 .. for (i = 0;
2de30 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 20 20 20 i < 8; i++)..
2de40 20 7b 0a 09 09 73 70 72 69 6e 74 66 20 28 62 79 {...sprintf (by
2de50 74 65 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 69 te, "%02X", endi
2de60 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 09 2a 70 an_buf[i]);...*p
2de70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a tr++ = byte[0];.
2de80 09 09 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b ..*ptr++ = byte[
2de90 31 5d 3b 0a 09 20 20 20 20 7d 0a 09 20 20 67 61 1];.. }.. ga
2dea0 69 61 45 78 70 6f 72 74 36 34 20 28 65 6e 64 69 iaExport64 (endi
2deb0 61 6e 5f 62 75 66 2c 20 70 6f 69 6e 74 2d 3e 59 an_buf, point->Y
2dec0 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
2ded0 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 20 20 66 6f );./* Y */.. fo
2dee0 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b r (i = 0; i < 8;
2def0 20 69 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 73 i++).. {...s
2df00 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 printf (byte, "%
2df10 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 02X", endian_buf
2df20 5b 69 5d 29 3b 0a 09 09 2a 70 74 72 2b 2b 20 3d [i]);...*ptr++ =
2df30 20 62 79 74 65 5b 30 5d 3b 0a 09 09 2a 70 74 72 byte[0];...*ptr
2df40 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 20 ++ = byte[1];..
2df50 20 20 20 7d 0a 09 20 20 69 66 20 28 67 65 6f 6d }.. if (geom
2df60 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
2df70 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 == GAIA_XY_Z)..
2df80 20 20 20 20 7b 0a 09 09 67 61 69 61 45 78 70 6f {...gaiaExpo
2df90 72 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 rt64 (endian_buf
2dfa0 2c 20 70 6f 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 , point->Z, 1, e
2dfb0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
2dfc0 5a 20 2a 2f 0a 09 09 66 6f 72 20 28 69 20 3d 20 Z */...for (i =
2dfd0 30 3b 20 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 0; i < 8; i++)..
2dfe0 09 20 20 7b 0a 09 09 20 20 20 20 20 20 73 70 72 . {... spr
2dff0 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 intf (byte, "%02
2e000 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 X", endian_buf[i
2e010 5d 29 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 ]);... *ptr
2e020 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 ++ = byte[0];...
2e030 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 62 *ptr++ = b
2e040 79 74 65 5b 31 5d 3b 0a 09 09 20 20 7d 0a 09 20 yte[1];... }..
2e050 20 20 20 7d 0a 09 20 20 65 6c 73 65 20 69 66 20 }.. else if
2e060 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e (geom->Dimension
2e070 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 Model == GAIA_XY
2e080 5f 4d 29 0a 09 20 20 20 20 7b 0a 09 09 67 61 69 _M).. {...gai
2e090 61 45 78 70 6f 72 74 36 34 20 28 65 6e 64 69 61 aExport64 (endia
2e0a0 6e 5f 62 75 66 2c 20 70 6f 69 6e 74 2d 3e 4d 2c n_buf, point->M,
2e0b0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
2e0c0 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 66 6f 72 20 ;./* M */...for
2e0d0 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 (i = 0; i < 8; i
2e0e0 2b 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 ++)... {...
2e0f0 20 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c sprintf (byte,
2e100 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f "%02X", endian_
2e110 62 75 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 buf[i]);...
2e120 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 *ptr++ = byte[0
2e130 5d 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b ];... *ptr+
2e140 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 + = byte[1];...
2e150 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 }.. }.. els
2e160 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
2e170 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
2e180 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 20 20 IA_XY_Z_M)..
2e190 7b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 {...gaiaExport64
2e1a0 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 70 6f (endian_buf, po
2e1b0 69 6e 74 2d 3e 5a 2c 20 31 2c 20 65 6e 64 69 61 int->Z, 1, endia
2e1c0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f n_arch);./* Z */
2e1d0 0a 09 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 ...for (i = 0; i
2e1e0 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 20 20 7b < 8; i++)... {
2e1f0 0a 09 09 20 20 20 20 20 20 73 70 72 69 6e 74 66 ... sprintf
2e200 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 (byte, "%02X",
2e210 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a endian_buf[i]);.
2e220 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 3d .. *ptr++ =
2e230 20 62 79 74 65 5b 30 5d 3b 0a 09 09 20 20 20 20 byte[0];...
2e240 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b *ptr++ = byte[
2e250 31 5d 3b 0a 09 09 20 20 7d 0a 09 09 67 61 69 61 1];... }...gaia
2e260 45 78 70 6f 72 74 36 34 20 28 65 6e 64 69 61 6e Export64 (endian
2e270 5f 62 75 66 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 _buf, point->M,
2e280 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
2e290 09 2f 2a 20 4d 20 2a 2f 0a 09 09 66 6f 72 20 28 ./* M */...for (
2e2a0 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 2b i = 0; i < 8; i+
2e2b0 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 +)... {...
2e2c0 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 sprintf (byte,
2e2d0 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 "%02X", endian_b
2e2e0 75 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 20 uf[i]);...
2e2f0 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d *ptr++ = byte[0]
2e300 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b ;... *ptr++
2e310 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 20 = byte[1];...
2e320 7d 0a 09 20 20 20 20 7d 0a 09 20 20 70 6f 69 6e }.. }.. poin
2e330 74 20 3d 20 70 6f 69 6e 74 2d 3e 4e 65 78 74 3b t = point->Next;
2e340 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 6c 69 6e . }. lin
2e350 65 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 74 4c e = geom->FirstL
2e360 69 6e 65 73 74 72 69 6e 67 3b 0a 20 20 20 20 77 inestring;. w
2e370 68 69 6c 65 20 28 6c 69 6e 65 29 0a 20 20 20 20 hile (line).
2e380 20 20 7b 0a 09 20 20 69 66 20 28 28 70 74 72 20 {.. if ((ptr
2e390 2d 20 62 75 66 29 20 3e 20 31 30 32 34 29 0a 09 - buf) > 1024)..
2e3a0 20 20 20 20 7b 0a 09 09 2f 2a 20 66 6c 75 73 68 {.../* flush
2e3b0 69 6e 67 20 74 68 65 20 69 6e 74 65 72 6e 61 6c ing the internal
2e3c0 20 62 75 66 66 65 72 20 2a 2f 0a 09 09 2a 70 74 buffer */...*pt
2e3d0 72 2b 2b 20 3d 20 27 5c 30 27 3b 0a 09 09 67 61 r++ = '\0';...ga
2e3e0 69 61 41 70 70 65 6e 64 54 6f 4f 75 74 42 75 66 iaAppendToOutBuf
2e3f0 66 65 72 20 28 6f 75 74 5f 62 75 66 2c 20 62 75 fer (out_buf, bu
2e400 66 29 3b 0a 09 09 70 74 72 20 3d 20 62 75 66 3b f);...ptr = buf;
2e410 0a 09 20 20 20 20 7d 0a 09 20 20 69 66 20 28 74 .. }.. if (t
2e420 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 ype == GAIA_MULT
2e430 49 4c 49 4e 45 53 54 52 49 4e 47 20 7c 7c 20 74 ILINESTRING || t
2e440 79 70 65 20 3d 3d 20 47 41 49 41 5f 47 45 4f 4d ype == GAIA_GEOM
2e450 45 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a ETRYCOLLECTION).
2e460 09 20 20 20 20 7b 0a 09 09 2a 70 74 72 2b 2b 20 . {...*ptr++
2e470 3d 20 27 30 27 3b 0a 09 09 2a 70 74 72 2b 2b 20 = '0';...*ptr++
2e480 3d 20 27 31 27 3b 0a 09 09 2f 2a 20 69 74 27 73 = '1';.../* it's
2e490 20 61 20 63 6f 6c 6c 65 63 74 69 6f 6e 3a 20 74 a collection: t
2e4a0 68 65 20 43 4c 41 53 53 20 54 59 50 45 20 66 6f he CLASS TYPE fo
2e4b0 72 20 74 68 69 73 20 65 6c 65 6d 65 6e 74 20 2a r this element *
2e4c0 2f 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 /...gaiaExport32
2e4d0 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 47 41 (endian_buf, GA
2e4e0 49 41 5f 4c 49 4e 45 53 54 52 49 4e 47 2c 20 31 IA_LINESTRING, 1
2e4f0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
2e500 09 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 ..for (i = 0; i
2e510 3c 20 33 3b 20 69 2b 2b 29 0a 09 09 20 20 7b 0a < 3; i++)... {.
2e520 09 09 20 20 20 20 20 20 2f 2a 20 43 41 56 45 41 .. /* CAVEA
2e530 54 3a 20 74 68 65 20 34 74 68 20 62 79 74 65 20 T: the 4th byte
2e540 69 6e 20 50 6f 73 74 47 49 53 20 65 6e 63 6f 64 in PostGIS encod
2e550 65 73 20 4d 2f 5a 20 70 72 65 73 65 6e 63 65 20 es M/Z presence
2e560 21 21 21 21 20 2a 2f 0a 09 09 20 20 20 20 20 20 !!!! */...
2e570 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 sprintf (byte, "
2e580 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 %02X", endian_bu
2e590 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 20 2a f[i]);... *
2e5a0 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b ptr++ = byte[0];
2e5b0 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 ... *ptr++
2e5c0 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 20 7d = byte[1];... }
2e5d0 0a 09 09 2f 2a 20 6d 61 72 6b 69 6e 67 20 4d 2f .../* marking M/
2e5e0 5a 20 70 72 65 73 65 6e 63 65 20 2a 2f 0a 09 09 Z presence */...
2e5f0 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
2e600 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
2e610 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 2a 70 74 _XY_Z)... *pt
2e620 72 2b 2b 20 3d 20 27 38 27 3b 0a 09 09 65 6c 73 r++ = '8';...els
2e630 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
2e640 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
2e650 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 20 2a IA_XY_M)... *
2e660 70 74 72 2b 2b 20 3d 20 27 34 27 3b 0a 09 09 65 ptr++ = '4';...e
2e670 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
2e680 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
2e690 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 GAIA_XY_Z_M)...
2e6a0 20 20 20 2a 70 74 72 2b 2b 20 3d 20 27 43 27 3b *ptr++ = 'C';
2e6b0 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 2a 70 ...else... *p
2e6c0 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 09 09 2a 70 tr++ = '0';...*p
2e6d0 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 09 20 20 20 tr++ = '0';..
2e6e0 20 7d 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 }.. gaiaExport
2e6f0 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 32 (endian_buf,
2e700 6c 69 6e 65 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c line->Points, 1,
2e710 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
2e720 2a 20 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 * # points */..
2e730 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c for (i = 0; i <
2e740 20 34 3b 20 69 2b 2b 29 0a 09 20 20 20 20 7b 0a 4; i++).. {.
2e750 09 09 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c ..sprintf (byte,
2e760 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f "%02X", endian_
2e770 62 75 66 5b 69 5d 29 3b 0a 09 09 2a 70 74 72 2b buf[i]);...*ptr+
2e780 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 2a + = byte[0];...*
2e790 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b ptr++ = byte[1];
2e7a0 0a 09 20 20 20 20 7d 0a 09 20 20 66 6f 72 20 28 .. }.. for (
2e7b0 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 6e iv = 0; iv < lin
2e7c0 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b 29 e->Points; iv++)
2e7d0 0a 09 20 20 20 20 7b 0a 09 09 69 66 20 28 28 70 .. {...if ((p
2e7e0 74 72 20 2d 20 62 75 66 29 20 3e 20 31 30 32 34 tr - buf) > 1024
2e7f0 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
2e800 2f 2a 20 66 6c 75 73 68 69 6e 67 20 74 68 65 20 /* flushing the
2e810 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 internal buffer
2e820 2a 2f 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b */... *ptr+
2e830 2b 20 3d 20 27 5c 30 27 3b 0a 09 09 20 20 20 20 + = '\0';...
2e840 20 20 67 61 69 61 41 70 70 65 6e 64 54 6f 4f 75 gaiaAppendToOu
2e850 74 42 75 66 66 65 72 20 28 6f 75 74 5f 62 75 66 tBuffer (out_buf
2e860 2c 20 62 75 66 29 3b 0a 09 09 20 20 20 20 20 20 , buf);...
2e870 70 74 72 20 3d 20 62 75 66 3b 0a 09 09 20 20 7d ptr = buf;... }
2e880 0a 09 09 67 61 69 61 4c 69 6e 65 47 65 74 50 6f ...gaiaLineGetPo
2e890 69 6e 74 20 28 6c 69 6e 65 2c 20 69 76 2c 20 26 int (line, iv, &
2e8a0 78 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a x, &y, &z, &m);.
2e8b0 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 ..gaiaExport64 (
2e8c0 65 6e 64 69 61 6e 5f 62 75 66 2c 20 78 2c 20 31 endian_buf, x, 1
2e8d0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
2e8e0 2f 2a 20 58 20 2a 2f 0a 09 09 66 6f 72 20 28 69 /* X */...for (i
2e8f0 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 2b 2b = 0; i < 8; i++
2e900 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
2e910 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 sprintf (byte, "
2e920 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 %02X", endian_bu
2e930 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 20 2a f[i]);... *
2e940 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b ptr++ = byte[0];
2e950 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 ... *ptr++
2e960 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 20 7d = byte[1];... }
2e970 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 ...gaiaExport64
2e980 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 79 2c 20 (endian_buf, y,
2e990 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
2e9a0 09 2f 2a 20 59 20 2a 2f 0a 09 09 66 6f 72 20 28 ./* Y */...for (
2e9b0 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 2b i = 0; i < 8; i+
2e9c0 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 +)... {...
2e9d0 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 sprintf (byte,
2e9e0 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 "%02X", endian_b
2e9f0 75 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 20 uf[i]);...
2ea00 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d *ptr++ = byte[0]
2ea10 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b ;... *ptr++
2ea20 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 20 = byte[1];...
2ea30 7d 0a 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 }...if (geom->Di
2ea40 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
2ea50 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 7b GAIA_XY_Z)... {
2ea60 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
2ea70 6f 72 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 ort64 (endian_bu
2ea80 66 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f f, z, 1, endian_
2ea90 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 arch);./* Z */..
2eaa0 09 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 . for (i =
2eab0 30 3b 20 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 0; i < 8; i++)..
2eac0 09 09 7b 0a 09 09 09 20 20 20 20 73 70 72 69 6e ..{.... sprin
2ead0 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 tf (byte, "%02X"
2eae0 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 , endian_buf[i])
2eaf0 3b 0a 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 ;.... *ptr++
2eb00 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 09 20 20 = byte[0];....
2eb10 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b *ptr++ = byte[
2eb20 31 5d 3b 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 1];....}... }..
2eb30 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
2eb40 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
2eb50 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 = GAIA_XY_M)...
2eb60 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 {... gaiaE
2eb70 78 70 6f 72 74 36 34 20 28 65 6e 64 69 61 6e 5f xport64 (endian_
2eb80 62 75 66 2c 20 6d 2c 20 31 2c 20 65 6e 64 69 61 buf, m, 1, endia
2eb90 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f n_arch);./* M */
2eba0 0a 09 09 20 20 20 20 20 20 66 6f 72 20 28 69 20 ... for (i
2ebb0 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 2b 2b 29 = 0; i < 8; i++)
2ebc0 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 73 70 72 ....{.... spr
2ebd0 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 intf (byte, "%02
2ebe0 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 X", endian_buf[i
2ebf0 5d 29 3b 0a 09 09 09 20 20 20 20 2a 70 74 72 2b ]);.... *ptr+
2ec00 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 09 + = byte[0];....
2ec10 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 *ptr++ = byt
2ec20 65 5b 31 5d 3b 0a 09 09 09 7d 0a 09 09 20 20 7d e[1];....}... }
2ec30 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d ...else if (geom
2ec40 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c ->DimensionModel
2ec50 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 == GAIA_XY_Z_M)
2ec60 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 ... {... g
2ec70 61 69 61 45 78 70 6f 72 74 36 34 20 28 65 6e 64 aiaExport64 (end
2ec80 69 61 6e 5f 62 75 66 2c 20 7a 2c 20 31 2c 20 65 ian_buf, z, 1, e
2ec90 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
2eca0 5a 20 2a 2f 0a 09 09 20 20 20 20 20 20 66 6f 72 Z */... for
2ecb0 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 (i = 0; i < 8;
2ecc0 69 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 i++)....{....
2ecd0 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 sprintf (byte,
2ece0 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 "%02X", endian_b
2ecf0 75 66 5b 69 5d 29 3b 0a 09 09 09 20 20 20 20 2a uf[i]);.... *
2ed00 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b ptr++ = byte[0];
2ed10 0a 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d .... *ptr++ =
2ed20 20 62 79 74 65 5b 31 5d 3b 0a 09 09 09 7d 0a 09 byte[1];....}..
2ed30 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
2ed40 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c t64 (endian_buf,
2ed50 20 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 m, 1, endian_ar
2ed60 63 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 20 ch);./* M */...
2ed70 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b for (i = 0;
2ed80 20 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 09 i < 8; i++)....
2ed90 7b 0a 09 09 09 20 20 20 20 73 70 72 69 6e 74 66 {.... sprintf
2eda0 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 (byte, "%02X",
2edb0 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a endian_buf[i]);.
2edc0 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 ... *ptr++ =
2edd0 62 79 74 65 5b 30 5d 3b 0a 09 09 09 20 20 20 20 byte[0];....
2ede0 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d *ptr++ = byte[1]
2edf0 3b 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 20 20 ;....}... }..
2ee00 20 20 7d 0a 09 20 20 6c 69 6e 65 20 3d 20 6c 69 }.. line = li
2ee10 6e 65 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 ne->Next;.
2ee20 7d 0a 20 20 20 20 70 6f 6c 79 67 20 3d 20 67 65 }. polyg = ge
2ee30 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c 79 67 6f 6e om->FirstPolygon
2ee40 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 6f 6c ;. while (pol
2ee50 79 67 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 yg). {.. i
2ee60 66 20 28 28 70 74 72 20 2d 20 62 75 66 29 20 3e f ((ptr - buf) >
2ee70 20 31 30 32 34 29 0a 09 20 20 20 20 7b 0a 09 09 1024).. {...
2ee80 2f 2a 20 66 6c 75 73 68 69 6e 67 20 74 68 65 20 /* flushing the
2ee90 69 6e 74 65 72 6e 61 6c 20 62 75 66 66 65 72 20 internal buffer
2eea0 2a 2f 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 27 5c */...*ptr++ = '\
2eeb0 30 27 3b 0a 09 09 67 61 69 61 41 70 70 65 6e 64 0';...gaiaAppend
2eec0 54 6f 4f 75 74 42 75 66 66 65 72 20 28 6f 75 74 ToOutBuffer (out
2eed0 5f 62 75 66 2c 20 62 75 66 29 3b 0a 09 09 70 74 _buf, buf);...pt
2eee0 72 20 3d 20 62 75 66 3b 0a 09 20 20 20 20 7d 0a r = buf;.. }.
2eef0 09 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20 47 . if (type == G
2ef00 41 49 41 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e AIA_MULTIPOLYGON
2ef10 20 7c 7c 20 74 79 70 65 20 3d 3d 20 47 41 49 41 || type == GAIA
2ef20 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
2ef30 49 4f 4e 29 0a 09 20 20 20 20 7b 0a 09 09 2a 70 ION).. {...*p
2ef40 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 09 09 2a 70 tr++ = '0';...*p
2ef50 74 72 2b 2b 20 3d 20 27 31 27 3b 0a 09 09 2f 2a tr++ = '1';.../*
2ef60 20 69 74 27 73 20 61 20 63 6f 6c 6c 65 63 74 69 it's a collecti
2ef70 6f 6e 3a 20 74 68 65 20 43 4c 41 53 53 20 54 59 on: the CLASS TY
2ef80 50 45 20 66 6f 72 20 74 68 69 73 20 65 6c 65 6d PE for this elem
2ef90 65 6e 74 20 2a 2f 0a 09 09 67 61 69 61 45 78 70 ent */...gaiaExp
2efa0 6f 72 74 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 ort32 (endian_bu
2efb0 66 2c 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 2c f, GAIA_POLYGON,
2efc0 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
2efd0 3b 0a 09 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 ;...for (i = 0;
2efe0 69 20 3c 20 33 3b 20 69 2b 2b 29 0a 09 09 20 20 i < 3; i++)...
2eff0 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 43 41 56 {... /* CAV
2f000 45 41 54 3a 20 74 68 65 20 34 74 68 20 62 79 74 EAT: the 4th byt
2f010 65 20 69 6e 20 50 6f 73 74 47 49 53 20 65 6e 63 e in PostGIS enc
2f020 6f 64 65 73 20 4d 2f 5a 20 70 72 65 73 65 6e 63 odes M/Z presenc
2f030 65 20 21 21 21 21 20 2a 2f 0a 09 09 20 20 20 20 e !!!! */...
2f040 20 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c sprintf (byte,
2f050 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f "%02X", endian_
2f060 62 75 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 20 buf[i]);...
2f070 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 *ptr++ = byte[0
2f080 5d 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 2b ];... *ptr+
2f090 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 20 + = byte[1];...
2f0a0 20 7d 0a 09 09 2f 2a 20 6d 61 72 6b 69 6e 67 20 }.../* marking
2f0b0 4d 2f 5a 20 70 72 65 73 65 6e 63 65 20 2a 2f 0a M/Z presence */.
2f0c0 09 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 ..if (geom->Dime
2f0d0 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
2f0e0 49 41 5f 58 59 5f 5a 29 0a 09 09 20 20 20 20 2a IA_XY_Z)... *
2f0f0 70 74 72 2b 2b 20 3d 20 27 38 27 3b 0a 09 09 65 ptr++ = '8';...e
2f100 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 lse if (geom->Di
2f110 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
2f120 47 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 20 GAIA_XY_M)...
2f130 20 2a 70 74 72 2b 2b 20 3d 20 27 34 27 3b 0a 09 *ptr++ = '4';..
2f140 09 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e .else if (geom->
2f150 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
2f160 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 = GAIA_XY_Z_M)..
2f170 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 27 43 . *ptr++ = 'C
2f180 27 3b 0a 09 09 65 6c 73 65 0a 09 09 20 20 20 20 ';...else...
2f190 2a 70 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 09 09 *ptr++ = '0';...
2f1a0 2a 70 74 72 2b 2b 20 3d 20 27 30 27 3b 0a 09 20 *ptr++ = '0';..
2f1b0 20 20 20 7d 0a 09 20 20 67 61 69 61 45 78 70 6f }.. gaiaExpo
2f1c0 72 74 33 32 20 28 65 6e 64 69 61 6e 5f 62 75 66 rt32 (endian_buf
2f1d0 2c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 , polyg->NumInte
2f1e0 72 69 6f 72 73 20 2b 20 31 2c 20 31 2c 20 65 6e riors + 1, 1, en
2f1f0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 dian_arch);./* #
2f200 20 72 69 6e 67 73 20 2a 2f 0a 09 20 20 66 6f 72 rings */.. for
2f210 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 34 3b 20 (i = 0; i < 4;
2f220 69 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 73 70 i++).. {...sp
2f230 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 rintf (byte, "%0
2f240 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 2X", endian_buf[
2f250 69 5d 29 3b 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 i]);...*ptr++ =
2f260 62 79 74 65 5b 30 5d 3b 0a 09 09 2a 70 74 72 2b byte[0];...*ptr+
2f270 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 20 20 + = byte[1];..
2f280 20 20 7d 0a 09 20 20 72 6e 67 20 3d 20 70 6f 6c }.. rng = pol
2f290 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 20 yg->Exterior;..
2f2a0 20 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 65 gaiaExport32 (e
2f2b0 6e 64 69 61 6e 5f 62 75 66 2c 20 72 6e 67 2d 3e ndian_buf, rng->
2f2c0 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 Points, 1, endia
2f2d0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f n_arch);./* # po
2f2e0 69 6e 74 73 20 2d 20 65 78 74 65 72 69 6f 72 20 ints - exterior
2f2f0 72 69 6e 67 20 2a 2f 0a 09 20 20 66 6f 72 20 28 ring */.. for (
2f300 69 20 3d 20 30 3b 20 69 20 3c 20 34 3b 20 69 2b i = 0; i < 4; i+
2f310 2b 29 0a 09 20 20 20 20 7b 0a 09 09 73 70 72 69 +).. {...spri
2f320 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 58 ntf (byte, "%02X
2f330 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d ", endian_buf[i]
2f340 29 3b 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 62 79 );...*ptr++ = by
2f350 74 65 5b 30 5d 3b 0a 09 09 2a 70 74 72 2b 2b 20 te[0];...*ptr++
2f360 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 20 20 20 20 = byte[1];..
2f370 7d 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 30 }.. for (iv = 0
2f380 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e ; iv < rng->Poin
2f390 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
2f3a0 0a 09 09 69 66 20 28 28 70 74 72 20 2d 20 62 75 ...if ((ptr - bu
2f3b0 66 29 20 3e 20 31 30 32 34 29 0a 09 09 20 20 7b f) > 1024)... {
2f3c0 0a 09 09 20 20 20 20 20 20 2f 2a 20 66 6c 75 73 ... /* flus
2f3d0 68 69 6e 67 20 74 68 65 20 69 6e 74 65 72 6e 61 hing the interna
2f3e0 6c 20 62 75 66 66 65 72 20 2a 2f 0a 09 09 20 20 l buffer */...
2f3f0 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 27 5c 30 *ptr++ = '\0
2f400 27 3b 0a 09 09 20 20 20 20 20 20 67 61 69 61 41 ';... gaiaA
2f410 70 70 65 6e 64 54 6f 4f 75 74 42 75 66 66 65 72 ppendToOutBuffer
2f420 20 28 6f 75 74 5f 62 75 66 2c 20 62 75 66 29 3b (out_buf, buf);
2f430 0a 09 09 20 20 20 20 20 20 70 74 72 20 3d 20 62 ... ptr = b
2f440 75 66 3b 0a 09 09 20 20 7d 0a 09 09 67 61 69 61 uf;... }...gaia
2f450 52 69 6e 67 47 65 74 50 6f 69 6e 74 20 28 72 6e RingGetPoint (rn
2f460 67 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 g, iv, &x, &y, &
2f470 7a 2c 20 26 6d 29 3b 0a 09 09 67 61 69 61 45 78 z, &m);...gaiaEx
2f480 70 6f 72 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 port64 (endian_b
2f490 75 66 2c 20 78 2c 20 31 2c 20 65 6e 64 69 61 6e uf, x, 1, endian
2f4a0 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 65 _arch);./* X - e
2f4b0 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a xterior ring */.
2f4c0 09 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 ..for (i = 0; i
2f4d0 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 20 20 7b 0a < 8; i++)... {.
2f4e0 09 09 20 20 20 20 20 20 73 70 72 69 6e 74 66 20 .. sprintf
2f4f0 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 65 (byte, "%02X", e
2f500 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 ndian_buf[i]);..
2f510 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 . *ptr++ =
2f520 62 79 74 65 5b 30 5d 3b 0a 09 09 20 20 20 20 20 byte[0];...
2f530 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 *ptr++ = byte[1
2f540 5d 3b 0a 09 09 20 20 7d 0a 09 09 67 61 69 61 45 ];... }...gaiaE
2f550 78 70 6f 72 74 36 34 20 28 65 6e 64 69 61 6e 5f xport64 (endian_
2f560 62 75 66 2c 20 79 2c 20 31 2c 20 65 6e 64 69 61 buf, y, 1, endia
2f570 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d 20 n_arch);./* Y -
2f580 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f exterior ring */
2f590 0a 09 09 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 ...for (i = 0; i
2f5a0 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 20 20 7b < 8; i++)... {
2f5b0 0a 09 09 20 20 20 20 20 20 73 70 72 69 6e 74 66 ... sprintf
2f5c0 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 (byte, "%02X",
2f5d0 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a endian_buf[i]);.
2f5e0 09 09 20 20 20 20 20 20 2a 70 74 72 2b 2b 20 3d .. *ptr++ =
2f5f0 20 62 79 74 65 5b 30 5d 3b 0a 09 09 20 20 20 20 byte[0];...
2f600 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b *ptr++ = byte[
2f610 31 5d 3b 0a 09 09 20 20 7d 0a 09 09 69 66 20 28 1];... }...if (
2f620 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d geom->DimensionM
2f630 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f odel == GAIA_XY_
2f640 5a 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 Z)... {...
2f650 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 65 gaiaExport64 (e
2f660 6e 64 69 61 6e 5f 62 75 66 2c 20 7a 2c 20 31 2c ndian_buf, z, 1,
2f670 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f endian_arch);./
2f680 2a 20 5a 20 2a 2f 0a 09 09 20 20 20 20 20 20 66 * Z */... f
2f690 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 or (i = 0; i < 8
2f6a0 3b 20 69 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 ; i++)....{....
2f6b0 20 20 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 sprintf (byte
2f6c0 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e , "%02X", endian
2f6d0 5f 62 75 66 5b 69 5d 29 3b 0a 09 09 09 20 20 20 _buf[i]);....
2f6e0 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 *ptr++ = byte[0
2f6f0 5d 3b 0a 09 09 09 20 20 20 20 2a 70 74 72 2b 2b ];.... *ptr++
2f700 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 09 7d = byte[1];....}
2f710 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 ... }...else if
2f720 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f (geom->Dimensio
2f730 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 nModel == GAIA_X
2f740 59 5f 4d 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 Y_M)... {...
2f750 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
2f760 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 6d 2c 20 (endian_buf, m,
2f770 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 1, endian_arch);
2f780 09 2f 2a 20 4d 20 2a 2f 0a 09 09 20 20 20 20 20 ./* M */...
2f790 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c for (i = 0; i <
2f7a0 20 38 3b 20 69 2b 2b 29 0a 09 09 09 7b 0a 09 09 8; i++)....{...
2f7b0 09 20 20 20 20 73 70 72 69 6e 74 66 20 28 62 79 . sprintf (by
2f7c0 74 65 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 69 te, "%02X", endi
2f7d0 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 09 09 20 an_buf[i]);....
2f7e0 20 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 *ptr++ = byte
2f7f0 5b 30 5d 3b 0a 09 09 09 20 20 20 20 2a 70 74 72 [0];.... *ptr
2f800 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 ++ = byte[1];...
2f810 09 7d 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 20 .}... }...else
2f820 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
2f830 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
2f840 5f 58 59 5f 5a 5f 4d 29 0a 09 09 20 20 7b 0a 09 _XY_Z_M)... {..
2f850 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
2f860 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c t64 (endian_buf,
2f870 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 z, 1, endian_ar
2f880 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 20 ch);./* Z */...
2f890 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b for (i = 0;
2f8a0 20 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 09 i < 8; i++)....
2f8b0 7b 0a 09 09 09 20 20 20 20 73 70 72 69 6e 74 66 {.... sprintf
2f8c0 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 (byte, "%02X",
2f8d0 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a endian_buf[i]);.
2f8e0 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 ... *ptr++ =
2f8f0 62 79 74 65 5b 30 5d 3b 0a 09 09 09 20 20 20 20 byte[0];....
2f900 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d *ptr++ = byte[1]
2f910 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 67 ;....}... g
2f920 61 69 61 45 78 70 6f 72 74 36 34 20 28 65 6e 64 aiaExport64 (end
2f930 69 61 6e 5f 62 75 66 2c 20 6d 2c 20 31 2c 20 65 ian_buf, m, 1, e
2f940 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
2f950 4d 20 2a 2f 0a 09 09 20 20 20 20 20 20 66 6f 72 M */... for
2f960 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 (i = 0; i < 8;
2f970 69 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 i++)....{....
2f980 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 sprintf (byte,
2f990 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 "%02X", endian_b
2f9a0 75 66 5b 69 5d 29 3b 0a 09 09 09 20 20 20 20 2a uf[i]);.... *
2f9b0 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b ptr++ = byte[0];
2f9c0 0a 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d .... *ptr++ =
2f9d0 20 62 79 74 65 5b 31 5d 3b 0a 09 09 09 7d 0a 09 byte[1];....}..
2f9e0 09 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 66 . }.. }.. f
2f9f0 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 20 3c or (ib = 0; ib <
2fa00 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 polyg->NumInter
2fa10 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 20 20 iors; ib++)..
2fa20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c 79 67 {...rng = polyg
2fa30 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 69 62 ->Interiors + ib
2fa40 3b 0a 09 09 67 61 69 61 45 78 70 6f 72 74 33 32 ;...gaiaExport32
2fa50 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 72 6e (endian_buf, rn
2fa60 67 2d 3e 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e g->Points, 1, en
2fa70 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 dian_arch);./* #
2fa80 20 70 6f 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 points - interi
2fa90 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 66 6f 72 or ring */...for
2faa0 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 34 3b 20 (i = 0; i < 4;
2fab0 69 2b 2b 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 i++)... {...
2fac0 20 20 20 73 70 72 69 6e 74 66 20 28 62 79 74 65 sprintf (byte
2fad0 2c 20 22 25 30 32 58 22 2c 20 65 6e 64 69 61 6e , "%02X", endian
2fae0 5f 62 75 66 5b 69 5d 29 3b 0a 09 09 20 20 20 20 _buf[i]);...
2faf0 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b *ptr++ = byte[
2fb00 30 5d 3b 0a 09 09 20 20 20 20 20 20 2a 70 74 72 0];... *ptr
2fb10 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b 0a 09 09 ++ = byte[1];...
2fb20 20 20 7d 0a 09 09 66 6f 72 20 28 69 76 20 3d 20 }...for (iv =
2fb30 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
2fb40 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 7b nts; iv++)... {
2fb50 0a 09 09 20 20 20 20 20 20 69 66 20 28 28 70 74 ... if ((pt
2fb60 72 20 2d 20 62 75 66 29 20 3e 20 31 30 32 34 29 r - buf) > 1024)
2fb70 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 2f 2a 20 ....{.... /*
2fb80 66 6c 75 73 68 69 6e 67 20 74 68 65 20 69 6e 74 flushing the int
2fb90 65 72 6e 61 6c 20 62 75 66 66 65 72 20 2a 2f 0a ernal buffer */.
2fba0 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 ... *ptr++ =
2fbb0 27 5c 30 27 3b 0a 09 09 09 20 20 20 20 67 61 69 '\0';.... gai
2fbc0 61 41 70 70 65 6e 64 54 6f 4f 75 74 42 75 66 66 aAppendToOutBuff
2fbd0 65 72 20 28 6f 75 74 5f 62 75 66 2c 20 62 75 66 er (out_buf, buf
2fbe0 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 3d 20 );.... ptr =
2fbf0 62 75 66 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 buf;....}...
2fc00 20 20 67 61 69 61 52 69 6e 67 47 65 74 50 6f 69 gaiaRingGetPoi
2fc10 6e 74 20 28 72 6e 67 2c 20 69 76 2c 20 26 78 2c nt (rng, iv, &x,
2fc20 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 &y, &z, &m);...
2fc30 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 gaiaExport
2fc40 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 64 (endian_buf,
2fc50 78 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 x, 1, endian_arc
2fc60 68 29 3b 09 2f 2a 20 58 20 2d 20 69 6e 74 65 72 h);./* X - inter
2fc70 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 ior ring */...
2fc80 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 for (i = 0;
2fc90 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 09 7b i < 8; i++)....{
2fca0 0a 09 09 09 20 20 20 20 73 70 72 69 6e 74 66 20 .... sprintf
2fcb0 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c 20 65 (byte, "%02X", e
2fcc0 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b 0a 09 ndian_buf[i]);..
2fcd0 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 62 .. *ptr++ = b
2fce0 79 74 65 5b 30 5d 3b 0a 09 09 09 20 20 20 20 2a yte[0];.... *
2fcf0 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b ptr++ = byte[1];
2fd00 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 67 61 ....}... ga
2fd10 69 61 45 78 70 6f 72 74 36 34 20 28 65 6e 64 69 iaExport64 (endi
2fd20 61 6e 5f 62 75 66 2c 20 79 2c 20 31 2c 20 65 6e an_buf, y, 1, en
2fd30 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 dian_arch);./* Y
2fd40 20 2d 20 69 6e 74 65 72 69 6f 72 20 72 69 6e 67 - interior ring
2fd50 20 2a 2f 0a 09 09 20 20 20 20 20 20 66 6f 72 20 */... for
2fd60 28 69 20 3d 20 30 3b 20 69 20 3c 20 38 3b 20 69 (i = 0; i < 8; i
2fd70 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 ++)....{....
2fd80 73 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 sprintf (byte, "
2fd90 25 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 %02X", endian_bu
2fda0 66 5b 69 5d 29 3b 0a 09 09 09 20 20 20 20 2a 70 f[i]);.... *p
2fdb0 74 72 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a tr++ = byte[0];.
2fdc0 09 09 09 20 20 20 20 2a 70 74 72 2b 2b 20 3d 20 ... *ptr++ =
2fdd0 62 79 74 65 5b 31 5d 3b 0a 09 09 09 7d 0a 09 09 byte[1];....}...
2fde0 20 20 20 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e if (geom->
2fdf0 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
2fe00 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 09 09 = GAIA_XY_Z)....
2fe10 7b 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 70 {.... gaiaExp
2fe20 6f 72 74 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 ort64 (endian_bu
2fe30 66 2c 20 7a 2c 20 31 2c 20 65 6e 64 69 61 6e 5f f, z, 1, endian_
2fe40 61 72 63 68 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 arch);./* Z */..
2fe50 09 09 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 .. for (i = 0
2fe60 3b 20 69 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 ; i < 8; i++)...
2fe70 09 20 20 20 20 20 20 7b 0a 09 09 09 09 20 20 73 . {..... s
2fe80 70 72 69 6e 74 66 20 28 62 79 74 65 2c 20 22 25 printf (byte, "%
2fe90 30 32 58 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 02X", endian_buf
2fea0 5b 69 5d 29 3b 0a 09 09 09 09 20 20 2a 70 74 72 [i]);..... *ptr
2feb0 2b 2b 20 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 ++ = byte[0];...
2fec0 09 09 20 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 .. *ptr++ = byt
2fed0 65 5b 31 5d 3b 0a 09 09 09 20 20 20 20 20 20 7d e[1];.... }
2fee0 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c ....}... el
2fef0 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
2ff00 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
2ff10 41 49 41 5f 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 AIA_XY_M)....{..
2ff20 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
2ff30 36 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 64 (endian_buf,
2ff40 6d 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 m, 1, endian_arc
2ff50 68 29 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 09 20 h);./* M */....
2ff60 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 for (i = 0; i
2ff70 20 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 09 20 20 < 8; i++)....
2ff80 20 20 20 20 7b 0a 09 09 09 09 20 20 73 70 72 69 {..... spri
2ff90 6e 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 58 ntf (byte, "%02X
2ffa0 22 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d ", endian_buf[i]
2ffb0 29 3b 0a 09 09 09 09 20 20 2a 70 74 72 2b 2b 20 );..... *ptr++
2ffc0 3d 20 62 79 74 65 5b 30 5d 3b 0a 09 09 09 09 20 = byte[0];.....
2ffd0 20 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 *ptr++ = byte[1
2ffe0 5d 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 ];.... }...
2fff0 09 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 65 20 .}... else
30000 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 if (geom->Dimens
30010 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 ionModel == GAIA
30020 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b 0a 09 09 _XY_Z_M)....{...
30030 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 . gaiaExport6
30040 34 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 7a 4 (endian_buf, z
30050 2c 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 , 1, endian_arch
30060 29 3b 09 2f 2a 20 5a 20 2a 2f 0a 09 09 09 20 20 );./* Z */....
30070 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 for (i = 0; i
30080 3c 20 38 3b 20 69 2b 2b 29 0a 09 09 09 20 20 20 < 8; i++)....
30090 20 20 20 7b 0a 09 09 09 09 20 20 73 70 72 69 6e {..... sprin
300a0 74 66 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 tf (byte, "%02X"
300b0 2c 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 , endian_buf[i])
300c0 3b 0a 09 09 09 09 20 20 2a 70 74 72 2b 2b 20 3d ;..... *ptr++ =
300d0 20 62 79 74 65 5b 30 5d 3b 0a 09 09 09 09 20 20 byte[0];.....
300e0 2a 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d *ptr++ = byte[1]
300f0 3b 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 ;.... }....
30100 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
30110 20 28 65 6e 64 69 61 6e 5f 62 75 66 2c 20 6d 2c (endian_buf, m,
30120 20 31 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 1, endian_arch)
30130 3b 09 2f 2a 20 4d 20 2a 2f 0a 09 09 09 20 20 20 ;./* M */....
30140 20 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c for (i = 0; i <
30150 20 38 3b 20 69 2b 2b 29 0a 09 09 09 20 20 20 20 8; i++)....
30160 20 20 7b 0a 09 09 09 09 20 20 73 70 72 69 6e 74 {..... sprint
30170 66 20 28 62 79 74 65 2c 20 22 25 30 32 58 22 2c f (byte, "%02X",
30180 20 65 6e 64 69 61 6e 5f 62 75 66 5b 69 5d 29 3b endian_buf[i]);
30190 0a 09 09 09 09 20 20 2a 70 74 72 2b 2b 20 3d 20 ..... *ptr++ =
301a0 62 79 74 65 5b 30 5d 3b 0a 09 09 09 09 20 20 2a byte[0];..... *
301b0 70 74 72 2b 2b 20 3d 20 62 79 74 65 5b 31 5d 3b ptr++ = byte[1];
301c0 0a 09 09 09 20 20 20 20 20 20 7d 0a 09 09 09 7d .... }....}
301d0 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 ... }.. }..
301e0 20 70 6f 6c 79 67 20 3d 20 70 6f 6c 79 67 2d 3e polyg = polyg->
301f0 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 2f Next;. }../
30200 2a 20 74 65 72 6d 69 6e 61 74 69 6e 67 20 74 68 * terminating th
30210 65 20 45 57 4b 42 20 73 74 72 69 6e 67 20 2a 2f e EWKB string */
30220 0a 20 20 20 20 2a 70 74 72 20 3d 20 27 5c 30 27 . *ptr = '\0'
30230 3b 0a 20 20 20 20 67 61 69 61 41 70 70 65 6e 64 ;. gaiaAppend
30240 54 6f 4f 75 74 42 75 66 66 65 72 20 28 6f 75 74 ToOutBuffer (out
30250 5f 62 75 66 2c 20 62 75 66 29 3b 0a 7d 0a 0a 73 _buf, buf);.}..s
30260 74 61 74 69 63 20 69 6e 74 0a 63 68 65 63 6b 46 tatic int.checkF
30270 67 66 54 79 70 65 44 69 6d 73 20 28 69 6e 74 20 gfTypeDims (int
30280 66 67 66 5f 74 79 70 65 2c 20 69 6e 74 20 66 67 fgf_type, int fg
30290 66 5f 64 69 6d 73 2c 20 69 6e 74 20 2a 74 79 70 f_dims, int *typ
302a0 65 2c 20 69 6e 74 20 2a 64 69 6d 73 29 0a 7b 0a e, int *dims).{.
302b0 2f 2a 20 76 61 6c 69 64 61 74 69 6e 67 20 54 79 /* validating Ty
302c0 70 65 20 61 6e 64 20 63 6f 6f 72 64 69 6e 61 74 pe and coordinat
302d0 65 20 44 69 6d 65 6e 73 69 6f 6e 73 20 66 6f 72 e Dimensions for
302e0 20 61 6e 20 46 47 46 20 47 65 6f 6d 65 74 72 79 an FGF Geometry
302f0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 74 20 3d 20 */. int t =
30300 2d 31 3b 0a 20 20 20 20 69 6e 74 20 64 20 3d 20 -1;. int d =
30310 2d 31 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28 -1;. switch (
30320 66 67 66 5f 74 79 70 65 29 0a 20 20 20 20 20 20 fgf_type).
30330 7b 0a 20 20 20 20 20 20 63 61 73 65 20 31 3a 0a {. case 1:.
30340 09 20 20 74 20 3d 20 47 41 49 41 5f 50 4f 49 4e . t = GAIA_POIN
30350 54 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 T;.. break;.
30360 20 20 20 63 61 73 65 20 32 3a 0a 09 20 20 74 20 case 2:.. t
30370 3d 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 4e = GAIA_LINESTRIN
30380 47 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 G;.. break;.
30390 20 20 20 63 61 73 65 20 33 3a 0a 09 20 20 74 20 case 3:.. t
303a0 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 3b 0a = GAIA_POLYGON;.
303b0 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
303c0 63 61 73 65 20 34 3a 0a 09 20 20 74 20 3d 20 47 case 4:.. t = G
303d0 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e 54 3b 0a AIA_MULTIPOINT;.
303e0 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 . break;.
303f0 63 61 73 65 20 35 3a 0a 09 20 20 74 20 3d 20 47 case 5:.. t = G
30400 41 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 AIA_MULTILINESTR
30410 49 4e 47 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 ING;.. break;.
30420 20 20 20 20 20 63 61 73 65 20 36 3a 0a 09 20 20 case 6:..
30430 74 20 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f t = GAIA_MULTIPO
30440 4c 59 47 4f 4e 3b 0a 09 20 20 62 72 65 61 6b 3b LYGON;.. break;
30450 0a 20 20 20 20 20 20 63 61 73 65 20 37 3a 0a 09 . case 7:..
30460 20 20 74 20 3d 20 47 41 49 41 5f 47 45 4f 4d 45 t = GAIA_GEOME
30470 54 52 59 43 4f 4c 4c 45 43 54 49 4f 4e 3b 0a 09 TRYCOLLECTION;..
30480 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d break;. }
30490 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28 66 67 ;. switch (fg
304a0 66 5f 64 69 6d 73 29 0a 20 20 20 20 20 20 7b 0a f_dims). {.
304b0 20 20 20 20 20 20 63 61 73 65 20 30 3a 0a 09 20 case 0:..
304c0 20 64 20 3d 20 47 41 49 41 5f 58 59 3b 0a 09 20 d = GAIA_XY;..
304d0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 break;. ca
304e0 73 65 20 31 3a 0a 09 20 20 64 20 3d 20 47 41 49 se 1:.. d = GAI
304f0 41 5f 58 59 5f 5a 3b 0a 09 20 20 62 72 65 61 6b A_XY_Z;.. break
30500 3b 0a 20 20 20 20 20 20 63 61 73 65 20 32 3a 0a ;. case 2:.
30510 09 20 20 64 20 3d 20 47 41 49 41 5f 58 59 5f 4d . d = GAIA_XY_M
30520 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
30530 20 20 63 61 73 65 20 33 3a 0a 09 20 20 64 20 3d case 3:.. d =
30540 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 3b 0a 09 20 GAIA_XY_Z_M;..
30550 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 3b break;. };
30560 0a 20 20 20 20 69 66 20 28 74 20 3c 20 30 20 7c . if (t < 0 |
30570 7c 20 64 20 3c 20 30 29 0a 09 72 65 74 75 72 6e | d < 0)..return
30580 20 30 3b 0a 20 20 20 20 2a 74 79 70 65 20 3d 20 0;. *type =
30590 74 3b 0a 20 20 20 20 2a 64 69 6d 73 20 3d 20 64 t;. *dims = d
305a0 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a ;. return 1;.
305b0 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 70 6f }..static int.po
305c0 69 6e 74 46 72 6f 6d 46 67 66 20 28 67 61 69 61 intFromFgf (gaia
305d0 47 65 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d GeomCollPtr geom
305e0 2c 20 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 , int endian_arc
305f0 68 2c 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 h, const unsigne
30600 64 20 63 68 61 72 20 2a 62 6c 6f 62 2c 0a 09 20 d char *blob,..
30610 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e unsigned in
30620 74 20 73 69 7a 65 2c 20 75 6e 73 69 67 6e 65 64 t size, unsigned
30630 20 69 6e 74 20 2a 63 6f 6e 73 75 6d 65 64 29 0a int *consumed).
30640 7b 0a 2f 2a 20 64 65 63 6f 64 69 6e 67 20 61 20 {./* decoding a
30650 50 4f 49 4e 54 20 47 65 6f 6d 65 74 72 79 20 66 POINT Geometry f
30660 72 6f 6d 20 46 47 46 20 20 2a 2f 0a 20 20 20 20 rom FGF */.
30670 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f double x;. do
30680 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 uble y;. doub
30690 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le z;. double
306a0 20 6d 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 m;. unsigned
306b0 20 69 6e 74 20 73 7a 20 3d 20 73 69 7a 65 3b 0a int sz = size;.
306c0 20 20 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e const unsign
306d0 65 64 20 63 68 61 72 20 2a 70 74 72 20 3d 20 62 ed char *ptr = b
306e0 6c 6f 62 3b 0a 20 20 20 20 69 6e 74 20 74 3b 0a lob;. int t;.
306f0 20 20 20 20 69 6e 74 20 64 3b 0a 20 20 20 20 69 int d;. i
30700 6e 74 20 67 65 6f 6d 5f 74 79 70 65 3b 0a 20 20 nt geom_type;.
30710 20 20 69 6e 74 20 64 69 6d 73 3b 0a 20 20 20 20 int dims;.
30720 69 6e 74 20 6e 64 69 6d 73 3b 0a 0a 2f 2a 20 63 int ndims;../* c
30730 68 65 63 6b 69 6e 67 20 47 65 6f 6d 65 74 72 79 hecking Geometry
30740 20 54 79 70 65 20 61 6e 64 20 44 69 6d 73 20 2a Type and Dims *
30750 2f 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 38 /. if (sz < 8
30760 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 )..return 0;.
30770 20 74 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 t = gaiaImport3
30780 32 20 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 2 (ptr, GAIA_LIT
30790 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 TLE_ENDIAN, endi
307a0 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 64 20 an_arch);. d
307b0 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 = gaiaImport32 (
307c0 70 74 72 20 2b 20 34 2c 20 47 41 49 41 5f 4c 49 ptr + 4, GAIA_LI
307d0 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 TTLE_ENDIAN, end
307e0 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 69 ian_arch);. i
307f0 66 20 28 21 63 68 65 63 6b 46 67 66 54 79 70 65 f (!checkFgfType
30800 44 69 6d 73 20 28 74 2c 20 64 2c 20 26 67 65 6f Dims (t, d, &geo
30810 6d 5f 74 79 70 65 2c 20 26 64 69 6d 73 29 29 0a m_type, &dims)).
30820 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 69 .return 0;. i
30830 66 20 28 67 65 6f 6d 5f 74 79 70 65 20 21 3d 20 f (geom_type !=
30840 47 41 49 41 5f 50 4f 49 4e 54 29 0a 09 72 65 74 GAIA_POINT)..ret
30850 75 72 6e 20 30 3b 0a 20 20 20 20 70 74 72 20 2b urn 0;. ptr +
30860 3d 20 38 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 38 = 8;. sz -= 8
30870 3b 0a 0a 20 20 20 20 69 66 20 28 64 69 6d 73 20 ;.. if (dims
30880 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a == GAIA_XY_Z_M).
30890 09 6e 64 69 6d 73 20 3d 20 34 3b 0a 20 20 20 20 .ndims = 4;.
308a0 65 6c 73 65 20 69 66 20 28 64 69 6d 73 20 3d 3d else if (dims ==
308b0 20 47 41 49 41 5f 58 59 5f 5a 20 7c 7c 20 64 69 GAIA_XY_Z || di
308c0 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 ms == GAIA_XY_M)
308d0 0a 09 6e 64 69 6d 73 20 3d 20 33 3b 0a 20 20 20 ..ndims = 3;.
308e0 20 65 6c 73 65 0a 09 6e 64 69 6d 73 20 3d 20 32 else..ndims = 2
308f0 3b 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 28 ;. if (sz < (
30900 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 20 6e (unsigned int) n
30910 64 69 6d 73 20 2a 20 38 29 29 0a 09 72 65 74 75 dims * 8))..retu
30920 72 6e 20 30 3b 0a 20 20 20 20 69 66 20 28 63 6f rn 0;. if (co
30930 6e 73 75 6d 65 64 29 0a 09 2a 63 6f 6e 73 75 6d nsumed)..*consum
30940 65 64 20 3d 20 38 20 2b 20 28 6e 64 69 6d 73 20 ed = 8 + (ndims
30950 2a 20 38 29 3b 0a 20 20 20 20 69 66 20 28 64 69 * 8);. if (di
30960 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 ms == GAIA_XY_Z)
30970 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 70 . {.. /* p
30980 61 72 73 69 6e 67 20 61 20 50 4f 49 4e 54 20 5a arsing a POINT Z
30990 20 2a 2f 0a 09 20 20 78 20 3d 20 67 61 69 61 49 */.. x = gaiaI
309a0 6d 70 6f 72 74 36 34 20 28 70 74 72 2c 20 47 41 mport64 (ptr, GA
309b0 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
309c0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
309d0 09 20 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 . y = gaiaImpor
309e0 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 47 41 t64 (ptr + 8, GA
309f0 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
30a00 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
30a10 09 20 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 . z = gaiaImpor
30a20 74 36 34 20 28 70 74 72 20 2b 20 31 36 2c 20 47 t64 (ptr + 16, G
30a30 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
30a40 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b N, endian_arch);
30a50 0a 09 20 20 6d 20 3d 20 30 2e 30 3b 0a 20 20 20 .. m = 0.0;.
30a60 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 20 69 66 }. else if
30a70 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 (dims == GAIA_X
30a80 59 5f 4d 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 Y_M). {..
30a90 2f 2a 20 70 61 72 73 69 6e 67 20 74 68 65 20 50 /* parsing the P
30aa0 4f 49 4e 54 4d 20 2a 2f 0a 09 20 20 78 20 3d 20 OINTM */.. x =
30ab0 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 gaiaImport64 (pt
30ac0 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 r, GAIA_LITTLE_E
30ad0 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
30ae0 63 68 29 3b 0a 09 20 20 79 20 3d 20 67 61 69 61 ch);.. y = gaia
30af0 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Import64 (ptr +
30b00 38 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 8, GAIA_LITTLE_E
30b10 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
30b20 63 68 29 3b 0a 09 20 20 6d 20 3d 20 67 61 69 61 ch);.. m = gaia
30b30 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Import64 (ptr +
30b40 31 36 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 16, GAIA_LITTLE_
30b50 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
30b60 72 63 68 29 3b 0a 09 20 20 7a 20 3d 20 30 2e 30 rch);.. z = 0.0
30b70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c ;. }. el
30b80 73 65 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 se if (dims == G
30b90 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 20 20 20 20 AIA_XY_Z_M).
30ba0 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 69 6e {.. /* parsin
30bb0 67 20 74 68 65 20 50 4f 49 4e 54 5a 4d 20 2a 2f g the POINTZM */
30bc0 0a 09 20 20 78 20 3d 20 67 61 69 61 49 6d 70 6f .. x = gaiaImpo
30bd0 72 74 36 34 20 28 70 74 72 2c 20 47 41 49 41 5f rt64 (ptr, GAIA_
30be0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
30bf0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 ndian_arch);..
30c00 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 y = gaiaImport64
30c10 20 28 70 74 72 20 2b 20 38 2c 20 47 41 49 41 5f (ptr + 8, GAIA_
30c20 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
30c30 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 20 ndian_arch);..
30c40 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 z = gaiaImport64
30c50 20 28 70 74 72 20 2b 20 31 36 2c 20 47 41 49 41 (ptr + 16, GAIA
30c60 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 _LITTLE_ENDIAN,
30c70 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 20 endian_arch);..
30c80 20 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 m = gaiaImport6
30c90 34 20 28 70 74 72 20 2b 20 32 34 2c 20 47 41 49 4 (ptr + 24, GAI
30ca0 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
30cb0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 endian_arch);.
30cc0 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 0a }. else.
30cd0 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 70 61 {.. /* pa
30ce0 72 73 69 6e 67 20 74 68 65 20 50 4f 49 4e 54 20 rsing the POINT
30cf0 2a 2f 0a 09 20 20 78 20 3d 20 67 61 69 61 49 6d */.. x = gaiaIm
30d00 70 6f 72 74 36 34 20 28 70 74 72 2c 20 47 41 49 port64 (ptr, GAI
30d10 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
30d20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
30d30 20 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 y = gaiaImport
30d40 36 34 20 28 70 74 72 20 2b 20 38 2c 20 47 41 49 64 (ptr + 8, GAI
30d50 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
30d60 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
30d70 20 20 7a 20 3d 20 30 2e 30 3b 0a 09 20 20 6d 20 z = 0.0;.. m
30d80 3d 20 30 2e 30 3b 0a 20 20 20 20 20 20 7d 0a 0a = 0.0;. }..
30d90 20 20 20 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 if (geom->Di
30da0 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 mensionModel ==
30db0 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 67 61 GAIA_XY_Z_M)..ga
30dc0 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 65 6f 6d iaAddPointToGeom
30dd0 43 6f 6c 6c 58 59 5a 4d 20 28 67 65 6f 6d 2c 20 CollXYZM (geom,
30de0 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 20 20 20 x, y, z, m);.
30df0 20 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e else if (geom->
30e00 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d DimensionModel =
30e10 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a 09 67 61 = GAIA_XY_Z)..ga
30e20 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 65 6f 6d iaAddPointToGeom
30e30 43 6f 6c 6c 58 59 5a 20 28 67 65 6f 6d 2c 20 78 CollXYZ (geom, x
30e40 2c 20 79 2c 20 7a 29 3b 0a 20 20 20 20 65 6c 73 , y, z);. els
30e50 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 e if (geom->Dime
30e60 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 nsionModel == GA
30e70 49 41 5f 58 59 5f 4d 29 0a 09 67 61 69 61 41 64 IA_XY_M)..gaiaAd
30e80 64 50 6f 69 6e 74 54 6f 47 65 6f 6d 43 6f 6c 6c dPointToGeomColl
30e90 58 59 4d 20 28 67 65 6f 6d 2c 20 78 2c 20 79 2c XYM (geom, x, y,
30ea0 20 6d 29 3b 0a 20 20 20 20 65 6c 73 65 0a 09 67 m);. else..g
30eb0 61 69 61 41 64 64 50 6f 69 6e 74 54 6f 47 65 6f aiaAddPointToGeo
30ec0 6d 43 6f 6c 6c 20 28 67 65 6f 6d 2c 20 78 2c 20 mColl (geom, x,
30ed0 79 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 y);. return 1
30ee0 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 76 6f 69 64 ;.}..static void
30ef0 0a 73 65 74 46 67 66 56 65 72 74 65 78 20 28 69 .setFgfVertex (i
30f00 6e 74 20 64 69 6d 73 2c 20 64 6f 75 62 6c 65 20 nt dims, double
30f10 2a 63 6f 6f 72 64 73 2c 20 69 6e 74 20 69 76 2c *coords, int iv,
30f20 20 64 6f 75 62 6c 65 20 78 2c 20 64 6f 75 62 6c double x, doubl
30f30 65 20 79 2c 20 64 6f 75 62 6c 65 20 7a 2c 0a 09 e y, double z,..
30f40 20 20 20 20 20 20 64 6f 75 62 6c 65 20 6d 29 0a double m).
30f50 7b 0a 2f 2a 20 73 65 74 74 69 6e 67 20 61 6e 20 {./* setting an
30f60 46 47 46 20 76 65 72 74 65 78 20 61 63 63 6f 72 FGF vertex accor
30f70 69 67 6e 6c 79 20 74 6f 20 64 69 6d 65 6e 73 69 ignly to dimensi
30f80 6f 6e 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 64 ons */. if (d
30f90 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a ims == GAIA_XY_Z
30fa0 5f 4d 29 0a 09 67 61 69 61 53 65 74 50 6f 69 6e _M)..gaiaSetPoin
30fb0 74 58 59 5a 4d 20 28 63 6f 6f 72 64 73 2c 20 69 tXYZM (coords, i
30fc0 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a v, x, y, z, m);.
30fd0 20 20 20 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 if (dims ==
30fe0 47 41 49 41 5f 58 59 5f 5a 29 0a 09 67 61 69 61 GAIA_XY_Z)..gaia
30ff0 53 65 74 50 6f 69 6e 74 58 59 5a 20 28 63 6f 6f SetPointXYZ (coo
31000 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a rds, iv, x, y, z
31010 29 3b 0a 20 20 20 20 69 66 20 28 64 69 6d 73 20 );. if (dims
31020 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 67 == GAIA_XY_M)..g
31030 61 69 61 53 65 74 50 6f 69 6e 74 58 59 4d 20 28 aiaSetPointXYM (
31040 63 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 coords, iv, x, y
31050 2c 20 6d 29 3b 0a 20 20 20 20 69 66 20 28 64 69 , m);. if (di
31060 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 29 0a 09 ms == GAIA_XY)..
31070 67 61 69 61 53 65 74 50 6f 69 6e 74 20 28 63 6f gaiaSetPoint (co
31080 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 29 3b ords, iv, x, y);
31090 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 6c .}..static int.l
310a0 69 6e 65 73 74 72 69 6e 67 46 72 6f 6d 46 67 66 inestringFromFgf
310b0 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
310c0 72 20 67 65 6f 6d 2c 20 69 6e 74 20 65 6e 64 69 r geom, int endi
310d0 61 6e 5f 61 72 63 68 2c 0a 09 09 20 20 20 63 6f an_arch,... co
310e0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 nst unsigned cha
310f0 72 20 2a 62 6c 6f 62 2c 20 75 6e 73 69 67 6e 65 r *blob, unsigne
31100 64 20 69 6e 74 20 73 69 7a 65 2c 0a 09 09 20 20 d int size,...
31110 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 2a 63 unsigned int *c
31120 6f 6e 73 75 6d 65 64 29 0a 7b 0a 2f 2a 20 64 65 onsumed).{./* de
31130 63 6f 64 69 6e 67 20 61 20 4c 49 4e 45 53 54 52 coding a LINESTR
31140 49 4e 47 20 47 65 6f 6d 65 74 72 79 20 66 72 6f ING Geometry fro
31150 6d 20 46 47 46 20 20 2a 2f 0a 20 20 20 20 67 61 m FGF */. ga
31160 69 61 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 iaLinestringPtr
31170 6c 6e 3b 0a 20 20 20 20 69 6e 74 20 70 74 73 3b ln;. int pts;
31180 0a 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 . int iv;.
31190 20 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 double x;. d
311a0 6f 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 ouble y;. dou
311b0 62 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c ble z;. doubl
311c0 65 20 6d 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 e m;. unsigne
311d0 64 20 69 6e 74 20 6c 6e 5f 73 7a 3b 0a 20 20 20 d int ln_sz;.
311e0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 7a unsigned int sz
311f0 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 63 6f 6e = size;. con
31200 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 st unsigned char
31210 20 2a 70 74 72 20 3d 20 62 6c 6f 62 3b 0a 20 20 *ptr = blob;.
31220 20 20 69 6e 74 20 74 3b 0a 20 20 20 20 69 6e 74 int t;. int
31230 20 64 3b 0a 20 20 20 20 69 6e 74 20 67 65 6f 6d d;. int geom
31240 5f 74 79 70 65 3b 0a 20 20 20 20 69 6e 74 20 64 _type;. int d
31250 69 6d 73 3b 0a 20 20 20 20 69 6e 74 20 6e 64 69 ims;. int ndi
31260 6d 73 3b 0a 0a 2f 2a 20 63 68 65 63 6b 69 6e 67 ms;../* checking
31270 20 47 65 6f 6d 65 74 72 79 20 54 79 70 65 20 61 Geometry Type a
31280 6e 64 20 44 69 6d 73 20 2a 2f 0a 20 20 20 20 69 nd Dims */. i
31290 66 20 28 73 7a 20 3c 20 38 29 0a 09 72 65 74 75 f (sz < 8)..retu
312a0 72 6e 20 30 3b 0a 20 20 20 20 74 20 3d 20 67 61 rn 0;. t = ga
312b0 69 61 49 6d 70 6f 72 74 33 32 20 28 70 74 72 2c iaImport32 (ptr,
312c0 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
312d0 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
312e0 29 3b 0a 20 20 20 20 64 20 3d 20 67 61 69 61 49 );. d = gaiaI
312f0 6d 70 6f 72 74 33 32 20 28 70 74 72 20 2b 20 34 mport32 (ptr + 4
31300 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e , GAIA_LITTLE_EN
31310 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
31320 68 29 3b 0a 20 20 20 20 69 66 20 28 21 63 68 65 h);. if (!che
31330 63 6b 46 67 66 54 79 70 65 44 69 6d 73 20 28 74 ckFgfTypeDims (t
31340 2c 20 64 2c 20 26 67 65 6f 6d 5f 74 79 70 65 2c , d, &geom_type,
31350 20 26 64 69 6d 73 29 29 0a 09 72 65 74 75 72 6e &dims))..return
31360 20 30 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 6d 0;. if (geom
31370 5f 74 79 70 65 20 21 3d 20 47 41 49 41 5f 4c 49 _type != GAIA_LI
31380 4e 45 53 54 52 49 4e 47 29 0a 09 72 65 74 75 72 NESTRING)..retur
31390 6e 20 30 3b 0a 20 20 20 20 70 74 72 20 2b 3d 20 n 0;. ptr +=
313a0 38 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 38 3b 0a 8;. sz -= 8;.
313b0 20 20 20 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 if (dims ==
313c0 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 6e 64 GAIA_XY_Z_M)..nd
313d0 69 6d 73 20 3d 20 34 3b 0a 20 20 20 20 65 6c 73 ims = 4;. els
313e0 65 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 41 e if (dims == GA
313f0 49 41 5f 58 59 5f 5a 20 7c 7c 20 64 69 6d 73 20 IA_XY_Z || dims
31400 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 0a 09 6e == GAIA_XY_M)..n
31410 64 69 6d 73 20 3d 20 33 3b 0a 20 20 20 20 65 6c dims = 3;. el
31420 73 65 0a 09 6e 64 69 6d 73 20 3d 20 32 3b 0a 0a se..ndims = 2;..
31430 2f 2a 20 68 6f 77 20 6d 61 6e 79 20 70 6f 69 6e /* how many poin
31440 74 73 20 61 72 65 20 74 68 65 72 65 20 3f 20 2a ts are there ? *
31450 2f 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 34 /. if (sz < 4
31460 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 )..return 0;.
31470 20 70 74 73 20 3d 20 67 61 69 61 49 6d 70 6f 72 pts = gaiaImpor
31480 74 33 32 20 28 70 74 72 2c 20 47 41 49 41 5f 4c t32 (ptr, GAIA_L
31490 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
314a0 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
314b0 70 74 72 20 2b 3d 20 34 3b 0a 20 20 20 20 73 7a ptr += 4;. sz
314c0 20 2d 3d 20 34 3b 0a 20 20 20 20 6c 6e 5f 73 7a -= 4;. ln_sz
314d0 20 3d 20 70 74 73 20 2a 20 6e 64 69 6d 73 20 2a = pts * ndims *
314e0 20 73 69 7a 65 6f 66 20 28 64 6f 75 62 6c 65 29 sizeof (double)
314f0 3b 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 6c ;. if (sz < l
31500 6e 5f 73 7a 29 0a 09 72 65 74 75 72 6e 20 30 3b n_sz)..return 0;
31510 0a 20 20 20 20 69 66 20 28 63 6f 6e 73 75 6d 65 . if (consume
31520 64 29 0a 09 2a 63 6f 6e 73 75 6d 65 64 20 3d 20 d)..*consumed =
31530 31 32 20 2b 20 28 70 74 73 20 2a 20 28 6e 64 69 12 + (pts * (ndi
31540 6d 73 20 2a 20 38 29 29 3b 0a 0a 20 20 20 20 6c ms * 8));.. l
31550 6e 20 3d 20 67 61 69 61 41 64 64 4c 69 6e 65 73 n = gaiaAddLines
31560 74 72 69 6e 67 54 6f 47 65 6f 6d 43 6f 6c 6c 20 tringToGeomColl
31570 28 67 65 6f 6d 2c 20 70 74 73 29 3b 0a 20 20 20 (geom, pts);.
31580 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 if (dims == GAI
31590 41 5f 58 59 5f 5a 29 0a 20 20 20 20 20 20 7b 0a A_XY_Z). {.
315a0 09 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 74 68 . /* parsing th
315b0 65 20 4c 49 4e 45 53 54 52 49 4e 47 5a 20 2a 2f e LINESTRINGZ */
315c0 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 30 3b .. for (iv = 0;
315d0 20 69 76 20 3c 20 70 74 73 3b 20 69 76 2b 2b 29 iv < pts; iv++)
315e0 0a 09 20 20 20 20 7b 0a 09 09 78 20 3d 20 67 61 .. {...x = ga
315f0 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 2c iaImport64 (ptr,
31600 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
31610 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
31620 29 3b 0a 09 09 79 20 3d 20 67 61 69 61 49 6d 70 );...y = gaiaImp
31630 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c 20 ort64 (ptr + 8,
31640 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
31650 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 AN, endian_arch)
31660 3b 0a 09 09 7a 20 3d 20 67 61 69 61 49 6d 70 6f ;...z = gaiaImpo
31670 72 74 36 34 20 28 70 74 72 20 2b 20 31 36 2c 20 rt64 (ptr + 16,
31680 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
31690 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 AN, endian_arch)
316a0 3b 0a 09 09 6d 20 3d 20 30 2e 30 3b 0a 09 09 70 ;...m = 0.0;...p
316b0 74 72 20 2b 3d 20 32 34 3b 0a 09 09 73 65 74 46 tr += 24;...setF
316c0 67 66 56 65 72 74 65 78 20 28 64 69 6d 73 2c 20 gfVertex (dims,
316d0 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ln->Coords, iv,
316e0 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 20 20 x, y, z, m);..
316f0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
31700 65 6c 73 65 20 69 66 20 28 64 69 6d 73 20 3d 3d else if (dims ==
31710 20 47 41 49 41 5f 58 59 5f 4d 29 0a 20 20 20 20 GAIA_XY_M).
31720 20 20 7b 0a 09 20 20 2f 2a 20 70 61 72 73 69 6e {.. /* parsin
31730 67 20 74 68 65 20 4c 49 4e 45 53 54 52 49 4e 47 g the LINESTRING
31740 4d 20 2a 2f 0a 09 20 20 66 6f 72 20 28 69 76 20 M */.. for (iv
31750 3d 20 30 3b 20 69 76 20 3c 20 70 74 73 3b 20 69 = 0; iv < pts; i
31760 76 2b 2b 29 0a 09 20 20 20 20 7b 0a 09 09 78 20 v++).. {...x
31770 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 = gaiaImport64 (
31780 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 ptr, GAIA_LITTLE
31790 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f _ENDIAN, endian_
317a0 61 72 63 68 29 3b 0a 09 09 79 20 3d 20 67 61 69 arch);...y = gai
317b0 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b aImport64 (ptr +
317c0 20 38 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 8, GAIA_LITTLE_
317d0 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
317e0 72 63 68 29 3b 0a 09 09 6d 20 3d 20 67 61 69 61 rch);...m = gaia
317f0 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Import64 (ptr +
31800 31 36 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 16, GAIA_LITTLE_
31810 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
31820 72 63 68 29 3b 0a 09 09 7a 20 3d 20 30 2e 30 3b rch);...z = 0.0;
31830 0a 09 09 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 ...ptr += 24;...
31840 73 65 74 46 67 66 56 65 72 74 65 78 20 28 64 69 setFgfVertex (di
31850 6d 73 2c 20 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 ms, ln->Coords,
31860 69 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b iv, x, y, z, m);
31870 0a 09 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a .. }. }.
31880 20 20 20 20 65 6c 73 65 20 69 66 20 28 64 69 6d else if (dim
31890 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d s == GAIA_XY_Z_M
318a0 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 ). {.. /*
318b0 70 61 72 73 69 6e 67 20 74 68 65 20 4c 49 4e 45 parsing the LINE
318c0 53 54 52 49 4e 47 5a 4d 20 2a 2f 0a 09 20 20 66 STRINGZM */.. f
318d0 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c or (iv = 0; iv <
318e0 20 70 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 pts; iv++)..
318f0 20 7b 0a 09 09 78 20 3d 20 67 61 69 61 49 6d 70 {...x = gaiaImp
31900 6f 72 74 36 34 20 28 70 74 72 2c 20 47 41 49 41 ort64 (ptr, GAIA
31910 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 _LITTLE_ENDIAN,
31920 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
31930 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 y = gaiaImport64
31940 20 28 70 74 72 20 2b 20 38 2c 20 47 41 49 41 5f (ptr + 8, GAIA_
31950 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
31960 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 7a ndian_arch);...z
31970 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
31980 28 70 74 72 20 2b 20 31 36 2c 20 47 41 49 41 5f (ptr + 16, GAIA_
31990 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
319a0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 6d ndian_arch);...m
319b0 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 = gaiaImport64
319c0 28 70 74 72 20 2b 20 32 34 2c 20 47 41 49 41 5f (ptr + 24, GAIA_
319d0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
319e0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 70 ndian_arch);...p
319f0 74 72 20 2b 3d 20 33 32 3b 0a 09 09 73 65 74 46 tr += 32;...setF
31a00 67 66 56 65 72 74 65 78 20 28 64 69 6d 73 2c 20 gfVertex (dims,
31a10 6c 6e 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ln->Coords, iv,
31a20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 20 20 x, y, z, m);..
31a30 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 }. }.
31a40 65 6c 73 65 0a 20 20 20 20 20 20 7b 0a 09 20 20 else. {..
31a50 2f 2a 20 70 61 72 73 69 6e 67 20 74 68 65 20 4c /* parsing the L
31a60 49 4e 45 53 54 52 49 4e 47 20 2a 2f 0a 09 20 20 INESTRING */..
31a70 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 for (iv = 0; iv
31a80 3c 20 70 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 < pts; iv++)..
31a90 20 20 7b 0a 09 09 78 20 3d 20 67 61 69 61 49 6d {...x = gaiaIm
31aa0 70 6f 72 74 36 34 20 28 70 74 72 2c 20 47 41 49 port64 (ptr, GAI
31ab0 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
31ac0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
31ad0 09 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 .y = gaiaImport6
31ae0 34 20 28 70 74 72 20 2b 20 73 69 7a 65 6f 66 20 4 (ptr + sizeof
31af0 28 64 6f 75 62 6c 65 29 2c 20 47 41 49 41 5f 4c (double), GAIA_L
31b00 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 ITTLE_ENDIAN,...
31b10 09 09 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 .. endian_arch)
31b20 3b 0a 09 09 7a 20 3d 20 30 2e 30 3b 0a 09 09 6d ;...z = 0.0;...m
31b30 20 3d 20 30 2e 30 3b 0a 09 09 70 74 72 20 2b 3d = 0.0;...ptr +=
31b40 20 31 36 3b 0a 09 09 73 65 74 46 67 66 56 65 72 16;...setFgfVer
31b50 74 65 78 20 28 64 69 6d 73 2c 20 6c 6e 2d 3e 43 tex (dims, ln->C
31b60 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c oords, iv, x, y,
31b70 20 7a 2c 20 6d 29 3b 0a 09 20 20 20 20 7d 0a 20 z, m);.. }.
31b80 20 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 }. retur
31b90 6e 20 31 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 69 n 1;.}..static i
31ba0 6e 74 0a 70 6f 6c 79 67 6f 6e 46 72 6f 6d 46 67 nt.polygonFromFg
31bb0 66 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 f (gaiaGeomCollP
31bc0 74 72 20 67 65 6f 6d 2c 20 69 6e 74 20 65 6e 64 tr geom, int end
31bd0 69 61 6e 5f 61 72 63 68 2c 0a 09 09 63 6f 6e 73 ian_arch,...cons
31be0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 t unsigned char
31bf0 2a 62 6c 6f 62 2c 20 75 6e 73 69 67 6e 65 64 20 *blob, unsigned
31c00 69 6e 74 20 73 69 7a 65 2c 0a 09 09 75 6e 73 69 int size,...unsi
31c10 67 6e 65 64 20 69 6e 74 20 2a 63 6f 6e 73 75 6d gned int *consum
31c20 65 64 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 6e ed).{./* decodin
31c30 67 20 61 20 50 4f 4c 59 47 4f 4e 20 47 65 6f 6d g a POLYGON Geom
31c40 65 74 72 79 20 66 72 6f 6d 20 46 47 46 20 20 2a etry from FGF *
31c50 2f 0a 20 20 20 20 67 61 69 61 50 6f 6c 79 67 6f /. gaiaPolygo
31c60 6e 50 74 72 20 70 67 20 3d 20 4e 55 4c 4c 3b 0a nPtr pg = NULL;.
31c70 20 20 20 20 67 61 69 61 52 69 6e 67 50 74 72 20 gaiaRingPtr
31c80 72 6e 67 3b 0a 20 20 20 20 69 6e 74 20 72 69 6e rng;. int rin
31c90 67 73 3b 0a 20 20 20 20 69 6e 74 20 69 72 3b 0a gs;. int ir;.
31ca0 20 20 20 20 69 6e 74 20 70 74 73 3b 0a 20 20 20 int pts;.
31cb0 20 69 6e 74 20 69 76 3b 0a 20 20 20 20 64 6f 75 int iv;. dou
31cc0 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f 75 62 6c ble x;. doubl
31cd0 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 e y;. double
31ce0 7a 3b 0a 20 20 20 20 64 6f 75 62 6c 65 20 6d 3b z;. double m;
31cf0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e . unsigned in
31d00 74 20 72 6e 67 5f 73 7a 3b 0a 20 20 20 20 75 6e t rng_sz;. un
31d10 73 69 67 6e 65 64 20 69 6e 74 20 73 7a 20 3d 20 signed int sz =
31d20 73 69 7a 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 size;. const
31d30 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 unsigned char *p
31d40 74 72 20 3d 20 62 6c 6f 62 3b 0a 20 20 20 20 69 tr = blob;. i
31d50 6e 74 20 74 3b 0a 20 20 20 20 69 6e 74 20 64 3b nt t;. int d;
31d60 0a 20 20 20 20 69 6e 74 20 67 65 6f 6d 5f 74 79 . int geom_ty
31d70 70 65 3b 0a 20 20 20 20 69 6e 74 20 64 69 6d 73 pe;. int dims
31d80 3b 0a 20 20 20 20 69 6e 74 20 6e 64 69 6d 73 3b ;. int ndims;
31d90 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e . unsigned in
31da0 74 20 62 79 74 65 73 20 3d 20 30 3b 0a 0a 2f 2a t bytes = 0;../*
31db0 20 63 68 65 63 6b 69 6e 67 20 47 65 6f 6d 65 74 checking Geomet
31dc0 72 79 20 54 79 70 65 20 61 6e 64 20 44 69 6d 73 ry Type and Dims
31dd0 20 2a 2f 0a 20 20 20 20 69 66 20 28 73 7a 20 3c */. if (sz <
31de0 20 38 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 8)..return 0;.
31df0 20 20 20 74 20 3d 20 67 61 69 61 49 6d 70 6f 72 t = gaiaImpor
31e00 74 33 32 20 28 70 74 72 2c 20 47 41 49 41 5f 4c t32 (ptr, GAIA_L
31e10 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
31e20 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 dian_arch);.
31e30 64 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 32 d = gaiaImport32
31e40 20 28 70 74 72 20 2b 20 34 2c 20 47 41 49 41 5f (ptr + 4, GAIA_
31e50 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
31e60 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
31e70 20 69 66 20 28 21 63 68 65 63 6b 46 67 66 54 79 if (!checkFgfTy
31e80 70 65 44 69 6d 73 20 28 74 2c 20 64 2c 20 26 67 peDims (t, d, &g
31e90 65 6f 6d 5f 74 79 70 65 2c 20 26 64 69 6d 73 29 eom_type, &dims)
31ea0 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 )..return 0;.
31eb0 20 69 66 20 28 67 65 6f 6d 5f 74 79 70 65 20 21 if (geom_type !
31ec0 3d 20 47 41 49 41 5f 50 4f 4c 59 47 4f 4e 29 0a = GAIA_POLYGON).
31ed0 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 70 .return 0;. p
31ee0 74 72 20 2b 3d 20 38 3b 0a 20 20 20 20 73 7a 20 tr += 8;. sz
31ef0 2d 3d 20 38 3b 0a 20 20 20 20 62 79 74 65 73 20 -= 8;. bytes
31f00 2b 3d 20 38 3b 0a 20 20 20 20 69 66 20 28 64 69 += 8;. if (di
31f10 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f ms == GAIA_XY_Z_
31f20 4d 29 0a 09 6e 64 69 6d 73 20 3d 20 34 3b 0a 20 M)..ndims = 4;.
31f30 20 20 20 65 6c 73 65 20 69 66 20 28 64 69 6d 73 else if (dims
31f40 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 20 7c 7c == GAIA_XY_Z ||
31f50 20 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 dims == GAIA_XY
31f60 5f 4d 29 0a 09 6e 64 69 6d 73 20 3d 20 33 3b 0a _M)..ndims = 3;.
31f70 20 20 20 20 65 6c 73 65 0a 09 6e 64 69 6d 73 20 else..ndims
31f80 3d 20 32 3b 0a 0a 2f 2a 20 68 6f 77 20 6d 61 6e = 2;../* how man
31f90 79 20 72 69 6e 67 73 20 61 72 65 20 74 68 65 72 y rings are ther
31fa0 65 20 3f 20 2a 2f 0a 20 20 20 20 69 66 20 28 73 e ? */. if (s
31fb0 7a 20 3c 20 34 29 0a 09 72 65 74 75 72 6e 20 30 z < 4)..return 0
31fc0 3b 0a 20 20 20 20 72 69 6e 67 73 20 3d 20 67 61 ;. rings = ga
31fd0 69 61 49 6d 70 6f 72 74 33 32 20 28 70 74 72 2c iaImport32 (ptr,
31fe0 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
31ff0 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
32000 29 3b 0a 20 20 20 20 70 74 72 20 2b 3d 20 34 3b );. ptr += 4;
32010 0a 20 20 20 20 73 7a 20 2d 3d 20 34 3b 0a 20 20 . sz -= 4;.
32020 20 20 62 79 74 65 73 20 2b 3d 20 34 3b 0a 20 20 bytes += 4;.
32030 20 20 69 66 20 28 72 69 6e 67 73 20 3c 20 31 29 if (rings < 1)
32040 0a 09 72 65 74 75 72 6e 20 30 3b 0a 0a 20 20 20 ..return 0;..
32050 20 66 6f 72 20 28 69 72 20 3d 20 30 3b 20 69 72 for (ir = 0; ir
32060 20 3c 20 72 69 6e 67 73 3b 20 69 72 2b 2b 29 0a < rings; ir++).
32070 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 66 65 {.. /* fe
32080 74 63 68 69 6e 67 20 50 6f 6c 79 67 6f 6e 27 73 tching Polygon's
32090 20 72 69 6e 67 73 20 2a 2f 0a 09 20 20 69 66 20 rings */.. if
320a0 28 73 7a 20 3c 20 34 29 0a 09 20 20 20 20 20 20 (sz < 4)..
320b0 72 65 74 75 72 6e 20 30 3b 0a 09 20 20 70 74 73 return 0;.. pts
320c0 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 = gaiaImport32
320d0 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c (ptr, GAIA_LITTL
320e0 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e E_ENDIAN, endian
320f0 5f 61 72 63 68 29 3b 0a 09 20 20 70 74 72 20 2b _arch);.. ptr +
32100 3d 20 34 3b 0a 09 20 20 73 7a 20 2d 3d 20 34 3b = 4;.. sz -= 4;
32110 0a 09 20 20 62 79 74 65 73 20 2b 3d 20 34 3b 0a .. bytes += 4;.
32120 09 20 20 72 6e 67 5f 73 7a 20 3d 20 70 74 73 20 . rng_sz = pts
32130 2a 20 6e 64 69 6d 73 20 2a 20 38 3b 0a 09 20 20 * ndims * 8;..
32140 69 66 20 28 73 7a 20 3c 20 72 6e 67 5f 73 7a 29 if (sz < rng_sz)
32150 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 .. return 0
32160 3b 0a 09 20 20 62 79 74 65 73 20 2b 3d 20 72 6e ;.. bytes += rn
32170 67 5f 73 7a 3b 0a 0a 09 20 20 69 66 20 28 69 72 g_sz;... if (ir
32180 20 3d 3d 20 30 29 0a 09 20 20 20 20 7b 0a 09 09 == 0).. {...
32190 2f 2a 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 /* creating the
321a0 50 6f 6c 79 67 6f 6e 20 2a 2f 0a 09 09 70 67 20 Polygon */...pg
321b0 3d 20 67 61 69 61 41 64 64 50 6f 6c 79 67 6f 6e = gaiaAddPolygon
321c0 54 6f 47 65 6f 6d 43 6f 6c 6c 20 28 67 65 6f 6d ToGeomColl (geom
321d0 2c 20 70 74 73 2c 20 72 69 6e 67 73 20 2d 20 31 , pts, rings - 1
321e0 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20 69 66 20 );.. }.. if
321f0 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 (dims == GAIA_XY
32200 5f 5a 29 0a 09 20 20 20 20 7b 0a 09 09 2f 2a 20 _Z).. {.../*
32210 50 4f 4c 59 47 4f 4e 5a 20 2a 2f 0a 09 09 69 66 POLYGONZ */...if
32220 20 28 69 72 20 3d 3d 20 30 29 0a 09 09 20 20 7b (ir == 0)... {
32230 0a 09 09 20 20 20 20 20 20 2f 2a 20 70 61 72 73 ... /* pars
32240 69 6e 67 20 74 68 65 20 45 58 54 45 52 49 4f 52 ing the EXTERIOR
32250 20 52 49 4e 47 20 2a 2f 0a 09 09 20 20 20 20 20 RING */...
32260 20 72 6e 67 20 3d 20 70 67 2d 3e 45 78 74 65 72 rng = pg->Exter
32270 69 6f 72 3b 0a 09 09 20 20 20 20 20 20 66 6f 72 ior;... for
32280 20 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 70 (iv = 0; iv < p
32290 74 73 3b 20 69 76 2b 2b 29 0a 09 09 09 7b 0a 09 ts; iv++)....{..
322a0 09 09 20 20 20 20 2f 2a 20 69 6e 73 65 72 74 69 .. /* inserti
322b0 6e 67 20 76 65 72 74 69 63 65 73 20 69 6e 74 6f ng vertices into
322c0 20 74 68 65 20 45 58 54 45 52 49 4f 52 20 52 69 the EXTERIOR Ri
322d0 6e 67 20 2a 2f 0a 09 09 09 20 20 20 20 78 20 3d ng */.... x =
322e0 20 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 gaiaImport64 (p
322f0 74 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f tr, GAIA_LITTLE_
32300 45 4e 44 49 41 4e 2c 0a 09 09 09 09 09 20 20 20 ENDIAN,......
32310 20 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b endian_arch);
32320 0a 09 09 09 20 20 20 20 79 20 3d 20 67 61 69 61 .... y = gaia
32330 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 Import64 (ptr +
32340 38 2c 0a 09 09 09 09 09 20 20 20 20 20 20 47 41 8,...... GA
32350 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
32360 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
32370 09 09 09 20 20 20 20 7a 20 3d 20 67 61 69 61 49 ... z = gaiaI
32380 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 mport64 (ptr + 1
32390 36 2c 0a 09 09 09 09 09 20 20 20 20 20 20 47 41 6,...... GA
323a0 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
323b0 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
323c0 09 09 09 20 20 20 20 6d 20 3d 20 30 2e 30 3b 0a ... m = 0.0;.
323d0 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 32 34 ... ptr += 24
323e0 3b 0a 09 09 09 20 20 20 20 73 65 74 46 67 66 56 ;.... setFgfV
323f0 65 72 74 65 78 20 28 64 69 6d 73 2c 20 72 6e 67 ertex (dims, rng
32400 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c ->Coords, iv, x,
32410 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 09 09 7d 0a y, z, m);....}.
32420 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 20 .. }...else...
32430 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 70 61 {... /* pa
32440 72 73 69 6e 67 20 61 6e 20 49 4e 54 45 52 49 4f rsing an INTERIO
32450 52 20 52 49 4e 47 20 2a 2f 0a 09 09 20 20 20 20 R RING */...
32460 20 20 72 6e 67 20 3d 20 67 61 69 61 41 64 64 49 rng = gaiaAddI
32470 6e 74 65 72 69 6f 72 52 69 6e 67 20 28 70 67 2c nteriorRing (pg,
32480 20 69 72 20 2d 20 31 2c 20 70 74 73 29 3b 0a 09 ir - 1, pts);..
32490 09 20 20 20 20 20 20 66 6f 72 20 28 69 76 20 3d . for (iv =
324a0 20 30 3b 20 69 76 20 3c 20 70 74 73 3b 20 69 76 0; iv < pts; iv
324b0 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 ++)....{....
324c0 2f 2a 20 69 6e 73 65 72 74 69 6e 67 20 76 65 72 /* inserting ver
324d0 74 69 63 65 73 20 69 6e 74 6f 20 73 6f 6d 65 20 tices into some
324e0 49 4e 54 45 52 49 4f 52 20 52 69 6e 67 20 2a 2f INTERIOR Ring */
324f0 0a 09 09 09 20 20 20 20 78 20 3d 20 67 61 69 61 .... x = gaia
32500 49 6d 70 6f 72 74 36 34 20 28 70 74 72 2c 20 47 Import64 (ptr, G
32510 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
32520 4e 2c 0a 09 09 09 09 09 20 20 20 20 20 20 65 6e N,...... en
32530 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 dian_arch);....
32540 20 20 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 y = gaiaImpor
32550 74 36 34 20 28 70 74 72 20 2b 20 38 2c 0a 09 09 t64 (ptr + 8,...
32560 09 09 09 20 20 20 20 20 20 47 41 49 41 5f 4c 49 ... GAIA_LI
32570 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 TTLE_ENDIAN, end
32580 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 ian_arch);....
32590 20 20 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 z = gaiaImport
325a0 36 34 20 28 70 74 72 20 2b 20 31 36 2c 0a 09 09 64 (ptr + 16,...
325b0 09 09 09 20 20 20 20 20 20 47 41 49 41 5f 4c 49 ... GAIA_LI
325c0 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 TTLE_ENDIAN, end
325d0 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 ian_arch);....
325e0 20 20 6d 20 3d 20 30 2e 30 3b 0a 09 09 09 20 20 m = 0.0;....
325f0 20 20 70 74 72 20 2b 3d 20 32 34 3b 0a 09 09 09 ptr += 24;....
32600 20 20 20 20 73 65 74 46 67 66 56 65 72 74 65 78 setFgfVertex
32610 20 28 64 69 6d 73 2c 20 72 6e 67 2d 3e 43 6f 6f (dims, rng->Coo
32620 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a rds, iv, x, y, z
32630 2c 20 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 20 7d , m);....}... }
32640 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c 73 65 20 .. }.. else
32650 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 if (dims == GAIA
32660 5f 58 59 5f 4d 29 0a 09 20 20 20 20 7b 0a 09 09 _XY_M).. {...
32670 2f 2a 20 50 4f 4c 59 47 4f 4e 4d 20 2a 2f 0a 09 /* POLYGONM */..
32680 09 69 66 20 28 69 72 20 3d 3d 20 30 29 0a 09 09 .if (ir == 0)...
32690 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 70 {... /* p
326a0 61 72 73 69 6e 67 20 74 68 65 20 45 58 54 45 52 arsing the EXTER
326b0 49 4f 52 20 52 49 4e 47 20 2a 2f 0a 09 09 20 20 IOR RING */...
326c0 20 20 20 20 72 6e 67 20 3d 20 70 67 2d 3e 45 78 rng = pg->Ex
326d0 74 65 72 69 6f 72 3b 0a 09 09 20 20 20 20 20 20 terior;...
326e0 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 for (iv = 0; iv
326f0 3c 20 70 74 73 3b 20 69 76 2b 2b 29 0a 09 09 09 < pts; iv++)....
32700 7b 0a 09 09 09 20 20 20 20 2f 2a 20 69 6e 73 65 {.... /* inse
32710 72 74 69 6e 67 20 76 65 72 74 69 63 65 73 20 69 rting vertices i
32720 6e 74 6f 20 74 68 65 20 45 58 54 45 52 49 4f 52 nto the EXTERIOR
32730 20 52 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 20 Ring */....
32740 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 x = gaiaImport64
32750 20 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 54 (ptr, GAIA_LITT
32760 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 09 09 09 LE_ENDIAN,......
32770 20 20 20 20 20 20 65 6e 64 69 61 6e 5f 61 72 63 endian_arc
32780 68 29 3b 0a 09 09 09 20 20 20 20 79 20 3d 20 67 h);.... y = g
32790 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 aiaImport64 (ptr
327a0 20 2b 20 38 2c 0a 09 09 09 09 09 20 20 20 20 20 + 8,......
327b0 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
327c0 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
327d0 29 3b 0a 09 09 09 20 20 20 20 6d 20 3d 20 67 61 );.... m = ga
327e0 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 20 iaImport64 (ptr
327f0 2b 20 31 36 2c 0a 09 09 09 09 09 20 20 20 20 20 + 16,......
32800 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
32810 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
32820 29 3b 0a 09 09 09 20 20 20 20 7a 20 3d 20 30 2e );.... z = 0.
32830 30 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d 0;.... ptr +=
32840 20 32 34 3b 0a 09 09 09 20 20 20 20 73 65 74 46 24;.... setF
32850 67 66 56 65 72 74 65 78 20 28 64 69 6d 73 2c 20 gfVertex (dims,
32860 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c rng->Coords, iv,
32870 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 09 x, y, z, m);...
32880 09 7d 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a .}... }...else.
32890 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a .. {... /*
328a0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 54 45 parsing an INTE
328b0 52 49 4f 52 20 52 49 4e 47 20 2a 2f 0a 09 09 20 RIOR RING */...
328c0 20 20 20 20 20 72 6e 67 20 3d 20 67 61 69 61 41 rng = gaiaA
328d0 64 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 20 28 ddInteriorRing (
328e0 70 67 2c 20 69 72 20 2d 20 31 2c 20 70 74 73 29 pg, ir - 1, pts)
328f0 3b 0a 09 09 20 20 20 20 20 20 66 6f 72 20 28 69 ;... for (i
32900 76 20 3d 20 30 3b 20 69 76 20 3c 20 70 74 73 3b v = 0; iv < pts;
32910 20 69 76 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 20 iv++)....{....
32920 20 20 20 2f 2a 20 69 6e 73 65 72 74 69 6e 67 20 /* inserting
32930 76 65 72 74 69 63 65 73 20 69 6e 74 6f 20 73 6f vertices into so
32940 6d 65 20 49 4e 54 45 52 49 4f 52 20 52 69 6e 67 me INTERIOR Ring
32950 20 2a 2f 0a 09 09 09 20 20 20 20 78 20 3d 20 67 */.... x = g
32960 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 aiaImport64 (ptr
32970 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e , GAIA_LITTLE_EN
32980 44 49 41 4e 2c 0a 09 09 09 09 09 20 20 20 20 20 DIAN,......
32990 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
329a0 09 09 20 20 20 20 79 20 3d 20 67 61 69 61 49 6d .. y = gaiaIm
329b0 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 2c port64 (ptr + 8,
329c0 0a 09 09 09 09 09 20 20 20 20 20 20 47 41 49 41 ...... GAIA
329d0 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 _LITTLE_ENDIAN,
329e0 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
329f0 09 20 20 20 20 6d 20 3d 20 67 61 69 61 49 6d 70 . m = gaiaImp
32a00 6f 72 74 36 34 20 28 70 74 72 20 2b 20 31 36 2c ort64 (ptr + 16,
32a10 0a 09 09 09 09 09 20 20 20 20 20 20 47 41 49 41 ...... GAIA
32a20 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 _LITTLE_ENDIAN,
32a30 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
32a40 09 20 20 20 20 7a 20 3d 20 30 2e 30 3b 0a 09 09 . z = 0.0;...
32a50 09 20 20 20 20 70 74 72 20 2b 3d 20 32 34 3b 0a . ptr += 24;.
32a60 09 09 09 20 20 20 20 73 65 74 46 67 66 56 65 72 ... setFgfVer
32a70 74 65 78 20 28 64 69 6d 73 2c 20 72 6e 67 2d 3e tex (dims, rng->
32a80 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 79 Coords, iv, x, y
32a90 2c 20 7a 2c 20 6d 29 3b 0a 09 09 09 7d 0a 09 09 , z, m);....}...
32aa0 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 65 6c }.. }.. el
32ab0 73 65 20 69 66 20 28 64 69 6d 73 20 3d 3d 20 47 se if (dims == G
32ac0 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 20 20 20 AIA_XY_Z_M)..
32ad0 20 7b 0a 09 09 2f 2a 20 50 4f 4c 59 47 4f 4e 5a {.../* POLYGONZ
32ae0 4d 20 2a 2f 0a 09 09 69 66 20 28 69 72 20 3d 3d M */...if (ir ==
32af0 20 30 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 0)... {...
32b00 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 74 68 65 /* parsing the
32b10 20 45 58 54 45 52 49 4f 52 20 52 49 4e 47 20 2a EXTERIOR RING *
32b20 2f 0a 09 09 20 20 20 20 20 20 72 6e 67 20 3d 20 /... rng =
32b30 70 67 2d 3e 45 78 74 65 72 69 6f 72 3b 0a 09 09 pg->Exterior;...
32b40 20 20 20 20 20 20 66 6f 72 20 28 69 76 20 3d 20 for (iv =
32b50 30 3b 20 69 76 20 3c 20 70 74 73 3b 20 69 76 2b 0; iv < pts; iv+
32b60 2b 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 2f +)....{.... /
32b70 2a 20 69 6e 73 65 72 74 69 6e 67 20 76 65 72 74 * inserting vert
32b80 69 63 65 73 20 69 6e 74 6f 20 74 68 65 20 45 58 ices into the EX
32b90 54 45 52 49 4f 52 20 52 69 6e 67 20 2a 2f 0a 09 TERIOR Ring */..
32ba0 09 09 20 20 20 20 78 20 3d 20 67 61 69 61 49 6d .. x = gaiaIm
32bb0 70 6f 72 74 36 34 20 28 70 74 72 2c 20 47 41 49 port64 (ptr, GAI
32bc0 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
32bd0 0a 09 09 09 09 09 20 20 20 20 20 20 65 6e 64 69 ...... endi
32be0 61 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 an_arch);....
32bf0 20 79 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 y = gaiaImport6
32c00 34 20 28 70 74 72 20 2b 20 38 2c 0a 09 09 09 09 4 (ptr + 8,.....
32c10 09 20 20 20 20 20 20 47 41 49 41 5f 4c 49 54 54 . GAIA_LITT
32c20 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 LE_ENDIAN, endia
32c30 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 n_arch);....
32c40 7a 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 z = gaiaImport64
32c50 20 28 70 74 72 20 2b 20 31 36 2c 0a 09 09 09 09 (ptr + 16,.....
32c60 09 20 20 20 20 20 20 47 41 49 41 5f 4c 49 54 54 . GAIA_LITT
32c70 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 LE_ENDIAN, endia
32c80 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 n_arch);....
32c90 6d 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 34 m = gaiaImport64
32ca0 20 28 70 74 72 20 2b 20 32 34 2c 0a 09 09 09 09 (ptr + 24,.....
32cb0 09 20 20 20 20 20 20 47 41 49 41 5f 4c 49 54 54 . GAIA_LITT
32cc0 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 LE_ENDIAN, endia
32cd0 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 n_arch);....
32ce0 70 74 72 20 2b 3d 20 33 32 3b 0a 09 09 09 20 20 ptr += 32;....
32cf0 20 20 73 65 74 46 67 66 56 65 72 74 65 78 20 28 setFgfVertex (
32d00 64 69 6d 73 2c 20 72 6e 67 2d 3e 43 6f 6f 72 64 dims, rng->Coord
32d10 73 2c 20 69 76 2c 20 78 2c 20 79 2c 20 7a 2c 20 s, iv, x, y, z,
32d20 6d 29 3b 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 m);....}... }..
32d30 09 65 6c 73 65 0a 09 09 20 20 7b 0a 09 09 20 20 .else... {...
32d40 20 20 20 20 2f 2a 20 70 61 72 73 69 6e 67 20 61 /* parsing a
32d50 6e 20 49 4e 54 45 52 49 4f 52 20 52 49 4e 47 20 n INTERIOR RING
32d60 2a 2f 0a 09 09 20 20 20 20 20 20 72 6e 67 20 3d */... rng =
32d70 20 67 61 69 61 41 64 64 49 6e 74 65 72 69 6f 72 gaiaAddInterior
32d80 52 69 6e 67 20 28 70 67 2c 20 69 72 20 2d 20 31 Ring (pg, ir - 1
32d90 2c 20 70 74 73 29 3b 0a 09 09 20 20 20 20 20 20 , pts);...
32da0 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 20 for (iv = 0; iv
32db0 3c 20 70 74 73 3b 20 69 76 2b 2b 29 0a 09 09 09 < pts; iv++)....
32dc0 7b 0a 09 09 09 20 20 20 20 2f 2a 20 69 6e 73 65 {.... /* inse
32dd0 72 74 69 6e 67 20 76 65 72 74 69 63 65 73 20 69 rting vertices i
32de0 6e 74 6f 20 73 6f 6d 65 20 49 4e 54 45 52 49 4f nto some INTERIO
32df0 52 20 52 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 R Ring */....
32e00 20 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 x = gaiaImport6
32e10 34 20 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 4 (ptr, GAIA_LIT
32e20 54 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 09 09 TLE_ENDIAN,.....
32e30 09 20 20 20 20 20 20 65 6e 64 69 61 6e 5f 61 72 . endian_ar
32e40 63 68 29 3b 0a 09 09 09 20 20 20 20 79 20 3d 20 ch);.... y =
32e50 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 gaiaImport64 (pt
32e60 72 20 2b 20 38 2c 0a 09 09 09 09 09 20 20 20 20 r + 8,......
32e70 20 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e GAIA_LITTLE_EN
32e80 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
32e90 68 29 3b 0a 09 09 09 20 20 20 20 7a 20 3d 20 67 h);.... z = g
32ea0 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 aiaImport64 (ptr
32eb0 20 2b 20 31 36 2c 0a 09 09 09 09 09 20 20 20 20 + 16,......
32ec0 20 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e GAIA_LITTLE_EN
32ed0 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
32ee0 68 29 3b 0a 09 09 09 20 20 20 20 6d 20 3d 20 67 h);.... m = g
32ef0 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 72 aiaImport64 (ptr
32f00 20 2b 20 32 34 2c 0a 09 09 09 09 09 20 20 20 20 + 24,......
32f10 20 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e GAIA_LITTLE_EN
32f20 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
32f30 68 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b h);.... ptr +
32f40 3d 20 33 32 3b 0a 09 09 09 20 20 20 20 73 65 74 = 32;.... set
32f50 46 67 66 56 65 72 74 65 78 20 28 64 69 6d 73 2c FgfVertex (dims,
32f60 20 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 rng->Coords, iv
32f70 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 , x, y, z, m);..
32f80 09 09 7d 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d ..}... }.. }
32f90 0a 09 20 20 65 6c 73 65 0a 09 20 20 20 20 7b 0a .. else.. {.
32fa0 09 09 2f 2a 20 50 4f 4c 59 47 4f 4e 20 2a 2f 0a ../* POLYGON */.
32fb0 09 09 69 66 20 28 69 72 20 3d 3d 20 30 29 0a 09 ..if (ir == 0)..
32fc0 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 . {... /*
32fd0 70 61 72 73 69 6e 67 20 74 68 65 20 45 58 54 45 parsing the EXTE
32fe0 52 49 4f 52 20 52 49 4e 47 20 2a 2f 0a 09 09 20 RIOR RING */...
32ff0 20 20 20 20 20 72 6e 67 20 3d 20 70 67 2d 3e 45 rng = pg->E
33000 78 74 65 72 69 6f 72 3b 0a 09 09 20 20 20 20 20 xterior;...
33010 20 66 6f 72 20 28 69 76 20 3d 20 30 3b 20 69 76 for (iv = 0; iv
33020 20 3c 20 70 74 73 3b 20 69 76 2b 2b 29 0a 09 09 < pts; iv++)...
33030 09 7b 0a 09 09 09 20 20 20 20 2f 2a 20 69 6e 73 .{.... /* ins
33040 65 72 74 69 6e 67 20 76 65 72 74 69 63 65 73 20 erting vertices
33050 69 6e 74 6f 20 74 68 65 20 45 58 54 45 52 49 4f into the EXTERIO
33060 52 20 52 69 6e 67 20 2a 2f 0a 09 09 09 20 20 20 R Ring */....
33070 20 78 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 36 x = gaiaImport6
33080 34 20 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 4 (ptr, GAIA_LIT
33090 54 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 09 09 TLE_ENDIAN,.....
330a0 09 20 20 20 20 20 20 65 6e 64 69 61 6e 5f 61 72 . endian_ar
330b0 63 68 29 3b 0a 09 09 09 20 20 20 20 79 20 3d 20 ch);.... y =
330c0 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 gaiaImport64 (pt
330d0 72 20 2b 20 38 2c 0a 09 09 09 09 09 20 20 20 20 r + 8,......
330e0 20 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e GAIA_LITTLE_EN
330f0 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
33100 68 29 3b 0a 09 09 09 20 20 20 20 7a 20 3d 20 30 h);.... z = 0
33110 2e 30 3b 0a 09 09 09 20 20 20 20 6d 20 3d 20 30 .0;.... m = 0
33120 2e 30 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b .0;.... ptr +
33130 3d 20 31 36 3b 0a 09 09 09 20 20 20 20 73 65 74 = 16;.... set
33140 46 67 66 56 65 72 74 65 78 20 28 64 69 6d 73 2c FgfVertex (dims,
33150 20 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 rng->Coords, iv
33160 2c 20 78 2c 20 79 2c 20 7a 2c 20 6d 29 3b 0a 09 , x, y, z, m);..
33170 09 09 7d 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 ..}... }...else
33180 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f ... {... /
33190 2a 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 54 * parsing an INT
331a0 45 52 49 4f 52 20 52 49 4e 47 20 2a 2f 0a 09 09 ERIOR RING */...
331b0 20 20 20 20 20 20 72 6e 67 20 3d 20 67 61 69 61 rng = gaia
331c0 41 64 64 49 6e 74 65 72 69 6f 72 52 69 6e 67 20 AddInteriorRing
331d0 28 70 67 2c 20 69 72 20 2d 20 31 2c 20 70 74 73 (pg, ir - 1, pts
331e0 29 3b 0a 09 09 20 20 20 20 20 20 66 6f 72 20 28 );... for (
331f0 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 70 74 73 iv = 0; iv < pts
33200 3b 20 69 76 2b 2b 29 0a 09 09 09 7b 0a 09 09 09 ; iv++)....{....
33210 20 20 20 20 2f 2a 20 69 6e 73 65 72 74 69 6e 67 /* inserting
33220 20 76 65 72 74 69 63 65 73 20 69 6e 74 6f 20 73 vertices into s
33230 6f 6d 65 20 49 4e 54 45 52 49 4f 52 20 52 69 6e ome INTERIOR Rin
33240 67 20 2a 2f 0a 09 09 09 20 20 20 20 78 20 3d 20 g */.... x =
33250 67 61 69 61 49 6d 70 6f 72 74 36 34 20 28 70 74 gaiaImport64 (pt
33260 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 r, GAIA_LITTLE_E
33270 4e 44 49 41 4e 2c 0a 09 09 09 09 09 20 20 20 20 NDIAN,......
33280 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a endian_arch);.
33290 09 09 09 20 20 20 20 79 20 3d 20 67 61 69 61 49 ... y = gaiaI
332a0 6d 70 6f 72 74 36 34 20 28 70 74 72 20 2b 20 38 mport64 (ptr + 8
332b0 2c 0a 09 09 09 09 09 20 20 20 20 20 20 47 41 49 ,...... GAI
332c0 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
332d0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
332e0 09 09 20 20 20 20 7a 20 3d 20 30 2e 30 3b 0a 09 .. z = 0.0;..
332f0 09 09 20 20 20 20 6d 20 3d 20 30 2e 30 3b 0a 09 .. m = 0.0;..
33300 09 09 20 20 20 20 70 74 72 20 2b 3d 20 31 36 3b .. ptr += 16;
33310 0a 09 09 09 20 20 20 20 73 65 74 46 67 66 56 65 .... setFgfVe
33320 72 74 65 78 20 28 64 69 6d 73 2c 20 72 6e 67 2d rtex (dims, rng-
33330 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 78 2c 20 >Coords, iv, x,
33340 79 2c 20 7a 2c 20 6d 29 3b 0a 09 09 09 7d 0a 09 y, z, m);....}..
33350 09 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 73 . }.. }.. s
33360 7a 20 2d 3d 20 72 6e 67 5f 73 7a 3b 0a 20 20 20 z -= rng_sz;.
33370 20 20 20 7d 0a 20 20 20 20 69 66 20 28 63 6f 6e }. if (con
33380 73 75 6d 65 64 29 0a 09 2a 63 6f 6e 73 75 6d 65 sumed)..*consume
33390 64 20 3d 20 62 79 74 65 73 3b 0a 20 20 20 20 72 d = bytes;. r
333a0 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 73 74 61 74 eturn 1;.}..stat
333b0 69 63 20 69 6e 74 0a 6d 75 6c 74 69 50 6f 69 6e ic int.multiPoin
333c0 74 46 72 6f 6d 46 67 66 20 28 67 61 69 61 47 65 tFromFgf (gaiaGe
333d0 6f 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d 2c 20 omCollPtr geom,
333e0 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c int endian_arch,
333f0 0a 09 09 20 20 20 63 6f 6e 73 74 20 75 6e 73 69 ... const unsi
33400 67 6e 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 2c gned char *blob,
33410 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 69 unsigned int si
33420 7a 65 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 6e ze).{./* decodin
33430 67 20 61 20 4d 55 4c 54 49 50 4f 49 4e 54 20 47 g a MULTIPOINT G
33440 65 6f 6d 65 74 72 79 20 66 72 6f 6d 20 46 47 46 eometry from FGF
33450 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 70 74 73 */. int pts
33460 3b 0a 20 20 20 20 69 6e 74 20 69 70 74 3b 0a 20 ;. int ipt;.
33470 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 unsigned int
33480 73 7a 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 63 sz = size;. c
33490 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 onst unsigned ch
334a0 61 72 20 2a 70 74 72 20 3d 20 62 6c 6f 62 3b 0a ar *ptr = blob;.
334b0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 unsigned int
334c0 20 63 6f 6e 73 75 6d 65 64 3b 0a 2f 2a 20 63 68 consumed;./* ch
334d0 65 63 6b 69 6e 67 20 47 65 6f 6d 65 74 72 79 20 ecking Geometry
334e0 54 79 70 65 20 2a 2f 0a 20 20 20 20 69 66 20 28 Type */. if (
334f0 73 7a 20 3c 20 34 29 0a 09 72 65 74 75 72 6e 20 sz < 4)..return
33500 30 3b 0a 20 20 20 20 69 66 20 28 67 61 69 61 49 0;. if (gaiaI
33510 6d 70 6f 72 74 33 32 20 28 70 74 72 2c 20 47 41 mport32 (ptr, GA
33520 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
33530 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 20 21 , endian_arch) !
33540 3d 20 47 41 49 41 5f 4d 55 4c 54 49 50 4f 49 4e = GAIA_MULTIPOIN
33550 54 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 T)..return 0;.
33560 20 20 70 74 72 20 2b 3d 20 34 3b 0a 20 20 20 20 ptr += 4;.
33570 73 7a 20 2d 3d 20 34 3b 0a 2f 2a 20 68 6f 77 20 sz -= 4;./* how
33580 6d 61 6e 79 20 70 6f 69 6e 74 73 20 61 72 65 20 many points are
33590 74 68 65 72 65 20 3f 20 2a 2f 0a 20 20 20 20 69 there ? */. i
335a0 66 20 28 73 7a 20 3c 20 34 29 0a 09 72 65 74 75 f (sz < 4)..retu
335b0 72 6e 20 30 3b 0a 20 20 20 20 70 74 73 20 3d 20 rn 0;. pts =
335c0 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 70 74 gaiaImport32 (pt
335d0 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 r, GAIA_LITTLE_E
335e0 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
335f0 63 68 29 3b 0a 20 20 20 20 70 74 72 20 2b 3d 20 ch);. ptr +=
33600 34 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 34 3b 0a 4;. sz -= 4;.
33610 20 20 20 20 69 66 20 28 70 74 73 20 3c 20 31 29 if (pts < 1)
33620 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 ..return 0;.
33630 66 6f 72 20 28 69 70 74 20 3d 20 30 3b 20 69 70 for (ipt = 0; ip
33640 74 20 3c 20 70 74 73 3b 20 69 70 74 2b 2b 29 0a t < pts; ipt++).
33650 20 20 20 20 20 20 7b 0a 09 20 20 2f 2a 20 66 65 {.. /* fe
33660 74 63 68 69 6e 67 20 69 6e 64 69 76 69 64 75 61 tching individua
33670 6c 20 50 6f 69 6e 74 73 20 66 72 6f 6d 20 46 47 l Points from FG
33680 46 20 2a 2f 0a 09 20 20 69 66 20 28 21 70 6f 69 F */.. if (!poi
33690 6e 74 46 72 6f 6d 46 67 66 20 28 67 65 6f 6d 2c ntFromFgf (geom,
336a0 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 70 74 endian_arch, pt
336b0 72 2c 20 73 7a 2c 20 26 63 6f 6e 73 75 6d 65 64 r, sz, &consumed
336c0 29 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e )).. return
336d0 20 30 3b 0a 09 20 20 70 74 72 20 2b 3d 20 63 6f 0;.. ptr += co
336e0 6e 73 75 6d 65 64 3b 0a 09 20 20 73 7a 20 2d 3d nsumed;.. sz -=
336f0 20 63 6f 6e 73 75 6d 65 64 3b 0a 20 20 20 20 20 consumed;.
33700 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b }. return 1;
33710 0a 7d 0a 0a 73 74 61 74 69 63 20 69 6e 74 0a 6d .}..static int.m
33720 75 6c 74 69 4c 69 6e 65 73 74 72 69 6e 67 46 72 ultiLinestringFr
33730 6f 6d 46 67 66 20 28 67 61 69 61 47 65 6f 6d 43 omFgf (gaiaGeomC
33740 6f 6c 6c 50 74 72 20 67 65 6f 6d 2c 20 69 6e 74 ollPtr geom, int
33750 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 0a 09 09 endian_arch,...
33760 09 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 .const unsigned
33770 63 68 61 72 20 2a 62 6c 6f 62 2c 20 75 6e 73 69 char *blob, unsi
33780 67 6e 65 64 20 69 6e 74 20 73 69 7a 65 29 0a 7b gned int size).{
33790 0a 2f 2a 20 64 65 63 6f 64 69 6e 67 20 61 20 4d ./* decoding a M
337a0 55 4c 54 49 4c 49 4e 45 53 54 52 49 4e 47 20 47 ULTILINESTRING G
337b0 65 6f 6d 65 74 72 79 20 66 72 6f 6d 20 46 47 46 eometry from FGF
337c0 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 6e 73 */. int lns
337d0 3b 0a 20 20 20 20 69 6e 74 20 69 6c 6e 3b 0a 20 ;. int iln;.
337e0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 unsigned int
337f0 73 7a 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 63 sz = size;. c
33800 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 onst unsigned ch
33810 61 72 20 2a 70 74 72 20 3d 20 62 6c 6f 62 3b 0a ar *ptr = blob;.
33820 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 unsigned int
33830 20 63 6f 6e 73 75 6d 65 64 3b 0a 2f 2a 20 63 68 consumed;./* ch
33840 65 63 6b 69 6e 67 20 47 65 6f 6d 65 74 72 79 20 ecking Geometry
33850 54 79 70 65 20 2a 2f 0a 20 20 20 20 69 66 20 28 Type */. if (
33860 73 7a 20 3c 20 34 29 0a 09 72 65 74 75 72 6e 20 sz < 4)..return
33870 30 3b 0a 20 20 20 20 69 66 20 28 67 61 69 61 49 0;. if (gaiaI
33880 6d 70 6f 72 74 33 32 0a 09 28 70 74 72 2c 20 47 mport32..(ptr, G
33890 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
338a0 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 20 N, endian_arch)
338b0 21 3d 20 47 41 49 41 5f 4d 55 4c 54 49 4c 49 4e != GAIA_MULTILIN
338c0 45 53 54 52 49 4e 47 29 0a 09 72 65 74 75 72 6e ESTRING)..return
338d0 20 30 3b 0a 20 20 20 20 70 74 72 20 2b 3d 20 34 0;. ptr += 4
338e0 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 34 3b 0a 2f ;. sz -= 4;./
338f0 2a 20 68 6f 77 20 6d 61 6e 79 20 6c 69 6e 65 73 * how many lines
33900 74 72 69 6e 67 73 20 61 72 65 20 74 68 65 72 65 trings are there
33910 20 3f 20 2a 2f 0a 20 20 20 20 69 66 20 28 73 7a ? */. if (sz
33920 20 3c 20 34 29 0a 09 72 65 74 75 72 6e 20 30 3b < 4)..return 0;
33930 0a 20 20 20 20 6c 6e 73 20 3d 20 67 61 69 61 49 . lns = gaiaI
33940 6d 70 6f 72 74 33 32 20 28 70 74 72 2c 20 47 41 mport32 (ptr, GA
33950 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
33960 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a , endian_arch);.
33970 20 20 20 20 70 74 72 20 2b 3d 20 34 3b 0a 20 20 ptr += 4;.
33980 20 20 73 7a 20 2d 3d 20 34 3b 0a 20 20 20 20 69 sz -= 4;. i
33990 66 20 28 6c 6e 73 20 3c 20 31 29 0a 09 72 65 74 f (lns < 1)..ret
339a0 75 72 6e 20 30 3b 0a 20 20 20 20 66 6f 72 20 28 urn 0;. for (
339b0 69 6c 6e 20 3d 20 30 3b 20 69 6c 6e 20 3c 20 6c iln = 0; iln < l
339c0 6e 73 3b 20 69 6c 6e 2b 2b 29 0a 20 20 20 20 20 ns; iln++).
339d0 20 7b 0a 09 20 20 2f 2a 20 66 65 74 63 68 69 6e {.. /* fetchin
339e0 67 20 69 6e 64 69 76 69 64 75 61 6c 20 4c 69 6e g individual Lin
339f0 65 73 74 72 69 6e 67 73 20 66 72 6f 6d 20 46 47 estrings from FG
33a00 46 20 2a 2f 0a 09 20 20 69 66 20 28 21 6c 69 6e F */.. if (!lin
33a10 65 73 74 72 69 6e 67 46 72 6f 6d 46 67 66 20 28 estringFromFgf (
33a20 67 65 6f 6d 2c 20 65 6e 64 69 61 6e 5f 61 72 63 geom, endian_arc
33a30 68 2c 20 70 74 72 2c 20 73 7a 2c 20 26 63 6f 6e h, ptr, sz, &con
33a40 73 75 6d 65 64 29 29 0a 09 20 20 20 20 20 20 72 sumed)).. r
33a50 65 74 75 72 6e 20 30 3b 0a 09 20 20 70 74 72 20 eturn 0;.. ptr
33a60 2b 3d 20 63 6f 6e 73 75 6d 65 64 3b 0a 09 20 20 += consumed;..
33a70 73 7a 20 2d 3d 20 63 6f 6e 73 75 6d 65 64 3b 0a sz -= consumed;.
33a80 20 20 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 }. retu
33a90 72 6e 20 31 3b 0a 7d 0a 0a 73 74 61 74 69 63 20 rn 1;.}..static
33aa0 69 6e 74 0a 6d 75 6c 74 69 50 6f 6c 79 67 6f 6e int.multiPolygon
33ab0 46 72 6f 6d 46 67 66 20 28 67 61 69 61 47 65 6f FromFgf (gaiaGeo
33ac0 6d 43 6f 6c 6c 50 74 72 20 67 65 6f 6d 2c 20 69 mCollPtr geom, i
33ad0 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 0a nt endian_arch,.
33ae0 09 09 20 20 20 20 20 63 6f 6e 73 74 20 75 6e 73 .. const uns
33af0 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c 6f 62 igned char *blob
33b00 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73 , unsigned int s
33b10 69 7a 65 29 0a 7b 0a 2f 2a 20 64 65 63 6f 64 69 ize).{./* decodi
33b20 6e 67 20 61 20 4d 55 4c 54 49 50 4f 4c 59 47 4f ng a MULTIPOLYGO
33b30 4e 20 47 65 6f 6d 65 74 72 79 20 66 72 6f 6d 20 N Geometry from
33b40 46 47 46 20 20 2a 2f 0a 20 20 20 20 69 6e 74 20 FGF */. int
33b50 70 67 73 3b 0a 20 20 20 20 69 6e 74 20 69 70 67 pgs;. int ipg
33b60 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 ;. unsigned i
33b70 6e 74 20 73 7a 20 3d 20 73 69 7a 65 3b 0a 20 20 nt sz = size;.
33b80 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 const unsigned
33b90 20 63 68 61 72 20 2a 70 74 72 20 3d 20 62 6c 6f char *ptr = blo
33ba0 62 3b 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 b;. unsigned
33bb0 69 6e 74 20 63 6f 6e 73 75 6d 65 64 3b 0a 2f 2a int consumed;./*
33bc0 20 63 68 65 63 6b 69 6e 67 20 47 65 6f 6d 65 74 checking Geomet
33bd0 72 79 20 54 79 70 65 20 2a 2f 0a 20 20 20 20 69 ry Type */. i
33be0 66 20 28 73 7a 20 3c 20 34 29 0a 09 72 65 74 75 f (sz < 4)..retu
33bf0 72 6e 20 30 3b 0a 20 20 20 20 69 66 20 28 67 61 rn 0;. if (ga
33c00 69 61 49 6d 70 6f 72 74 33 32 0a 09 28 70 74 72 iaImport32..(ptr
33c10 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e , GAIA_LITTLE_EN
33c20 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 DIAN, endian_arc
33c30 68 29 20 21 3d 20 47 41 49 41 5f 4d 55 4c 54 49 h) != GAIA_MULTI
33c40 50 4f 4c 59 47 4f 4e 29 0a 09 72 65 74 75 72 6e POLYGON)..return
33c50 20 30 3b 0a 20 20 20 20 70 74 72 20 2b 3d 20 34 0;. ptr += 4
33c60 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 34 3b 0a 2f ;. sz -= 4;./
33c70 2a 20 68 6f 77 20 6d 61 6e 79 20 70 6f 6c 79 67 * how many polyg
33c80 6f 6e 73 20 61 72 65 20 74 68 65 72 65 20 3f 20 ons are there ?
33c90 2a 2f 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 */. if (sz <
33ca0 34 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 4)..return 0;.
33cb0 20 20 70 67 73 20 3d 20 67 61 69 61 49 6d 70 6f pgs = gaiaImpo
33cc0 72 74 33 32 20 28 70 74 72 2c 20 47 41 49 41 5f rt32 (ptr, GAIA_
33cd0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
33ce0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 ndian_arch);.
33cf0 20 70 74 72 20 2b 3d 20 34 3b 0a 20 20 20 20 73 ptr += 4;. s
33d00 7a 20 2d 3d 20 34 3b 0a 20 20 20 20 69 66 20 28 z -= 4;. if (
33d10 70 67 73 20 3c 20 31 29 0a 09 72 65 74 75 72 6e pgs < 1)..return
33d20 20 30 3b 0a 20 20 20 20 66 6f 72 20 28 69 70 67 0;. for (ipg
33d30 20 3d 20 30 3b 20 69 70 67 20 3c 20 70 67 73 3b = 0; ipg < pgs;
33d40 20 69 70 67 2b 2b 29 0a 20 20 20 20 20 20 7b 0a ipg++). {.
33d50 09 20 20 2f 2a 20 66 65 74 63 68 69 6e 67 20 69 . /* fetching i
33d60 6e 64 69 76 69 64 75 61 6c 20 50 6f 6c 79 67 6f ndividual Polygo
33d70 6e 73 20 66 72 6f 6d 20 46 47 46 20 2a 2f 0a 09 ns from FGF */..
33d80 20 20 69 66 20 28 21 70 6f 6c 79 67 6f 6e 46 72 if (!polygonFr
33d90 6f 6d 46 67 66 20 28 67 65 6f 6d 2c 20 65 6e 64 omFgf (geom, end
33da0 69 61 6e 5f 61 72 63 68 2c 20 70 74 72 2c 20 73 ian_arch, ptr, s
33db0 7a 2c 20 26 63 6f 6e 73 75 6d 65 64 29 29 0a 09 z, &consumed))..
33dc0 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a return 0;.
33dd0 09 20 20 70 74 72 20 2b 3d 20 63 6f 6e 73 75 6d . ptr += consum
33de0 65 64 3b 0a 09 20 20 73 7a 20 2d 3d 20 63 6f 6e ed;.. sz -= con
33df0 73 75 6d 65 64 3b 0a 20 20 20 20 20 20 7d 0a 20 sumed;. }.
33e00 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a return 1;.}..
33e10 73 74 61 74 69 63 20 69 6e 74 0a 67 65 6f 6d 43 static int.geomC
33e20 6f 6c 6c 65 63 74 69 6f 6e 46 72 6f 6d 46 67 66 ollectionFromFgf
33e30 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 (gaiaGeomCollPt
33e40 72 20 67 65 6f 6d 2c 20 69 6e 74 20 65 6e 64 69 r geom, int endi
33e50 61 6e 5f 61 72 63 68 2c 0a 09 09 20 20 20 20 20 an_arch,...
33e60 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 const unsigned
33e70 20 63 68 61 72 20 2a 62 6c 6f 62 2c 20 75 6e 73 char *blob, uns
33e80 69 67 6e 65 64 20 69 6e 74 20 73 69 7a 65 29 0a igned int size).
33e90 7b 0a 2f 2a 20 64 65 63 6f 64 69 6e 67 20 61 20 {./* decoding a
33ea0 20 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 GEOMETRYCOLLECT
33eb0 49 4f 4e 20 47 65 6f 6d 65 74 72 79 20 66 72 6f ION Geometry fro
33ec0 6d 20 46 47 46 20 20 2a 2f 0a 20 20 20 20 69 6e m FGF */. in
33ed0 74 20 67 65 6f 6d 73 3b 0a 20 20 20 20 69 6e 74 t geoms;. int
33ee0 20 69 67 3b 0a 20 20 20 20 69 6e 74 20 67 65 6f ig;. int geo
33ef0 6d 5f 74 79 70 65 3b 0a 20 20 20 20 75 6e 73 69 m_type;. unsi
33f00 67 6e 65 64 20 69 6e 74 20 73 7a 20 3d 20 73 69 gned int sz = si
33f10 7a 65 3b 0a 20 20 20 20 63 6f 6e 73 74 20 75 6e ze;. const un
33f20 73 69 67 6e 65 64 20 63 68 61 72 20 2a 70 74 72 signed char *ptr
33f30 20 3d 20 62 6c 6f 62 3b 0a 20 20 20 20 75 6e 73 = blob;. uns
33f40 69 67 6e 65 64 20 69 6e 74 20 63 6f 6e 73 75 6d igned int consum
33f50 65 64 3b 0a 2f 2a 20 63 68 65 63 6b 69 6e 67 20 ed;./* checking
33f60 47 65 6f 6d 65 74 72 79 20 54 79 70 65 20 2a 2f Geometry Type */
33f70 0a 20 20 20 20 69 66 20 28 73 7a 20 3c 20 34 29 . if (sz < 4)
33f80 0a 09 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20 ..return 0;.
33f90 69 66 20 28 67 61 69 61 49 6d 70 6f 72 74 33 32 if (gaiaImport32
33fa0 0a 09 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 ..(ptr, GAIA_LIT
33fb0 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 TLE_ENDIAN, endi
33fc0 61 6e 5f 61 72 63 68 29 20 21 3d 20 47 41 49 41 an_arch) != GAIA
33fd0 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 54 _GEOMETRYCOLLECT
33fe0 49 4f 4e 29 0a 09 72 65 74 75 72 6e 20 30 3b 0a ION)..return 0;.
33ff0 20 20 20 20 70 74 72 20 2b 3d 20 34 3b 0a 20 20 ptr += 4;.
34000 20 20 73 7a 20 2d 3d 20 34 3b 0a 2f 2a 20 68 6f sz -= 4;./* ho
34010 77 20 6d 61 6e 79 20 69 6e 64 69 76 69 64 75 61 w many individua
34020 6c 20 47 65 6f 6d 65 74 72 69 65 73 20 61 72 65 l Geometries are
34030 20 74 68 65 72 65 20 3f 20 2a 2f 0a 20 20 20 20 there ? */.
34040 69 66 20 28 73 7a 20 3c 20 34 29 0a 09 72 65 74 if (sz < 4)..ret
34050 75 72 6e 20 30 3b 0a 20 20 20 20 67 65 6f 6d 73 urn 0;. geoms
34060 20 3d 20 67 61 69 61 49 6d 70 6f 72 74 33 32 20 = gaiaImport32
34070 28 70 74 72 2c 20 47 41 49 41 5f 4c 49 54 54 4c (ptr, GAIA_LITTL
34080 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e E_ENDIAN, endian
34090 5f 61 72 63 68 29 3b 0a 20 20 20 20 70 74 72 20 _arch);. ptr
340a0 2b 3d 20 34 3b 0a 20 20 20 20 73 7a 20 2d 3d 20 += 4;. sz -=
340b0 34 3b 0a 20 20 20 20 69 66 20 28 67 65 6f 6d 73 4;. if (geoms
340c0 20 3c 20 31 29 0a 09 72 65 74 75 72 6e 20 30 3b < 1)..return 0;
340d0 0a 20 20 20 20 66 6f 72 20 28 69 67 20 3d 20 30 . for (ig = 0
340e0 3b 20 69 67 20 3c 20 67 65 6f 6d 73 3b 20 69 67 ; ig < geoms; ig
340f0 2b 2b 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f ++). {.. /
34100 2a 20 66 65 74 63 68 69 6e 67 20 69 6e 64 69 76 * fetching indiv
34110 69 64 75 61 6c 20 47 65 6f 6d 65 74 72 69 65 73 idual Geometries
34120 20 66 72 6f 6d 20 46 47 46 20 2a 2f 0a 09 20 20 from FGF */..
34130 69 66 20 28 73 7a 20 3c 20 34 29 0a 09 20 20 20 if (sz < 4)..
34140 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 09 20 20 return 0;..
34150 67 65 6f 6d 5f 74 79 70 65 20 3d 20 67 61 69 61 geom_type = gaia
34160 49 6d 70 6f 72 74 33 32 20 28 70 74 72 2c 20 47 Import32 (ptr, G
34170 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
34180 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b N, endian_arch);
34190 0a 09 20 20 73 77 69 74 63 68 20 28 67 65 6f 6d .. switch (geom
341a0 5f 74 79 70 65 29 0a 09 20 20 20 20 7b 0a 09 20 _type).. {..
341b0 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 4f 49 case GAIA_POI
341c0 4e 54 3a 0a 09 09 69 66 20 28 21 70 6f 69 6e 74 NT:...if (!point
341d0 46 72 6f 6d 46 67 66 20 28 67 65 6f 6d 2c 20 65 FromFgf (geom, e
341e0 6e 64 69 61 6e 5f 61 72 63 68 2c 20 70 74 72 2c ndian_arch, ptr,
341f0 20 73 7a 2c 20 26 63 6f 6e 73 75 6d 65 64 29 29 sz, &consumed))
34200 0a 09 09 20 20 20 20 72 65 74 75 72 6e 20 30 3b ... return 0;
34210 0a 09 09 62 72 65 61 6b 3b 0a 09 20 20 20 20 63 ...break;.. c
34220 61 73 65 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 ase GAIA_LINESTR
34230 49 4e 47 3a 0a 09 09 69 66 20 28 21 6c 69 6e 65 ING:...if (!line
34240 73 74 72 69 6e 67 46 72 6f 6d 46 67 66 20 28 67 stringFromFgf (g
34250 65 6f 6d 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 eom, endian_arch
34260 2c 20 70 74 72 2c 20 73 7a 2c 20 26 63 6f 6e 73 , ptr, sz, &cons
34270 75 6d 65 64 29 29 0a 09 09 20 20 20 20 72 65 74 umed))... ret
34280 75 72 6e 20 30 3b 0a 09 09 62 72 65 61 6b 3b 0a urn 0;...break;.
34290 09 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 50 . case GAIA_P
342a0 4f 4c 59 47 4f 4e 3a 0a 09 09 69 66 20 28 21 70 OLYGON:...if (!p
342b0 6f 6c 79 67 6f 6e 46 72 6f 6d 46 67 66 20 28 67 olygonFromFgf (g
342c0 65 6f 6d 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 eom, endian_arch
342d0 2c 20 70 74 72 2c 20 73 7a 2c 20 26 63 6f 6e 73 , ptr, sz, &cons
342e0 75 6d 65 64 29 29 0a 09 09 20 20 20 20 72 65 74 umed))... ret
342f0 75 72 6e 20 30 3b 0a 09 09 62 72 65 61 6b 3b 0a urn 0;...break;.
34300 09 20 20 20 20 64 65 66 61 75 6c 74 3a 09 09 2f . default:../
34310 2a 20 75 6e 73 75 70 70 6f 72 74 65 64 20 67 65 * unsupported ge
34320 6f 6d 65 74 72 79 20 74 79 70 65 20 2a 2f 0a 09 ometry type */..
34330 09 72 65 74 75 72 6e 20 30 3b 0a 09 09 62 72 65 .return 0;...bre
34340 61 6b 3b 0a 09 20 20 20 20 7d 3b 0a 09 20 20 70 ak;.. };.. p
34350 74 72 20 2b 3d 20 63 6f 6e 73 75 6d 65 64 3b 0a tr += consumed;.
34360 09 20 20 73 7a 20 2d 3d 20 63 6f 6e 73 75 6d 65 . sz -= consume
34370 64 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 72 d;. }. r
34380 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 47 41 49 41 eturn 1;.}..GAIA
34390 47 45 4f 5f 44 45 43 4c 41 52 45 20 67 61 69 61 GEO_DECLARE gaia
343a0 47 65 6f 6d 43 6f 6c 6c 50 74 72 0a 67 61 69 61 GeomCollPtr.gaia
343b0 46 72 6f 6d 46 67 66 20 28 63 6f 6e 73 74 20 75 FromFgf (const u
343c0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 62 6c nsigned char *bl
343d0 6f 62 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 ob, unsigned int
343e0 20 73 69 7a 65 29 0a 7b 0a 2f 2a 20 64 65 63 6f size).{./* deco
343f0 64 69 6e 67 20 66 72 6f 6d 20 46 47 46 20 74 6f ding from FGF to
34400 20 47 45 4f 4d 45 54 52 59 20 20 2a 2f 0a 20 20 GEOMETRY */.
34410 20 20 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 74 gaiaGeomCollPt
34420 72 20 67 65 6f 6d 20 3d 20 4e 55 4c 4c 3b 0a 20 r geom = NULL;.
34430 20 20 20 69 6e 74 20 74 3b 0a 20 20 20 20 69 6e int t;. in
34440 74 20 64 3b 0a 20 20 20 20 69 6e 74 20 67 65 6f t d;. int geo
34450 6d 5f 74 79 70 65 3b 0a 20 20 20 20 69 6e 74 20 m_type;. int
34460 64 69 6d 73 3b 0a 20 20 20 20 69 6e 74 20 65 6e dims;. int en
34470 64 69 61 6e 5f 61 72 63 68 20 3d 20 67 61 69 61 dian_arch = gaia
34480 45 6e 64 69 61 6e 41 72 63 68 20 28 29 3b 0a 20 EndianArch ();.
34490 20 20 20 69 66 20 28 73 69 7a 65 20 3c 20 31 36 if (size < 16
344a0 29 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a )..return NULL;.
344b0 0a 2f 2a 20 63 68 65 63 6b 69 6e 67 20 46 47 46 ./* checking FGF
344c0 20 74 79 70 65 20 61 6e 64 20 64 69 6d 65 6e 73 type and dimens
344d0 69 6f 6e 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20 ions */. t =
344e0 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c gaiaImport32 (bl
344f0 6f 62 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f ob, GAIA_LITTLE_
34500 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
34510 72 63 68 29 3b 0a 20 20 20 20 69 66 20 28 74 20 rch);. if (t
34520 3d 3d 20 31 20 7c 7c 20 74 20 3d 3d 20 32 20 7c == 1 || t == 2 |
34530 7c 20 74 20 3d 3d 20 33 29 0a 20 20 20 20 20 20 | t == 3).
34540 7b 0a 09 20 20 2f 2a 20 65 6c 65 6d 65 6e 74 61 {.. /* elementa
34550 72 79 3a 20 50 4f 49 4e 54 2c 20 4c 49 4e 45 53 ry: POINT, LINES
34560 54 52 49 4e 47 20 6f 72 20 50 4f 4c 59 47 4f 4e TRING or POLYGON
34570 20 2a 2f 0a 09 20 20 64 20 3d 20 67 61 69 61 49 */.. d = gaiaI
34580 6d 70 6f 72 74 33 32 20 28 62 6c 6f 62 20 2b 20 mport32 (blob +
34590 34 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4, GAIA_LITTLE_E
345a0 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
345b0 63 68 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 ch);. }.
345c0 20 65 6c 73 65 0a 20 20 20 20 20 20 7b 0a 09 20 else. {..
345d0 20 2f 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6c 65 /* multiple ele
345e0 6d 65 6e 74 73 20 2a 2f 0a 09 20 20 64 20 3d 20 ments */.. d =
345f0 67 61 69 61 49 6d 70 6f 72 74 33 32 20 28 62 6c gaiaImport32 (bl
34600 6f 62 20 2b 20 31 32 2c 20 47 41 49 41 5f 4c 49 ob + 12, GAIA_LI
34610 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 TTLE_ENDIAN, end
34620 69 61 6e 5f 61 72 63 68 29 3b 0a 20 20 20 20 20 ian_arch);.
34630 20 7d 0a 20 20 20 20 69 66 20 28 21 63 68 65 63 }. if (!chec
34640 6b 46 67 66 54 79 70 65 44 69 6d 73 20 28 74 2c kFgfTypeDims (t,
34650 20 64 2c 20 26 67 65 6f 6d 5f 74 79 70 65 2c 20 d, &geom_type,
34660 26 64 69 6d 73 29 29 0a 09 72 65 74 75 72 6e 20 &dims))..return
34670 4e 55 4c 4c 3b 0a 0a 2f 2a 20 61 6c 6c 6f 63 61 NULL;../* alloca
34680 74 69 6e 67 20 61 20 47 61 69 61 20 47 65 6f 6d ting a Gaia Geom
34690 65 74 72 79 20 61 63 63 6f 72 64 69 6e 67 6c 79 etry accordingly
346a0 20 74 6f 20 64 65 63 6c 61 72 65 64 20 44 69 6d to declared Dim
346b0 73 20 2a 2f 0a 20 20 20 20 69 66 20 28 64 69 6d s */. if (dim
346c0 73 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 5f 4d s == GAIA_XY_Z_M
346d0 29 0a 09 67 65 6f 6d 20 3d 20 67 61 69 61 41 6c )..geom = gaiaAl
346e0 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 5a 4d 20 locGeomCollXYZM
346f0 28 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 20 ();. else if
34700 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 59 (dims == GAIA_XY
34710 5f 5a 29 0a 09 67 65 6f 6d 20 3d 20 67 61 69 61 _Z)..geom = gaia
34720 41 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 5a AllocGeomCollXYZ
34730 20 28 29 3b 0a 20 20 20 20 65 6c 73 65 20 69 66 ();. else if
34740 20 28 64 69 6d 73 20 3d 3d 20 47 41 49 41 5f 58 (dims == GAIA_X
34750 59 5f 4d 29 0a 09 67 65 6f 6d 20 3d 20 67 61 69 Y_M)..geom = gai
34760 61 41 6c 6c 6f 63 47 65 6f 6d 43 6f 6c 6c 58 59 aAllocGeomCollXY
34770 4d 20 28 29 3b 0a 20 20 20 20 65 6c 73 65 0a 09 M ();. else..
34780 67 65 6f 6d 20 3d 20 67 61 69 61 41 6c 6c 6f 63 geom = gaiaAlloc
34790 47 65 6f 6d 43 6f 6c 6c 20 28 29 3b 0a 20 20 20 GeomColl ();.
347a0 20 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 geom->DeclaredT
347b0 79 70 65 20 3d 20 67 65 6f 6d 5f 74 79 70 65 3b ype = geom_type;
347c0 0a 0a 20 20 20 20 73 77 69 74 63 68 20 28 67 65 .. switch (ge
347d0 6f 6d 5f 74 79 70 65 29 0a 20 20 20 20 20 20 7b om_type). {
347e0 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
347f0 5f 50 4f 49 4e 54 3a 0a 09 20 20 69 66 20 28 70 _POINT:.. if (p
34800 6f 69 6e 74 46 72 6f 6d 46 67 66 20 28 67 65 6f ointFromFgf (geo
34810 6d 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 m, endian_arch,
34820 62 6c 6f 62 2c 20 73 69 7a 65 2c 20 4e 55 4c 4c blob, size, NULL
34830 29 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e )).. return
34840 20 67 65 6f 6d 3b 0a 09 20 20 62 72 65 61 6b 3b geom;.. break;
34850 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
34860 5f 4c 49 4e 45 53 54 52 49 4e 47 3a 0a 09 20 20 _LINESTRING:..
34870 69 66 20 28 6c 69 6e 65 73 74 72 69 6e 67 46 72 if (linestringFr
34880 6f 6d 46 67 66 20 28 67 65 6f 6d 2c 20 65 6e 64 omFgf (geom, end
34890 69 61 6e 5f 61 72 63 68 2c 20 62 6c 6f 62 2c 20 ian_arch, blob,
348a0 73 69 7a 65 2c 20 4e 55 4c 4c 29 29 0a 09 20 20 size, NULL))..
348b0 20 20 20 20 72 65 74 75 72 6e 20 67 65 6f 6d 3b return geom;
348c0 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 .. break;.
348d0 20 63 61 73 65 20 47 41 49 41 5f 50 4f 4c 59 47 case GAIA_POLYG
348e0 4f 4e 3a 0a 09 20 20 69 66 20 28 70 6f 6c 79 67 ON:.. if (polyg
348f0 6f 6e 46 72 6f 6d 46 67 66 20 28 67 65 6f 6d 2c onFromFgf (geom,
34900 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 62 6c endian_arch, bl
34910 6f 62 2c 20 73 69 7a 65 2c 20 4e 55 4c 4c 29 29 ob, size, NULL))
34920 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e 20 67 .. return g
34930 65 6f 6d 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 eom;.. break;.
34940 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f 4d case GAIA_M
34950 55 4c 54 49 50 4f 49 4e 54 3a 0a 09 20 20 69 66 ULTIPOINT:.. if
34960 20 28 6d 75 6c 74 69 50 6f 69 6e 74 46 72 6f 6d (multiPointFrom
34970 46 67 66 20 28 67 65 6f 6d 2c 20 65 6e 64 69 61 Fgf (geom, endia
34980 6e 5f 61 72 63 68 2c 20 62 6c 6f 62 2c 20 73 69 n_arch, blob, si
34990 7a 65 29 29 0a 09 20 20 20 20 20 20 72 65 74 75 ze)).. retu
349a0 72 6e 20 67 65 6f 6d 3b 0a 09 20 20 62 72 65 61 rn geom;.. brea
349b0 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 k;. case GA
349c0 49 41 5f 4d 55 4c 54 49 4c 49 4e 45 53 54 52 49 IA_MULTILINESTRI
349d0 4e 47 3a 0a 09 20 20 69 66 20 28 6d 75 6c 74 69 NG:.. if (multi
349e0 4c 69 6e 65 73 74 72 69 6e 67 46 72 6f 6d 46 67 LinestringFromFg
349f0 66 20 28 67 65 6f 6d 2c 20 65 6e 64 69 61 6e 5f f (geom, endian_
34a00 61 72 63 68 2c 20 62 6c 6f 62 2c 20 73 69 7a 65 arch, blob, size
34a10 29 29 0a 09 20 20 20 20 20 20 72 65 74 75 72 6e )).. return
34a20 20 67 65 6f 6d 3b 0a 09 20 20 62 72 65 61 6b 3b geom;.. break;
34a30 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
34a40 5f 4d 55 4c 54 49 50 4f 4c 59 47 4f 4e 3a 0a 09 _MULTIPOLYGON:..
34a50 20 20 69 66 20 28 6d 75 6c 74 69 50 6f 6c 79 67 if (multiPolyg
34a60 6f 6e 46 72 6f 6d 46 67 66 20 28 67 65 6f 6d 2c onFromFgf (geom,
34a70 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 62 6c endian_arch, bl
34a80 6f 62 2c 20 73 69 7a 65 29 29 0a 09 20 20 20 20 ob, size))..
34a90 20 20 72 65 74 75 72 6e 20 67 65 6f 6d 3b 0a 09 return geom;..
34aa0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 break;. c
34ab0 61 73 65 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 ase GAIA_GEOMETR
34ac0 59 43 4f 4c 4c 45 43 54 49 4f 4e 3a 0a 09 20 20 YCOLLECTION:..
34ad0 69 66 20 28 67 65 6f 6d 43 6f 6c 6c 65 63 74 69 if (geomCollecti
34ae0 6f 6e 46 72 6f 6d 46 67 66 20 28 67 65 6f 6d 2c onFromFgf (geom,
34af0 20 65 6e 64 69 61 6e 5f 61 72 63 68 2c 20 62 6c endian_arch, bl
34b00 6f 62 2c 20 73 69 7a 65 29 29 0a 09 20 20 20 20 ob, size))..
34b10 20 20 72 65 74 75 72 6e 20 67 65 6f 6d 3b 0a 09 return geom;..
34b20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d break;. }
34b30 3b 0a 20 20 20 20 67 61 69 61 46 72 65 65 47 65 ;. gaiaFreeGe
34b40 6f 6d 43 6f 6c 6c 20 28 67 65 6f 6d 29 3b 0a 20 omColl (geom);.
34b50 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a return NULL;.
34b60 7d 0a 0a 47 41 49 41 47 45 4f 5f 44 45 43 4c 41 }..GAIAGEO_DECLA
34b70 52 45 20 76 6f 69 64 0a 67 61 69 61 54 6f 46 67 RE void.gaiaToFg
34b80 66 20 28 67 61 69 61 47 65 6f 6d 43 6f 6c 6c 50 f (gaiaGeomCollP
34b90 74 72 20 67 65 6f 6d 2c 20 75 6e 73 69 67 6e 65 tr geom, unsigne
34ba0 64 20 63 68 61 72 20 2a 2a 72 65 73 75 6c 74 2c d char **result,
34bb0 20 69 6e 74 20 2a 73 69 7a 65 29 0a 7b 0a 2f 2a int *size).{./*
34bc0 20 62 75 69 6c 64 73 20 74 68 65 20 46 47 46 20 builds the FGF
34bd0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 66 representation f
34be0 6f 72 20 74 68 69 73 20 47 45 4f 4d 45 54 52 59 or this GEOMETRY
34bf0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 62 3b 0a */. int ib;.
34c00 20 20 20 20 69 6e 74 20 69 76 3b 0a 20 20 20 20 int iv;.
34c10 64 6f 75 62 6c 65 20 78 3b 0a 20 20 20 20 64 6f double x;. do
34c20 75 62 6c 65 20 79 3b 0a 20 20 20 20 64 6f 75 62 uble y;. doub
34c30 6c 65 20 7a 3b 0a 20 20 20 20 64 6f 75 62 6c 65 le z;. double
34c40 20 6d 3b 0a 20 20 20 20 69 6e 74 20 65 6e 74 69 m;. int enti
34c50 74 69 65 73 20 3d 20 30 3b 0a 20 20 20 20 69 6e ties = 0;. in
34c60 74 20 6e 5f 70 6f 69 6e 74 73 20 3d 20 30 3b 0a t n_points = 0;.
34c70 20 20 20 20 69 6e 74 20 6e 5f 6c 69 6e 65 73 74 int n_linest
34c80 72 69 6e 67 73 20 3d 20 30 3b 0a 20 20 20 20 69 rings = 0;. i
34c90 6e 74 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 20 nt n_polygons =
34ca0 30 3b 0a 20 20 20 20 69 6e 74 20 74 79 70 65 3b 0;. int type;
34cb0 0a 20 20 20 20 69 6e 74 20 6e 5f 63 6f 6f 72 64 . int n_coord
34cc0 73 3b 0a 20 20 20 20 69 6e 74 20 66 6c 61 67 5f s;. int flag_
34cd0 64 69 6d 73 3b 0a 20 20 20 20 75 6e 73 69 67 6e dims;. unsign
34ce0 65 64 20 63 68 61 72 20 2a 70 74 72 3b 0a 20 20 ed char *ptr;.
34cf0 20 20 69 6e 74 20 73 7a 20 3d 20 30 3b 0a 20 20 int sz = 0;.
34d00 20 20 67 61 69 61 50 6f 69 6e 74 50 74 72 20 70 gaiaPointPtr p
34d10 74 3b 0a 20 20 20 20 67 61 69 61 4c 69 6e 65 73 t;. gaiaLines
34d20 74 72 69 6e 67 50 74 72 20 6c 6e 3b 0a 20 20 20 tringPtr ln;.
34d30 20 67 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 gaiaPolygonPtr
34d40 70 67 3b 0a 20 20 20 20 67 61 69 61 52 69 6e 67 pg;. gaiaRing
34d50 50 74 72 20 72 6e 67 3b 0a 20 20 20 20 67 61 69 Ptr rng;. gai
34d60 61 50 6f 69 6e 74 50 74 72 20 70 6f 69 6e 74 20 aPointPtr point
34d70 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 61 69 61 = NULL;. gaia
34d80 4c 69 6e 65 73 74 72 69 6e 67 50 74 72 20 6c 69 LinestringPtr li
34d90 6e 65 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 67 ne = NULL;. g
34da0 61 69 61 50 6f 6c 79 67 6f 6e 50 74 72 20 70 6f aiaPolygonPtr po
34db0 6c 79 67 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 lyg = NULL;.
34dc0 69 6e 74 20 65 6e 64 69 61 6e 5f 61 72 63 68 20 int endian_arch
34dd0 3d 20 67 61 69 61 45 6e 64 69 61 6e 41 72 63 68 = gaiaEndianArch
34de0 20 28 29 3b 0a 0a 20 20 20 20 67 61 69 61 4d 62 ();.. gaiaMb
34df0 72 47 65 6f 6d 65 74 72 79 20 28 67 65 6f 6d 29 rGeometry (geom)
34e00 3b 0a 20 20 20 20 73 77 69 74 63 68 20 28 67 65 ;. switch (ge
34e10 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
34e20 65 6c 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 2f el). {.. /
34e30 2a 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74 68 * determining th
34e40 65 20 44 69 6d 65 6e 73 69 6f 6e 73 20 2a 2f 0a e Dimensions */.
34e50 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 5f case GAIA_
34e60 58 59 3a 0a 09 20 20 66 6c 61 67 5f 64 69 6d 73 XY:.. flag_dims
34e70 20 3d 20 30 3b 0a 09 20 20 6e 5f 63 6f 6f 72 64 = 0;.. n_coord
34e80 73 20 3d 20 32 3b 0a 09 20 20 62 72 65 61 6b 3b s = 2;.. break;
34e90 0a 20 20 20 20 20 20 63 61 73 65 20 47 41 49 41 . case GAIA
34ea0 5f 58 59 5f 5a 3a 0a 09 20 20 66 6c 61 67 5f 64 _XY_Z:.. flag_d
34eb0 69 6d 73 20 3d 20 31 3b 0a 09 20 20 6e 5f 63 6f ims = 1;.. n_co
34ec0 6f 72 64 73 20 3d 20 33 3b 0a 09 20 20 62 72 65 ords = 3;.. bre
34ed0 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 47 ak;. case G
34ee0 41 49 41 5f 58 59 5f 4d 3a 0a 09 20 20 66 6c 61 AIA_XY_M:.. fla
34ef0 67 5f 64 69 6d 73 20 3d 20 32 3b 0a 09 20 20 6e g_dims = 2;.. n
34f00 5f 63 6f 6f 72 64 73 20 3d 20 33 3b 0a 09 20 20 _coords = 3;..
34f10 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 break;. cas
34f20 65 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 3a 0a 09 e GAIA_XY_Z_M:..
34f30 20 20 66 6c 61 67 5f 64 69 6d 73 20 3d 20 33 3b flag_dims = 3;
34f40 0a 09 20 20 6e 5f 63 6f 6f 72 64 73 20 3d 20 34 .. n_coords = 4
34f50 3b 0a 09 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 ;.. break;.
34f60 20 20 64 65 66 61 75 6c 74 3a 0a 09 20 20 6e 5f default:.. n_
34f70 63 6f 6f 72 64 73 20 3d 20 30 3b 0a 09 20 20 62 coords = 0;.. b
34f80 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 2f 2a reak;. }./*
34f90 20 68 6f 77 20 6d 61 6e 79 20 65 6e 74 69 74 69 how many entiti
34fa0 65 73 2c 20 61 6e 64 20 6f 66 20 77 68 61 74 20 es, and of what
34fb0 6b 69 6e 64 2c 20 64 6f 20 77 65 20 68 61 76 65 kind, do we have
34fc0 20 3f 20 2a 2f 0a 20 20 20 20 70 74 20 3d 20 67 ? */. pt = g
34fd0 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 69 6e 74 3b eom->FirstPoint;
34fe0 0a 20 20 20 20 77 68 69 6c 65 20 28 70 74 29 0a . while (pt).
34ff0 20 20 20 20 20 20 7b 0a 09 20 20 70 6f 69 6e 74 {.. point
35000 20 3d 20 70 74 3b 0a 09 20 20 65 6e 74 69 74 69 = pt;.. entiti
35010 65 73 2b 2b 3b 0a 09 20 20 6e 5f 70 6f 69 6e 74 es++;.. n_point
35020 73 2b 2b 3b 0a 09 20 20 70 74 20 3d 20 70 74 2d s++;.. pt = pt-
35030 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 >Next;. }.
35040 20 20 20 6c 6e 20 3d 20 67 65 6f 6d 2d 3e 46 69 ln = geom->Fi
35050 72 73 74 4c 69 6e 65 73 74 72 69 6e 67 3b 0a 20 rstLinestring;.
35060 20 20 20 77 68 69 6c 65 20 28 6c 6e 29 0a 20 20 while (ln).
35070 20 20 20 20 7b 0a 09 20 20 6c 69 6e 65 20 3d 20 {.. line =
35080 6c 6e 3b 0a 09 20 20 65 6e 74 69 74 69 65 73 2b ln;.. entities+
35090 2b 3b 0a 09 20 20 6e 5f 6c 69 6e 65 73 74 72 69 +;.. n_linestri
350a0 6e 67 73 2b 2b 3b 0a 09 20 20 6c 6e 20 3d 20 6c ngs++;.. ln = l
350b0 6e 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d n->Next;. }
350c0 0a 20 20 20 20 70 67 20 3d 20 67 65 6f 6d 2d 3e . pg = geom->
350d0 46 69 72 73 74 50 6f 6c 79 67 6f 6e 3b 0a 20 20 FirstPolygon;.
350e0 20 20 77 68 69 6c 65 20 28 70 67 29 0a 20 20 20 while (pg).
350f0 20 20 20 7b 0a 09 20 20 70 6f 6c 79 67 20 3d 20 {.. polyg =
35100 70 67 3b 0a 09 20 20 65 6e 74 69 74 69 65 73 2b pg;.. entities+
35110 2b 3b 0a 09 20 20 6e 5f 70 6f 6c 79 67 6f 6e 73 +;.. n_polygons
35120 2b 2b 3b 0a 09 20 20 70 67 20 3d 20 70 67 2d 3e ++;.. pg = pg->
35130 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 Next;. }.
35140 20 20 2a 73 69 7a 65 20 3d 20 30 3b 0a 20 20 20 *size = 0;.
35150 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 2a 72 65 sz = 0;. *re
35160 73 75 6c 74 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 sult = NULL;.
35170 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d 3d if (n_points ==
35180 20 30 20 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 0 && n_polygons
35190 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 == 0 && n_lines
351a0 74 72 69 6e 67 73 20 3d 3d 20 30 29 0a 09 72 65 trings == 0)..re
351b0 74 75 72 6e 3b 0a 2f 2a 20 6f 6b 2c 20 77 65 20 turn;./* ok, we
351c0 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 74 68 can determine th
351d0 65 20 67 65 6f 6d 65 74 72 79 20 63 6c 61 73 73 e geometry class
351e0 20 2a 2f 0a 20 20 20 20 69 66 20 28 6e 5f 70 6f */. if (n_po
351f0 69 6e 74 73 20 3d 3d 20 31 20 26 26 20 6e 5f 6c ints == 1 && n_l
35200 69 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 inestrings == 0
35210 26 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d && n_polygons ==
35220 20 30 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 0). {.. i
35230 66 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 f (geom->Declare
35240 64 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 dType == GAIA_MU
35250 4c 54 49 50 4f 49 4e 54 29 0a 09 20 20 20 20 20 LTIPOINT)..
35260 20 74 79 70 65 20 3d 20 34 3b 0a 09 20 20 65 6c type = 4;.. el
35270 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 63 se if (geom->Dec
35280 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 49 laredType == GAI
35290 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 43 A_GEOMETRYCOLLEC
352a0 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 74 79 70 TION).. typ
352b0 65 20 3d 20 37 3b 0a 09 20 20 65 6c 73 65 0a 09 e = 7;.. else..
352c0 20 20 20 20 20 20 74 79 70 65 20 3d 20 31 3b 0a type = 1;.
352d0 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 65 }. else
352e0 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3e 20 if (n_points >
352f0 31 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 69 6e 1 && n_linestrin
35300 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 6f 6c gs == 0 && n_pol
35310 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 20 20 ygons == 0).
35320 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d 2d {.. if (geom-
35330 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d >DeclaredType ==
35340 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f GAIA_GEOMETRYCO
35350 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 LLECTION)..
35360 20 74 79 70 65 20 3d 20 37 3b 0a 09 20 20 65 6c type = 7;.. el
35370 73 65 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d se.. type =
35380 20 34 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 4;. }.
35390 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 else if (n_point
353a0 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 s == 0 && n_line
353b0 73 74 72 69 6e 67 73 20 3d 3d 20 31 20 26 26 20 strings == 1 &&
353c0 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 n_polygons == 0)
353d0 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 20 28 . {.. if (
353e0 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 geom->DeclaredTy
353f0 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c 54 49 pe == GAIA_MULTI
35400 4c 49 4e 45 53 54 52 49 4e 47 29 0a 09 20 20 20 LINESTRING)..
35410 20 20 20 74 79 70 65 20 3d 20 35 3b 0a 09 20 20 type = 5;..
35420 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
35430 65 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 eclaredType == G
35440 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c AIA_GEOMETRYCOLL
35450 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 74 ECTION).. t
35460 79 70 65 20 3d 20 37 3b 0a 09 20 20 65 6c 73 65 ype = 7;.. else
35470 0a 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 32 .. type = 2
35480 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c ;. }. el
35490 73 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 se if (n_points
354a0 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 == 0 && n_linest
354b0 72 69 6e 67 73 20 3e 20 31 20 26 26 20 6e 5f 70 rings > 1 && n_p
354c0 6f 6c 79 67 6f 6e 73 20 3d 3d 20 30 29 0a 20 20 olygons == 0).
354d0 20 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f {.. if (geo
354e0 6d 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 m->DeclaredType
354f0 3d 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 == GAIA_GEOMETRY
35500 43 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 COLLECTION)..
35510 20 20 20 74 79 70 65 20 3d 20 37 3b 0a 09 20 20 type = 7;..
35520 65 6c 73 65 0a 09 20 20 20 20 20 20 74 79 70 65 else.. type
35530 20 3d 20 35 3b 0a 20 20 20 20 20 20 7d 0a 20 20 = 5;. }.
35540 20 20 65 6c 73 65 20 69 66 20 28 6e 5f 70 6f 69 else if (n_poi
35550 6e 74 73 20 3d 3d 20 30 20 26 26 20 6e 5f 6c 69 nts == 0 && n_li
35560 6e 65 73 74 72 69 6e 67 73 20 3d 3d 20 30 20 26 nestrings == 0 &
35570 26 20 6e 5f 70 6f 6c 79 67 6f 6e 73 20 3d 3d 20 & n_polygons ==
35580 31 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 69 66 1). {.. if
35590 20 28 67 65 6f 6d 2d 3e 44 65 63 6c 61 72 65 64 (geom->Declared
355a0 54 79 70 65 20 3d 3d 20 47 41 49 41 5f 4d 55 4c Type == GAIA_MUL
355b0 54 49 50 4f 4c 59 47 4f 4e 29 0a 09 20 20 20 20 TIPOLYGON)..
355c0 20 20 74 79 70 65 20 3d 20 36 3b 0a 09 20 20 65 type = 6;.. e
355d0 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 65 lse if (geom->De
355e0 63 6c 61 72 65 64 54 79 70 65 20 3d 3d 20 47 41 claredType == GA
355f0 49 41 5f 47 45 4f 4d 45 54 52 59 43 4f 4c 4c 45 IA_GEOMETRYCOLLE
35600 43 54 49 4f 4e 29 0a 09 20 20 20 20 20 20 74 79 CTION).. ty
35610 70 65 20 3d 20 37 3b 0a 09 20 20 65 6c 73 65 0a pe = 7;.. else.
35620 09 20 20 20 20 20 20 74 79 70 65 20 3d 20 33 3b . type = 3;
35630 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 65 6c 73 . }. els
35640 65 20 69 66 20 28 6e 5f 70 6f 69 6e 74 73 20 3d e if (n_points =
35650 3d 20 30 20 26 26 20 6e 5f 6c 69 6e 65 73 74 72 = 0 && n_linestr
35660 69 6e 67 73 20 3d 3d 20 30 20 26 26 20 6e 5f 70 ings == 0 && n_p
35670 6f 6c 79 67 6f 6e 73 20 3e 20 31 29 0a 20 20 20 olygons > 1).
35680 20 20 20 7b 0a 09 20 20 69 66 20 28 67 65 6f 6d {.. if (geom
35690 2d 3e 44 65 63 6c 61 72 65 64 54 79 70 65 20 3d ->DeclaredType =
356a0 3d 20 47 41 49 41 5f 47 45 4f 4d 45 54 52 59 43 = GAIA_GEOMETRYC
356b0 4f 4c 4c 45 43 54 49 4f 4e 29 0a 09 20 20 20 20 OLLECTION)..
356c0 20 20 74 79 70 65 20 3d 20 37 3b 0a 09 20 20 65 type = 7;.. e
356d0 6c 73 65 0a 09 20 20 20 20 20 20 74 79 70 65 20 lse.. type
356e0 3d 20 36 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 = 6;. }.
356f0 20 65 6c 73 65 0a 09 74 79 70 65 20 3d 20 37 3b else..type = 7;
35700 0a 2f 2a 20 61 6e 64 20 6e 6f 77 20 77 65 20 63 ./* and now we c
35710 6f 6d 70 75 74 65 20 74 68 65 20 73 69 7a 65 20 ompute the size
35720 6f 66 20 46 47 46 20 2a 2f 0a 20 20 20 20 69 66 of FGF */. if
35730 20 28 74 79 70 65 20 3d 3d 20 34 20 7c 7c 20 74 (type == 4 || t
35740 79 70 65 20 3d 3d 20 35 20 7c 7c 20 74 79 70 65 ype == 5 || type
35750 20 3d 3d 20 36 20 7c 7c 20 74 79 70 65 20 3d 3d == 6 || type ==
35760 20 37 29 0a 09 73 7a 20 2b 3d 20 38 3b 0a 20 20 7)..sz += 8;.
35770 20 20 70 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d 3e point = geom->
35780 46 69 72 73 74 50 6f 69 6e 74 3b 0a 20 20 20 20 FirstPoint;.
35790 77 68 69 6c 65 20 28 70 6f 69 6e 74 29 0a 20 20 while (point).
357a0 20 20 20 20 7b 0a 09 20 20 73 7a 20 2b 3d 20 28 {.. sz += (
357b0 38 20 2b 20 28 6e 5f 63 6f 6f 72 64 73 20 2a 20 8 + (n_coords *
357c0 38 29 29 3b 09 2f 2a 20 74 68 65 20 73 69 7a 65 8));./* the size
357d0 20 6f 66 20 65 61 63 68 20 50 4f 49 4e 54 20 2a of each POINT *
357e0 2f 0a 09 20 20 70 6f 69 6e 74 20 3d 20 70 6f 69 /.. point = poi
357f0 6e 74 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 nt->Next;.
35800 7d 0a 20 20 20 20 6c 69 6e 65 20 3d 20 67 65 6f }. line = geo
35810 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 73 74 72 69 m->FirstLinestri
35820 6e 67 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6c ng;. while (l
35830 69 6e 65 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 ine). {..
35840 73 7a 20 2b 3d 20 28 31 32 20 2b 20 28 28 6e 5f sz += (12 + ((n_
35850 63 6f 6f 72 64 73 20 2a 20 38 29 20 2a 20 6c 69 coords * 8) * li
35860 6e 65 2d 3e 50 6f 69 6e 74 73 29 29 3b 09 2f 2a ne->Points));./*
35870 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b 78 2c 79 # points + [x,y
35880 5d 20 66 6f 72 20 65 61 63 68 20 76 65 72 74 65 ] for each verte
35890 78 20 2a 2f 0a 09 20 20 6c 69 6e 65 20 3d 20 6c x */.. line = l
358a0 69 6e 65 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 ine->Next;.
358b0 20 7d 0a 20 20 20 20 70 6f 6c 79 67 20 3d 20 67 }. polyg = g
358c0 65 6f 6d 2d 3e 46 69 72 73 74 50 6f 6c 79 67 6f eom->FirstPolygo
358d0 6e 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 70 6f n;. while (po
358e0 6c 79 67 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 lyg). {..
358f0 72 6e 67 20 3d 20 70 6f 6c 79 67 2d 3e 45 78 74 rng = polyg->Ext
35900 65 72 69 6f 72 3b 0a 09 20 20 73 7a 20 2b 3d 20 erior;.. sz +=
35910 28 31 36 20 2b 20 28 28 6e 5f 63 6f 6f 72 64 73 (16 + ((n_coords
35920 20 2a 20 38 29 20 2a 20 72 6e 67 2d 3e 50 6f 69 * 8) * rng->Poi
35930 6e 74 73 29 29 3b 09 2f 2a 20 23 20 72 69 6e 67 nts));./* # ring
35940 73 20 2b 20 23 20 70 6f 69 6e 74 73 20 2b 20 5b s + # points + [
35950 78 2e 79 5d 20 61 72 72 61 79 20 2d 20 65 78 74 x.y] array - ext
35960 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 20 erior ring */..
35970 20 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 69 62 for (ib = 0; ib
35980 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 < polyg->NumInt
35990 65 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a 09 20 eriors; ib++)..
359a0 20 20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 6f 6c {...rng = pol
359b0 79 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 2b 20 yg->Interiors +
359c0 69 62 3b 0a 09 09 73 7a 20 2b 3d 20 28 34 20 2b ib;...sz += (4 +
359d0 20 28 28 6e 5f 63 6f 6f 72 64 73 20 2a 20 38 29 ((n_coords * 8)
359e0 20 2a 20 72 6e 67 2d 3e 50 6f 69 6e 74 73 29 29 * rng->Points))
359f0 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 73 20 2b 20 ;./* # points +
35a00 5b 78 2c 79 5d 20 61 72 72 61 79 20 2d 20 69 6e [x,y] array - in
35a10 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
35a20 20 20 20 20 7d 0a 09 20 20 70 6f 6c 79 67 20 3d }.. polyg =
35a30 20 70 6f 6c 79 67 2d 3e 4e 65 78 74 3b 0a 20 20 polyg->Next;.
35a40 20 20 20 20 7d 0a 20 20 20 20 2a 73 69 7a 65 20 }. *size
35a50 3d 20 73 7a 3b 0a 20 20 20 20 70 74 72 20 3d 20 = sz;. ptr =
35a60 6d 61 6c 6c 6f 63 20 28 73 7a 29 3b 0a 20 20 20 malloc (sz);.
35a70 20 2a 72 65 73 75 6c 74 20 3d 20 70 74 72 3b 0a *result = ptr;.
35a80 2f 2a 20 61 6e 64 20 66 69 6e 61 6c 6c 79 20 77 /* and finally w
35a90 65 20 62 75 69 6c 64 20 74 68 65 20 46 47 46 20 e build the FGF
35aa0 2a 2f 0a 20 20 20 20 69 66 20 28 74 79 70 65 20 */. if (type
35ab0 3d 3d 20 34 20 7c 7c 20 74 79 70 65 20 3d 3d 20 == 4 || type ==
35ac0 35 20 7c 7c 20 74 79 70 65 20 3d 3d 20 36 20 7c 5 || type == 6 |
35ad0 7c 20 74 79 70 65 20 3d 3d 20 37 29 0a 20 20 20 | type == 7).
35ae0 20 20 20 7b 0a 09 20 20 67 61 69 61 45 78 70 6f {.. gaiaExpo
35af0 72 74 33 32 20 28 70 74 72 2c 20 74 79 70 65 2c rt32 (ptr, type,
35b00 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
35b10 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
35b20 29 3b 09 2f 2a 20 47 65 6f 6d 65 74 72 79 20 54 );./* Geometry T
35b30 79 70 65 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d ype */.. ptr +=
35b40 20 34 3b 0a 09 20 20 67 61 69 61 45 78 70 6f 72 4;.. gaiaExpor
35b50 74 33 32 20 28 70 74 72 2c 20 65 6e 74 69 74 69 t32 (ptr, entiti
35b60 65 73 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f es, GAIA_LITTLE_
35b70 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
35b80 72 63 68 29 3b 09 2f 2a 20 69 74 27 73 20 61 20 rch);./* it's a
35b90 63 6f 6c 6c 65 63 74 69 6f 6e 3b 20 23 20 65 6e collection; # en
35ba0 74 69 74 69 65 73 20 2a 2f 0a 09 20 20 70 74 72 tities */.. ptr
35bb0 20 2b 3d 20 34 3b 0a 20 20 20 20 20 20 7d 0a 20 += 4;. }.
35bc0 20 20 20 70 6f 69 6e 74 20 3d 20 67 65 6f 6d 2d point = geom-
35bd0 3e 46 69 72 73 74 50 6f 69 6e 74 3b 0a 20 20 20 >FirstPoint;.
35be0 20 77 68 69 6c 65 20 28 70 6f 69 6e 74 29 0a 20 while (point).
35bf0 20 20 20 20 20 7b 0a 09 20 20 67 61 69 61 45 78 {.. gaiaEx
35c00 70 6f 72 74 33 32 20 28 70 74 72 2c 20 31 2c 20 port32 (ptr, 1,
35c10 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
35c20 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 AN, endian_arch)
35c30 3b 09 2f 2a 20 74 68 65 20 43 4c 41 53 53 20 54 ;./* the CLASS T
35c40 59 50 45 20 66 6f 72 20 74 68 69 73 20 65 6c 65 YPE for this ele
35c50 6d 65 6e 74 20 2a 2f 0a 09 20 20 70 74 72 20 2b ment */.. ptr +
35c60 3d 20 34 3b 0a 09 20 20 67 61 69 61 45 78 70 6f = 4;.. gaiaExpo
35c70 72 74 33 32 20 28 70 74 72 2c 20 66 6c 61 67 5f rt32 (ptr, flag_
35c80 64 69 6d 73 2c 20 47 41 49 41 5f 4c 49 54 54 4c dims, GAIA_LITTL
35c90 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e E_ENDIAN, endian
35ca0 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 43 _arch);./* the C
35cb0 6f 6f 72 64 44 69 6d 65 6e 73 69 6f 6e 20 66 6c oordDimension fl
35cc0 61 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 ag */.. ptr +=
35cd0 34 3b 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 4;.. gaiaExport
35ce0 36 34 20 28 70 74 72 2c 20 70 6f 69 6e 74 2d 3e 64 (ptr, point->
35cf0 58 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 X, GAIA_LITTLE_E
35d00 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
35d10 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 20 20 ch);./* X */..
35d20 70 74 72 20 2b 3d 20 38 3b 0a 09 20 20 67 61 69 ptr += 8;.. gai
35d30 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
35d40 70 6f 69 6e 74 2d 3e 59 2c 20 47 41 49 41 5f 4c point->Y, GAIA_L
35d50 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
35d60 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 59 dian_arch);./* Y
35d70 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 38 3b */.. ptr += 8;
35d80 0a 09 20 20 69 66 20 28 66 6c 61 67 5f 64 69 6d .. if (flag_dim
35d90 73 20 3d 3d 20 31 29 0a 09 20 20 20 20 7b 0a 09 s == 1).. {..
35da0 09 2f 2a 20 58 59 5a 20 2a 2f 0a 09 09 67 61 69 ./* XYZ */...gai
35db0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
35dc0 70 6f 69 6e 74 2d 3e 5a 2c 20 47 41 49 41 5f 4c point->Z, GAIA_L
35dd0 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
35de0 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 70 74 dian_arch);...pt
35df0 72 20 2b 3d 20 38 3b 0a 09 20 20 20 20 7d 0a 09 r += 8;.. }..
35e00 20 20 65 6c 73 65 20 69 66 20 28 66 6c 61 67 5f else if (flag_
35e10 64 69 6d 73 20 3d 3d 20 32 29 0a 09 20 20 20 20 dims == 2)..
35e20 7b 0a 09 09 2f 2a 58 59 4d 20 2a 2f 0a 09 09 67 {.../*XYM */...g
35e30 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
35e40 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 47 41 49 41 , point->M, GAIA
35e50 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 _LITTLE_ENDIAN,
35e60 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 endian_arch);...
35e70 70 74 72 20 2b 3d 20 38 3b 0a 09 20 20 20 20 7d ptr += 8;.. }
35e80 0a 09 20 20 65 6c 73 65 20 69 66 20 28 66 6c 61 .. else if (fla
35e90 67 5f 64 69 6d 73 20 3d 3d 20 33 29 0a 09 20 20 g_dims == 3)..
35ea0 20 20 7b 0a 09 09 2f 2a 20 58 59 5a 4d 20 2a 2f {.../* XYZM */
35eb0 0a 09 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 ...gaiaExport64
35ec0 28 70 74 72 2c 20 70 6f 69 6e 74 2d 3e 5a 2c 20 (ptr, point->Z,
35ed0 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
35ee0 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 AN, endian_arch)
35ef0 3b 0a 09 09 70 74 72 20 2b 3d 20 38 3b 0a 09 09 ;...ptr += 8;...
35f00 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 gaiaExport64 (pt
35f10 72 2c 20 70 6f 69 6e 74 2d 3e 4d 2c 20 47 41 49 r, point->M, GAI
35f20 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
35f30 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
35f40 09 70 74 72 20 2b 3d 20 38 3b 0a 09 20 20 20 20 .ptr += 8;..
35f50 7d 0a 09 20 20 70 6f 69 6e 74 20 3d 20 70 6f 69 }.. point = poi
35f60 6e 74 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 20 nt->Next;.
35f70 7d 0a 20 20 20 20 6c 69 6e 65 20 3d 20 67 65 6f }. line = geo
35f80 6d 2d 3e 46 69 72 73 74 4c 69 6e 65 73 74 72 69 m->FirstLinestri
35f90 6e 67 3b 0a 20 20 20 20 77 68 69 6c 65 20 28 6c ng;. while (l
35fa0 69 6e 65 29 0a 20 20 20 20 20 20 7b 0a 09 20 20 ine). {..
35fb0 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
35fc0 72 2c 20 47 41 49 41 5f 4c 49 4e 45 53 54 52 49 r, GAIA_LINESTRI
35fd0 4e 47 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f NG, GAIA_LITTLE_
35fe0 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
35ff0 72 63 68 29 3b 09 2f 2a 20 74 68 65 20 43 4c 41 rch);./* the CLA
36000 53 53 20 54 59 50 45 20 66 6f 72 20 74 68 69 73 SS TYPE for this
36010 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a 09 20 20 70 element */.. p
36020 74 72 20 2b 3d 20 34 3b 0a 09 20 20 67 61 69 61 tr += 4;.. gaia
36030 45 78 70 6f 72 74 33 32 20 28 70 74 72 2c 20 66 Export32 (ptr, f
36040 6c 61 67 5f 64 69 6d 73 2c 20 47 41 49 41 5f 4c lag_dims, GAIA_L
36050 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
36060 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 dian_arch);./* t
36070 68 65 20 43 6f 6f 72 64 44 69 6d 65 6e 73 69 6f he CoordDimensio
36080 6e 20 66 6c 61 67 20 2a 2f 0a 09 20 20 70 74 72 n flag */.. ptr
36090 20 2b 3d 20 34 3b 0a 09 20 20 67 61 69 61 45 78 += 4;.. gaiaEx
360a0 70 6f 72 74 33 32 20 28 70 74 72 2c 20 6c 69 6e port32 (ptr, lin
360b0 65 2d 3e 50 6f 69 6e 74 73 2c 20 47 41 49 41 5f e->Points, GAIA_
360c0 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
360d0 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 ndian_arch);./*
360e0 23 20 70 6f 69 6e 74 73 20 2a 2f 0a 09 20 20 70 # points */.. p
360f0 74 72 20 2b 3d 20 34 3b 0a 09 20 20 66 6f 72 20 tr += 4;.. for
36100 28 69 76 20 3d 20 30 3b 20 69 76 20 3c 20 6c 69 (iv = 0; iv < li
36110 6e 65 2d 3e 50 6f 69 6e 74 73 3b 20 69 76 2b 2b ne->Points; iv++
36120 29 0a 09 20 20 20 20 7b 0a 09 09 7a 20 3d 20 30 ).. {...z = 0
36130 2e 30 3b 0a 09 09 6d 20 3d 20 30 2e 30 3b 0a 09 .0;...m = 0.0;..
36140 09 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e .if (geom->Dimen
36150 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 sionModel == GAI
36160 41 5f 58 59 5f 5a 29 0a 09 09 20 20 7b 0a 09 09 A_XY_Z)... {...
36170 20 20 20 20 20 20 67 61 69 61 47 65 74 50 6f 69 gaiaGetPoi
36180 6e 74 58 59 5a 20 28 6c 69 6e 65 2d 3e 43 6f 6f ntXYZ (line->Coo
36190 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 2c rds, iv, &x, &y,
361a0 20 26 7a 29 3b 0a 09 09 20 20 7d 0a 09 09 65 6c &z);... }...el
361b0 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
361c0 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
361d0 41 49 41 5f 58 59 5f 4d 29 0a 09 09 20 20 7b 0a AIA_XY_M)... {.
361e0 09 09 20 20 20 20 20 20 67 61 69 61 47 65 74 50 .. gaiaGetP
361f0 6f 69 6e 74 58 59 4d 20 28 6c 69 6e 65 2d 3e 43 ointXYM (line->C
36200 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
36210 79 2c 20 26 6d 29 3b 0a 09 09 20 20 7d 0a 09 09 y, &m);... }...
36220 65 6c 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 else if (geom->D
36230 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d imensionModel ==
36240 20 47 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 GAIA_XY_Z_M)...
36250 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 {... gaia
36260 47 65 74 50 6f 69 6e 74 58 59 5a 4d 20 28 6c 69 GetPointXYZM (li
36270 6e 65 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ne->Coords, iv,
36280 26 78 2c 20 26 79 2c 20 26 7a 2c 20 26 6d 29 3b &x, &y, &z, &m);
36290 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 0a 09 09 ... }...else...
362a0 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 69 61 {... gaia
362b0 47 65 74 50 6f 69 6e 74 20 28 6c 69 6e 65 2d 3e GetPoint (line->
362c0 43 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 Coords, iv, &x,
362d0 26 79 29 3b 0a 09 09 20 20 7d 0a 09 09 67 61 69 &y);... }...gai
362e0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
362f0 78 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 x, GAIA_LITTLE_E
36300 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
36310 63 68 29 3b 09 2f 2a 20 58 20 2a 2f 0a 09 09 70 ch);./* X */...p
36320 74 72 20 2b 3d 20 38 3b 0a 09 09 67 61 69 61 45 tr += 8;...gaiaE
36330 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 79 2c xport64 (ptr, y,
36340 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
36350 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
36360 29 3b 09 2f 2a 20 59 20 2a 2f 0a 09 09 70 74 72 );./* Y */...ptr
36370 20 2b 3d 20 38 3b 0a 09 09 69 66 20 28 66 6c 61 += 8;...if (fla
36380 67 5f 64 69 6d 73 20 3d 3d 20 31 29 0a 09 09 20 g_dims == 1)...
36390 20 7b 0a 09 09 20 20 20 20 20 20 2f 2a 20 58 59 {... /* XY
363a0 5a 20 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 Z */... gai
363b0 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 aExport64 (ptr,
363c0 7a 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 z, GAIA_LITTLE_E
363d0 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 NDIAN, endian_ar
363e0 63 68 29 3b 0a 09 09 20 20 20 20 20 20 70 74 72 ch);... ptr
363f0 20 2b 3d 20 38 3b 0a 09 09 20 20 7d 0a 09 09 65 += 8;... }...e
36400 6c 73 65 20 69 66 20 28 66 6c 61 67 5f 64 69 6d lse if (flag_dim
36410 73 20 3d 3d 20 32 29 0a 09 09 20 20 7b 0a 09 09 s == 2)... {...
36420 20 20 20 20 20 20 2f 2a 58 59 4d 20 2a 2f 0a 09 /*XYM */..
36430 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
36440 74 36 34 20 28 70 74 72 2c 20 6d 2c 20 47 41 49 t64 (ptr, m, GAI
36450 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
36460 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
36470 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b . ptr += 8;
36480 0a 09 09 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 ... }...else if
36490 20 28 66 6c 61 67 5f 64 69 6d 73 20 3d 3d 20 33 (flag_dims == 3
364a0 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 )... {...
364b0 2f 2a 20 58 59 5a 4d 20 2a 2f 0a 09 09 20 20 20 /* XYZM */...
364c0 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 gaiaExport64
364d0 28 70 74 72 2c 20 7a 2c 20 47 41 49 41 5f 4c 49 (ptr, z, GAIA_LI
364e0 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 TTLE_ENDIAN, end
364f0 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 ian_arch);...
36500 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 20 ptr += 8;...
36510 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 gaiaExport6
36520 34 20 28 70 74 72 2c 20 6d 2c 20 47 41 49 41 5f 4 (ptr, m, GAIA_
36530 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 LITTLE_ENDIAN, e
36540 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 09 20 ndian_arch);...
36550 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b 0a 09 ptr += 8;..
36560 09 20 20 7d 0a 09 20 20 20 20 7d 0a 09 20 20 6c . }.. }.. l
36570 69 6e 65 20 3d 20 6c 69 6e 65 2d 3e 4e 65 78 74 ine = line->Next
36580 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 70 6f ;. }. po
36590 6c 79 67 20 3d 20 67 65 6f 6d 2d 3e 46 69 72 73 lyg = geom->Firs
365a0 74 50 6f 6c 79 67 6f 6e 3b 0a 20 20 20 20 77 68 tPolygon;. wh
365b0 69 6c 65 20 28 70 6f 6c 79 67 29 0a 20 20 20 20 ile (polyg).
365c0 20 20 7b 0a 09 20 20 67 61 69 61 45 78 70 6f 72 {.. gaiaExpor
365d0 74 33 32 20 28 70 74 72 2c 20 47 41 49 41 5f 50 t32 (ptr, GAIA_P
365e0 4f 4c 59 47 4f 4e 2c 20 47 41 49 41 5f 4c 49 54 OLYGON, GAIA_LIT
365f0 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 TLE_ENDIAN, endi
36600 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 74 68 65 an_arch);./* the
36610 20 43 4c 41 53 53 20 54 59 50 45 20 66 6f 72 20 CLASS TYPE for
36620 74 68 69 73 20 65 6c 65 6d 65 6e 74 20 2a 2f 0a this element */.
36630 09 20 20 70 74 72 20 2b 3d 20 34 3b 0a 09 20 20 . ptr += 4;..
36640 67 61 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 gaiaExport32 (pt
36650 72 2c 20 66 6c 61 67 5f 64 69 6d 73 2c 20 47 41 r, flag_dims, GA
36660 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e IA_LITTLE_ENDIAN
36670 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 09 , endian_arch);.
36680 2f 2a 20 74 68 65 20 43 6f 6f 72 64 44 69 6d 65 /* the CoordDime
36690 6e 73 69 6f 6e 20 66 6c 61 67 20 2a 2f 0a 09 20 nsion flag */..
366a0 20 70 74 72 20 2b 3d 20 34 3b 0a 09 20 20 67 61 ptr += 4;.. ga
366b0 69 61 45 78 70 6f 72 74 33 32 20 28 70 74 72 2c iaExport32 (ptr,
366c0 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 6e 74 65 72 polyg->NumInter
366d0 69 6f 72 73 20 2b 20 31 2c 20 47 41 49 41 5f 4c iors + 1, GAIA_L
366e0 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e ITTLE_ENDIAN, en
366f0 64 69 61 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 dian_arch);./* #
36700 20 72 69 6e 67 73 20 2a 2f 0a 09 20 20 70 74 72 rings */.. ptr
36710 20 2b 3d 20 34 3b 0a 09 20 20 72 6e 67 20 3d 20 += 4;.. rng =
36720 70 6f 6c 79 67 2d 3e 45 78 74 65 72 69 6f 72 3b polyg->Exterior;
36730 0a 09 20 20 67 61 69 61 45 78 70 6f 72 74 33 32 .. gaiaExport32
36740 20 28 70 74 72 2c 20 72 6e 67 2d 3e 50 6f 69 6e (ptr, rng->Poin
36750 74 73 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f ts, GAIA_LITTLE_
36760 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 ENDIAN, endian_a
36770 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f 69 6e 74 rch);./* # point
36780 73 20 2d 20 65 78 74 65 72 69 6f 72 20 72 69 6e s - exterior rin
36790 67 20 2a 2f 0a 09 20 20 70 74 72 20 2b 3d 20 34 g */.. ptr += 4
367a0 3b 0a 09 20 20 66 6f 72 20 28 69 76 20 3d 20 30 ;.. for (iv = 0
367b0 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 6e ; iv < rng->Poin
367c0 74 73 3b 20 69 76 2b 2b 29 0a 09 20 20 20 20 7b ts; iv++).. {
367d0 0a 09 09 7a 20 3d 20 30 2e 30 3b 0a 09 09 6d 20 ...z = 0.0;...m
367e0 3d 20 30 2e 30 3b 0a 09 09 69 66 20 28 67 65 6f = 0.0;...if (geo
367f0 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 65 m->DimensionMode
36800 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a 29 0a l == GAIA_XY_Z).
36810 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 61 .. {... ga
36820 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 72 iaGetPointXYZ (r
36830 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ng->Coords, iv,
36840 26 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 20 &x, &y, &z);...
36850 20 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 67 65 }...else if (ge
36860 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f 64 om->DimensionMod
36870 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 4d 29 el == GAIA_XY_M)
36880 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 67 ... {... g
36890 61 69 61 47 65 74 50 6f 69 6e 74 58 59 4d 20 28 aiaGetPointXYM (
368a0 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c rng->Coords, iv,
368b0 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b 0a 09 09 &x, &y, &m);...
368c0 20 20 7d 0a 09 09 65 6c 73 65 20 69 66 20 28 67 }...else if (g
368d0 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
368e0 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
368f0 5f 4d 29 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 _M)... {...
36900 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 gaiaGetPointXY
36910 5a 4d 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c ZM (rng->Coords,
36920 20 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 7a 2c iv, &x, &y, &z,
36930 20 26 6d 29 3b 0a 09 09 20 20 7d 0a 09 09 65 6c &m);... }...el
36940 73 65 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 se... {...
36950 20 67 61 69 61 47 65 74 50 6f 69 6e 74 20 28 72 gaiaGetPoint (r
36960 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ng->Coords, iv,
36970 26 78 2c 20 26 79 29 3b 0a 09 09 20 20 7d 0a 09 &x, &y);... }..
36980 09 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 .gaiaExport64 (p
36990 74 72 2c 20 78 2c 20 47 41 49 41 5f 4c 49 54 54 tr, x, GAIA_LITT
369a0 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 LE_ENDIAN, endia
369b0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 n_arch);./* X -
369c0 65 78 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f exterior ring */
369d0 0a 09 09 70 74 72 20 2b 3d 20 38 3b 0a 09 09 67 ...ptr += 8;...g
369e0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
369f0 2c 20 79 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 , y, GAIA_LITTLE
36a00 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f _ENDIAN, endian_
36a10 61 72 63 68 29 3b 09 2f 2a 20 59 20 2d 20 65 78 arch);./* Y - ex
36a20 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
36a30 09 70 74 72 20 2b 3d 20 38 3b 0a 09 09 69 66 20 .ptr += 8;...if
36a40 28 66 6c 61 67 5f 64 69 6d 73 20 3d 3d 20 31 29 (flag_dims == 1)
36a50 0a 09 09 20 20 7b 0a 09 09 20 20 20 20 20 20 2f ... {... /
36a60 2a 20 58 59 5a 20 2a 2f 0a 09 09 20 20 20 20 20 * XYZ */...
36a70 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
36a80 74 72 2c 20 7a 2c 20 47 41 49 41 5f 4c 49 54 54 tr, z, GAIA_LITT
36a90 4c 45 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 LE_ENDIAN, endia
36aa0 6e 5f 61 72 63 68 29 3b 0a 09 09 20 20 20 20 20 n_arch);...
36ab0 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 20 20 7d ptr += 8;... }
36ac0 0a 09 09 65 6c 73 65 20 69 66 20 28 66 6c 61 67 ...else if (flag
36ad0 5f 64 69 6d 73 20 3d 3d 20 32 29 0a 09 09 20 20 _dims == 2)...
36ae0 7b 0a 09 09 20 20 20 20 20 20 2f 2a 58 59 4d 20 {... /*XYM
36af0 2a 2f 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 */... gaiaE
36b00 78 70 6f 72 74 36 34 20 28 70 74 72 2c 20 6d 2c xport64 (ptr, m,
36b10 20 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 GAIA_LITTLE_END
36b20 49 41 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 IAN, endian_arch
36b30 29 3b 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b );... ptr +
36b40 3d 20 38 3b 0a 09 09 20 20 7d 0a 09 09 65 6c 73 = 8;... }...els
36b50 65 20 69 66 20 28 66 6c 61 67 5f 64 69 6d 73 20 e if (flag_dims
36b60 3d 3d 20 33 29 0a 09 09 20 20 7b 0a 09 09 20 20 == 3)... {...
36b70 20 20 20 20 2f 2a 20 58 59 5a 4d 20 2a 2f 0a 09 /* XYZM */..
36b80 09 20 20 20 20 20 20 67 61 69 61 45 78 70 6f 72 . gaiaExpor
36b90 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 47 41 49 t64 (ptr, z, GAI
36ba0 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c A_LITTLE_ENDIAN,
36bb0 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a 09 endian_arch);..
36bc0 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b . ptr += 8;
36bd0 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
36be0 6f 72 74 36 34 20 28 70 74 72 2c 20 6d 2c 20 47 ort64 (ptr, m, G
36bf0 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
36c00 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b N, endian_arch);
36c10 0a 09 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 ... ptr +=
36c20 38 3b 0a 09 09 20 20 7d 0a 09 20 20 20 20 7d 0a 8;... }.. }.
36c30 09 20 20 66 6f 72 20 28 69 62 20 3d 20 30 3b 20 . for (ib = 0;
36c40 69 62 20 3c 20 70 6f 6c 79 67 2d 3e 4e 75 6d 49 ib < polyg->NumI
36c50 6e 74 65 72 69 6f 72 73 3b 20 69 62 2b 2b 29 0a nteriors; ib++).
36c60 09 20 20 20 20 7b 0a 09 09 72 6e 67 20 3d 20 70 . {...rng = p
36c70 6f 6c 79 67 2d 3e 49 6e 74 65 72 69 6f 72 73 20 olyg->Interiors
36c80 2b 20 69 62 3b 0a 09 09 67 61 69 61 45 78 70 6f + ib;...gaiaExpo
36c90 72 74 33 32 20 28 70 74 72 2c 20 72 6e 67 2d 3e rt32 (ptr, rng->
36ca0 50 6f 69 6e 74 73 2c 20 31 2c 20 65 6e 64 69 61 Points, 1, endia
36cb0 6e 5f 61 72 63 68 29 3b 09 2f 2a 20 23 20 70 6f n_arch);./* # po
36cc0 69 6e 74 73 20 2d 20 69 6e 74 65 72 69 6f 72 20 ints - interior
36cd0 72 69 6e 67 20 2a 2f 0a 09 09 70 74 72 20 2b 3d ring */...ptr +=
36ce0 20 34 3b 0a 09 09 66 6f 72 20 28 69 76 20 3d 20 4;...for (iv =
36cf0 30 3b 20 69 76 20 3c 20 72 6e 67 2d 3e 50 6f 69 0; iv < rng->Poi
36d00 6e 74 73 3b 20 69 76 2b 2b 29 0a 09 09 20 20 7b nts; iv++)... {
36d10 0a 09 09 20 20 20 20 20 20 7a 20 3d 20 30 2e 30 ... z = 0.0
36d20 3b 0a 09 09 20 20 20 20 20 20 6d 20 3d 20 30 2e ;... m = 0.
36d30 30 3b 0a 09 09 20 20 20 20 20 20 69 66 20 28 67 0;... if (g
36d40 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 6f 6e 4d 6f eom->DimensionMo
36d50 64 65 6c 20 3d 3d 20 47 41 49 41 5f 58 59 5f 5a del == GAIA_XY_Z
36d60 29 0a 09 09 09 7b 0a 09 09 09 20 20 20 20 67 61 )....{.... ga
36d70 69 61 47 65 74 50 6f 69 6e 74 58 59 5a 20 28 72 iaGetPointXYZ (r
36d80 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 69 76 2c 20 ng->Coords, iv,
36d90 26 78 2c 20 26 79 2c 20 26 7a 29 3b 0a 09 09 09 &x, &y, &z);....
36da0 7d 0a 09 09 20 20 20 20 20 20 65 6c 73 65 20 69 }... else i
36db0 66 20 28 67 65 6f 6d 2d 3e 44 69 6d 65 6e 73 69 f (geom->Dimensi
36dc0 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 41 49 41 5f onModel == GAIA_
36dd0 58 59 5f 4d 29 0a 09 09 09 7b 0a 09 09 09 20 20 XY_M)....{....
36de0 20 20 67 61 69 61 47 65 74 50 6f 69 6e 74 58 59 gaiaGetPointXY
36df0 4d 20 28 72 6e 67 2d 3e 43 6f 6f 72 64 73 2c 20 M (rng->Coords,
36e00 69 76 2c 20 26 78 2c 20 26 79 2c 20 26 6d 29 3b iv, &x, &y, &m);
36e10 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 65 6c ....}... el
36e20 73 65 20 69 66 20 28 67 65 6f 6d 2d 3e 44 69 6d se if (geom->Dim
36e30 65 6e 73 69 6f 6e 4d 6f 64 65 6c 20 3d 3d 20 47 ensionModel == G
36e40 41 49 41 5f 58 59 5f 5a 5f 4d 29 0a 09 09 09 7b AIA_XY_Z_M)....{
36e50 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 74 50 .... gaiaGetP
36e60 6f 69 6e 74 58 59 5a 4d 20 28 72 6e 67 2d 3e 43 ointXYZM (rng->C
36e70 6f 6f 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 oords, iv, &x, &
36e80 79 2c 20 26 7a 2c 20 26 6d 29 3b 0a 09 09 09 7d y, &z, &m);....}
36e90 0a 09 09 20 20 20 20 20 20 65 6c 73 65 0a 09 09 ... else...
36ea0 09 7b 0a 09 09 09 20 20 20 20 67 61 69 61 47 65 .{.... gaiaGe
36eb0 74 50 6f 69 6e 74 20 28 72 6e 67 2d 3e 43 6f 6f tPoint (rng->Coo
36ec0 72 64 73 2c 20 69 76 2c 20 26 78 2c 20 26 79 29 rds, iv, &x, &y)
36ed0 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 20 67 ;....}... g
36ee0 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 74 72 aiaExport64 (ptr
36ef0 2c 20 78 2c 20 47 41 49 41 5f 4c 49 54 54 4c 45 , x, GAIA_LITTLE
36f00 5f 45 4e 44 49 41 4e 2c 20 65 6e 64 69 61 6e 5f _ENDIAN, endian_
36f10 61 72 63 68 29 3b 09 2f 2a 20 58 20 2d 20 69 6e arch);./* X - in
36f20 74 65 72 69 6f 72 20 72 69 6e 67 20 2a 2f 0a 09 terior ring */..
36f30 09 20 20 20 20 20 20 70 74 72 20 2b 3d 20 38 3b . ptr += 8;
36f40 0a 09 09 20 20 20 20 20 20 67 61 69 61 45 78 70 ... gaiaExp
36f50 6f 72 74 36 34 20 28 70 74 72 2c 20 79 2c 20 47 ort64 (ptr, y, G
36f60 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 AIA_LITTLE_ENDIA
36f70 4e 2c 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b N, endian_arch);
36f80 09 2f 2a 20 59 20 2d 20 69 6e 74 65 72 69 6f 72 ./* Y - interior
36f90 20 72 69 6e 67 20 2a 2f 0a 09 09 20 20 20 20 20 ring */...
36fa0 20 70 74 72 20 2b 3d 20 38 3b 0a 09 09 20 20 20 ptr += 8;...
36fb0 20 20 20 69 66 20 28 66 6c 61 67 5f 64 69 6d 73 if (flag_dims
36fc0 20 3d 3d 20 31 29 0a 09 09 09 7b 0a 09 09 09 20 == 1)....{....
36fd0 20 20 20 2f 2a 20 58 59 5a 20 2a 2f 0a 09 09 09 /* XYZ */....
36fe0 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 36 34 gaiaExport64
36ff0 20 28 70 74 72 2c 20 7a 2c 20 47 41 49 41 5f 4c (ptr, z, GAIA_L
37000 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 ITTLE_ENDIAN,...
37010 09 09 09 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 ... endian_arch
37020 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 2b 3d );.... ptr +=
37030 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 20 20 8;....}...
37040 20 65 6c 73 65 20 69 66 20 28 66 6c 61 67 5f 64 else if (flag_d
37050 69 6d 73 20 3d 3d 20 32 29 0a 09 09 09 7b 0a 09 ims == 2)....{..
37060 09 09 20 20 20 20 2f 2a 58 59 4d 20 2a 2f 0a 09 .. /*XYM */..
37070 09 09 20 20 20 20 67 61 69 61 45 78 70 6f 72 74 .. gaiaExport
37080 36 34 20 28 70 74 72 2c 20 6d 2c 20 47 41 49 41 64 (ptr, m, GAIA
37090 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 41 4e 2c 0a _LITTLE_ENDIAN,.
370a0 09 09 09 09 09 20 20 65 6e 64 69 61 6e 5f 61 72 ..... endian_ar
370b0 63 68 29 3b 0a 09 09 09 20 20 20 20 70 74 72 20 ch);.... ptr
370c0 2b 3d 20 38 3b 0a 09 09 09 7d 0a 09 09 20 20 20 += 8;....}...
370d0 20 20 20 65 6c 73 65 20 69 66 20 28 66 6c 61 67 else if (flag
370e0 5f 64 69 6d 73 20 3d 3d 20 33 29 0a 09 09 09 7b _dims == 3)....{
370f0 0a 09 09 09 20 20 20 20 2f 2a 20 58 59 5a 4d 20 .... /* XYZM
37100 2a 2f 0a 09 09 09 20 20 20 20 67 61 69 61 45 78 */.... gaiaEx
37110 70 6f 72 74 36 34 20 28 70 74 72 2c 20 7a 2c 20 port64 (ptr, z,
37120 47 41 49 41 5f 4c 49 54 54 4c 45 5f 45 4e 44 49 GAIA_LITTLE_ENDI
37130 41 4e 2c 0a 09 09 09 09 09 20 20 65 6e 64 69 61 AN,...... endia
37140 6e 5f 61 72 63 68 29 3b 0a 09 09 09 20 20 20 20 n_arch);....
37150 70 74 72 20 2b 3d 20 38 3b 0a 09 09 09 20 20 20 ptr += 8;....
37160 20 67 61 69 61 45 78 70 6f 72 74 36 34 20 28 70 gaiaExport64 (p
37170 74 72 2c 20 6d 2c 20 47 41 49 41 5f 4c 49 54 54 tr, m, GAIA_LITT
37180 4c 45 5f 45 4e 44 49 41 4e 2c 0a 09 09 09 09 09 LE_ENDIAN,......
37190 20 20 65 6e 64 69 61 6e 5f 61 72 63 68 29 3b 0a endian_arch);.
371a0 09 09 09 20 20 20 20 70 74 72 20 2b 3d 20 38 3b ... ptr += 8;
371b0 0a 09 09 09 7d 0a 09 09 20 20 7d 0a 09 20 20 20 ....}... }..
371c0 20 7d 0a 09 20 20 70 6f 6c 79 67 20 3d 20 70 6f }.. polyg = po
371d0 6c 79 67 2d 3e 4e 65 78 74 3b 0a 20 20 20 20 20 lyg->Next;.
371e0 20 7d 0a 7d 0a }.}.