]> granicus.if.org Git - postgis/commitdiff
HEXWKB multiline output
authorSandro Santilli <strk@keybit.net>
Sun, 17 Oct 2004 12:59:12 +0000 (12:59 +0000)
committerSandro Santilli <strk@keybit.net>
Sun, 17 Oct 2004 12:59:12 +0000 (12:59 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@1027 b70326c6-7e19-0410-871a-916f4a2858ee

loader/shp2pgsql.c

index ad5f6eeabfb84436f8f83aca5619d14126567691..78d3deed008bc65c64a82d62960b59258ca6d194 100644 (file)
@@ -778,6 +778,8 @@ void
 InsertLineString(int id)
 {
        int pi; // part index
+       unsigned int subtype = LINETYPE | (wkbtype&WKBZOFFSET) | 
+               (wkbtype&WKBMOFFSET);
 
        /* Invalid (MULTI)Linestring */
        if ( obj->nVertices < 2 )
@@ -792,8 +794,12 @@ InsertLineString(int id)
                return;
        }
 
-       if (dump_format) printf("SRID=%s;%s(",sr_id,pgtype );
-       else printf("GeometryFromText('%s(", pgtype);
+       if (!dump_format) printf("'");
+       if ( sr_id && sr_id != "-1" ) printf("SRID=%s;", sr_id);
+
+       print_wkb_byte(getEndianByte());
+       print_wkb_int(wkbtype);
+       print_wkb_int(obj->nParts);
 
        for (pi=0; pi<obj->nParts; pi++)
        {
@@ -801,64 +807,28 @@ InsertLineString(int id)
                int vs; // start vertex
                int ve; // end vertex
 
+               print_wkb_byte(getEndianByte());
+               print_wkb_int(subtype);
+
                // Set start and end vertexes
                if ( pi==obj->nParts-1 ) ve = obj->nVertices;
                else ve = obj->panPartStart[pi+1];
                vs = obj->panPartStart[pi];
 
-               if (pi) printf(",");
-               printf("(");
-               if ( pgdims == 4 )
-               {
-                       for ( vi=vs; vi<ve; vi++)
-                       {
-                               if (vi!=vs) printf(",");
-                               printf("%.15g %.15g %.15g %.15g",
-                                       obj->padfX[vi],
-                                       obj->padfY[vi],
-                                       obj->padfZ[vi],
-                                       obj->padfM[vi]);
-                       }
-               }
-               else if ( pgdims == 2 )
-               {
-                       for ( vi=vs; vi<ve; vi++)
-                       {
-                               if (vi!=vs) printf(",");
-                               printf("%.15g %.15g",
-                                       obj->padfX[vi],
-                                       obj->padfY[vi]);
-                       }
-               }
-               else if ( istypeM )
+               print_wkb_int(obj->nVertices);
+               for ( vi=vs; vi<ve; vi++)
                {
-                       for ( vi=vs; vi<ve; vi++)
-                       {
-                               if (vi!=vs) printf(",");
-                               printf("%.15g %.15g %.15g",
-                                       obj->padfX[vi],
-                                       obj->padfY[vi],
-                                       obj->padfM[vi]);
-                       }
+                       print_wkb_double(obj->padfX[vi]);
+                       print_wkb_double(obj->padfY[vi]);
+                       if ( wkbtype & WKBZOFFSET )
+                               print_wkb_double(obj->padfZ[vi]);
+                       if ( wkbtype & WKBMOFFSET )
+                               print_wkb_double(obj->padfM[vi]);
                }
-               else // LINE3dZ -- should never happen
-               {
-                       for ( vi=vs; vi<ve; vi++)
-                       {
-                               if (vi!=vs) printf(",");
-                               printf("%.15g %.15g %.15g",
-                                       obj->padfX[vi],
-                                       obj->padfY[vi],
-                                       obj->padfZ[vi]);
-                       }
-               }
-
-               printf(")");
-
        }
 
-       if (dump_format) printf(")\n");
-       else printf(")',%s));\n",sr_id);
+       if (dump_format) printf("\n");
+       else printf("');\n");
 }
 
 //This function basically deals with the polygon case.
@@ -1358,6 +1328,9 @@ print_wkb_bytes(unsigned char *ptr, unsigned int cnt, size_t size)
 
 /**********************************************************************
  * $Log$
+ * Revision 1.72  2004/10/17 12:59:12  strk
+ * HEXWKB multiline output
+ *
  * Revision 1.71  2004/10/17 12:26:02  strk
  * Point and MultiPoint loaded using HEXWKB.
  *