Creates ESRI .prj file for this shp output It looks in the spatial_ref_sys table and outputs the srtext field for this data If data is a table will use geometry_columns, if a query or view will read SRID from query output.
705 char *pszFullname, *pszBasename;
708 char *pszFilename = state->
shp_file;
709 char *schema = state->
schema;
710 char *table = state->
table;
717 char *esc_geo_col_name;
729 size += 3 * strlen(schema);
732 esc_table = (
char *)
malloc(3 * strlen(table) + 1);
733 esc_geo_col_name = (
char *)
malloc(3 * strlen(geo_col_name) + 1);
734 PQescapeStringConn(state->
conn, esc_table, table, strlen(table), &error);
735 PQescapeStringConn(state->
conn, esc_geo_col_name, geo_col_name, strlen(geo_col_name), &error);
738 query = (
char *)
malloc(size);
739 if ( ! query )
return 0;
750 esc_schema = (
char *)
malloc(2 * strlen(schema) + 1);
751 PQescapeStringConn(state->
conn, esc_schema, schema, strlen(schema), &error);
752 sprintf(query,
"SELECT COALESCE((SELECT sr.srtext "
753 " FROM geometry_columns As gc INNER JOIN spatial_ref_sys sr ON sr.srid = gc.srid "
754 " WHERE gc.f_table_schema = '%s' AND gc.f_table_name = '%s' AND gc.f_geometry_column = '%s' LIMIT 1), "
755 " (SELECT CASE WHEN COUNT(DISTINCT sr.srid) > 1 THEN 'm' ELSE MAX(sr.srtext) END As srtext "
756 " FROM \"%s\".\"%s\" As g INNER JOIN spatial_ref_sys sr ON sr.srid = ST_SRID((g.\"%s\")::geometry)) , ' ') As srtext ",
757 esc_schema, esc_table,esc_geo_col_name, schema, table, geo_col_name);
762 sprintf(query,
"SELECT COALESCE((SELECT sr.srtext "
763 " FROM geometry_columns As gc INNER JOIN spatial_ref_sys sr ON sr.srid = gc.srid "
764 " WHERE gc.f_table_name = '%s' AND gc.f_geometry_column = '%s' AND pg_table_is_visible((gc.f_table_schema || '.' || gc.f_table_name)::regclass) LIMIT 1), "
765 " (SELECT CASE WHEN COUNT(DISTINCT sr.srid) > 1 THEN 'm' ELSE MAX(sr.srtext) END as srtext "
766 " FROM \"%s\" As g INNER JOIN spatial_ref_sys sr ON sr.srid = ST_SRID((g.\"%s\")::geometry)), ' ') As srtext ",
767 esc_table, esc_geo_col_name, table, geo_col_name);
772 free(esc_geo_col_name);
774 res = PQexec(state->
conn, query);
776 if ( !
res || PQresultStatus(
res) != PGRES_TUPLES_OK )
784 for (i=0; i < PQntuples(
res); i++)
786 srtext = PQgetvalue(
res, i, 0);
787 if (strcmp(srtext,
"m") == 0)
789 snprintf(state->
message,
SHPDUMPERMSGLEN,
_(
"WARNING: Mixed set of spatial references. No prj file will be generated"));
796 if (srtext[0] ==
' ')
798 snprintf(state->
message,
SHPDUMPERMSGLEN,
_(
"WARNING: Cannot determine spatial reference (empty table or unknown spatial ref). No prj file will be generated."));
809 pszBasename = (
char *)
malloc(strlen(pszFilename)+5);
810 strcpy( pszBasename, pszFilename );
811 for ( i = strlen(pszBasename)-1;
812 i > 0 && pszBasename[i] !=
'.' && pszBasename[i] !=
'/'
813 && pszBasename[i] !=
'\\';
816 if ( pszBasename[i] ==
'.' )
817 pszBasename[i] =
'\0';
819 pszFullname = (
char *)
malloc(strlen(pszBasename) + 5);
820 sprintf( pszFullname,
"%s.prj", pszBasename );
827 fp = fopen( pszFullname,
"wb" );
836 result = fputs (srtext,fp);
837 LWDEBUGF(3,
"\n result %d proj SRText is %s .\n",
result, srtext);
char result[OUT_DOUBLE_BUFFER_SIZE]
#define LWDEBUGF(level, msg,...)
char message[SHPDUMPERMSGLEN]