As one of my persistent errors.
Thanks for all the help. I'm trying to pass an array to my C code from
fortran. In C I have the variable declared:
double *shparray[2][*shpnum]
but when I go to print its contents I get:
for (a=0;a < *shpnum; a++)
{
//~ add point to geometry
printf("%lf,%lf\n",*shparray[1][a], *shparray[0][a]);
OGR_G_AddPoint(line, *shparray[1][a], *shparray[0][a], 0);
printf("Adding Point:\"%lf %lf\"\n",shparray[0][a],shparray[1][a]);
}
I get a segfault. Am I passing the array correctly?
void add_shp(int *shpnum,int *eventnum,double *shparray[2]
[*shpnum],double *shperror,char *passer,int *tracknum)
{
//~ variable declaration
OGRSFDriverH driver;
OGRDataSourceH ds;
const char *sprj = "+proj=lcc +lat_1=33.000000 +lat_2=45.000000
+lat_0=39.000000 +lon_0=-96.000000 +x_0=0.0 +y_0=0.0 +datum=NAD83";
const char *tprj = "WGS84";
OGRCoordinateTransformationH ctrans;
OGRSpatialReferenceH source, target;
OGRLayerH layer;
OGRGeometryH line;
OGRFeatureDefnH featureDefn;
OGRFeatureH feature;
char lname[10]="", shpname[20]="", event[5]="";
int a;
printf("%d,%f,%d,%s,%d\n",
*eventnum,*shperror,*shpnum,passer,*tracknum);
chdir(passer);
//~ create shp name
sprintf(event,"%d",*eventnum);
printf("%s\n",event);
strcpy(lname,event);
strcat(lname,"track");
printf("%s\n",lname);
strcat(shpname,event);
strcat(shpname,"track.shp");
printf("%s\n",shpname);
//~ OGRRegisterAll();
//~ driver = OGRGetDriverByName("ESRI Shapefile");
//~ Open shp
ds = OGROpen(shpname,TRUE,NULL);
if(ds == NULL) {
printf("Cant Open Shapefile!!\n");
return;
}
printf("Adding Feature to %s\n",shpname);
//~ create spatrefs and trans
source = OSRNewSpatialReference(NULL);
target = OSRNewSpatialReference(NULL);
OSRSetFromUserInput(source, sprj);
OSRSetFromUserInput(target, tprj);
ctrans = OCTNewCoordinateTransformation(target, source);
//~ Get layer
layer = OGR_DS_GetLayerByName(ds, lname);
//~ create geometry
line = OGR_G_CreateGeometry(wkbLineString);
//~ layer def and create feature
featureDefn = OGR_L_GetLayerDefn(layer);
feature = OGR_F_Create(featureDefn);
//~ loop through array and add points
for (a=0;a < *shpnum; a++)
{
//~ add point to geometry
printf("%lf,%lf\n",*shparray[1][a], *shparray[0][a]);
OGR_G_AddPoint(line, *shparray[1][a], *shparray[0][a], 0);
printf("Adding Point:\"%lf %lf\"\n",shparray[0][a],shparray[1][a]);
}
//~ transform points
OGR_G_Transform(line, ctrans);
//~ set geometry
OGR_F_SetGeometry(feature, line);
//~ create feature
OGR_L_CreateFeature(layer, feature);
//~ close ogr stuff
OGR_G_DestroyGeometry(line);
OGR_F_Destroy(feature);
OGR_DS_Destroy(ds);
return;
}