/* C code to make an image and plot latitude and longitude points */
#include <gd.h>
#include <gdfonts.h>
#include "location.h"
#include <string.h>
double xmin,ymin,xmax,ymax;
/* Make a new location */
Location *new_Location(char *name) {
Location *l;
l = (Location *) malloc(sizeof(Location));
l->name = (char *) malloc(strlen(name)+1);
strcpy(l->name,name);
return l;
}
/* Make a plot of two locations with a line between them */
void plot_cities(gdImagePtr im, Location *city1, Location *city2, int color) {
double x1,y1,x2,y2;
int ix1,iy1,ix2,iy2;
int width,height;
/* Convert the two locations into coordinates */
x1 = city1->long_degrees + city1->long_minutes/60 + city1->long_seconds/3600;
y1 = city1->lat_degrees + city1->lat_minutes/60 + city1->lat_seconds/3600;
if (city1->long_direction == 'W') x1 = -x1;
x2 = city2->long_degrees + city2->long_minutes/60 + city2->long_seconds/3600;
y2 = city2->lat_degrees + city2->lat_minutes/60 + city2->lat_seconds/3600;
if (city1->long_direction == 'W') x2 = -x2;
width = gdImageSX(im);
height = gdImageSY(im);
ix1 = (x1-xmin)/(xmax-xmin)*width;
iy1 = (y1-ymin)/(ymax-ymin)*height;
ix2 = (x2-xmin)/(xmax-xmin)*width;
iy2 = (y2-ymin)/(ymax-ymin)*height;
/* Draw the cities */
gdImageString(im,gdFontSmall,ix1 - strlen(city1->name)*gdFontSmall->w/2,height-iy1,city1->name,color);
gdImageString(im,gdFontSmall,ix2 - strlen(city2->name)*gdFontSmall->w/2,height-iy2,city2->name,color);
/* Draw a line */
gdImageLine(im,ix1,height-iy1,ix2,height-iy2,color);
}
syntax highlighted by Code2HTML, v. 0.9.1