User:Maxbe/Kartenversuch/unsort2xyx.c
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);
}
}