User:Maxbe/Kartenversuch/unsort2xyx.c
< User:Maxbe | Kartenversuch
Jump to navigation
Jump to search
Quelltext zum Umwandlung von bayerischen Höhendaten in das gdal-eigen xyz-Format. Das Programm soll weder schön sein, noch vielseitig. Es kann nur eine Datei namens "baydgm50.unsorted_xyz" in eine Datei namens "baydgm50.xyz" umwandeln und auch nur Daten mit den im oberen Programmteil angegebenen Eckwerten und 50 Metern Auflösung.
Verwendungszweck: siehe User:Maxbe/Kartenversuch#Bessere Höhendaten für Österreich und Bayern
#include <stdio.h> #include <stdlib.h> long int x_1=4279050; long int x_2=4636750; long int y_1=5236050; long int y_2=5605500; long int d=50; main(){ double *height,ele; long int dx,dy,x,y,s,rw,hw; char z[100]; char *p; dx=(x_2-x_1)/d+1; dy=(y_2-y_1)/d+1; s=dx*dy; printf("Brauche %d*%d*%d=%dByte\n",dx,dy,sizeof(double),s*sizeof(double)); height=(double*)calloc(s,sizeof(double)); if(height==NULL){printf("Speicher ist alle, ich brauche %d Byte\n",s*sizeof(double));} else {printf("Speicher ist genug da: %d\nInitialisiere die Werte auf nodata=-3.4e+38\n",s*sizeof(double));} for(y=y_1;y<=y_2;y+=d){ dy=(y-y_1)/d; for(x=x_1;x<=x_2;x+=d){ dx=(x-x_1)/d; s=dx+dy*((x_2-x_1)/d); height[s]=-999999; } } FILE *f=fopen("baydgm50.unsorted_xyz", "r"); if(f){ printf("lese baydgm50.unsorted_xyz\n"); while( fgets(z,100,f) ){ p=strtok(z," \n"); rw=atoi(p); p=strtok(NULL," \n"); hw=atoi(p); p=strtok(NULL," \n"); ele=atof(p); dx=(rw-x_1)/d; dy=(hw-y_1)/d; s=dx+dy*((x_2-x_1)/d); height[s]=ele; } fclose(f); } f=fopen("baydgm50.xyz", "w"); if(f){ printf("schreibe baydgm50.xyz\n"); for(y=y_1;y<=y_2;y+=d){ dy=(y-y_1)/d; for(x=x_1;x<=x_2;x+=d){ dx=(x-x_1)/d; s=dx+dy*((x_2-x_1)/d); ele=height[s]; fprintf(f,"%d %d %7.1f\n",x,y,ele); } } fclose(f); } }