static void close_stack(FILE *fp, datapool_type_t *datapool) { fprintf(fp, "</table>\n"); fprintf(fp, "</td></tr></table>\n"); fprintf(fp, " ]]></description>\n"); fprintf(fp, " <name>%s stack</name>\n", datapool->granule_name); fprintf(fp, " <LookAt>\n"); fprintf(fp, " <longitude>%.4f</longitude>\n", datapool->center_lon); fprintf(fp, " <latitude>%.4f</latitude>\n", datapool->center_lat); fprintf(fp, " <range>400000</range>\n"); fprintf(fp, " </LookAt>\n"); fprintf(fp, " <visibility>1</visibility>\n"); fprintf(fp, " <open>1</open>\n"); write_kml_style_keys(fp); fprintf(fp, " <Polygon>\n"); fprintf(fp, " <extrude>1</extrude>\n"); fprintf(fp, " <altitudeMode>%s</altitudeMode>\n", altitude_mode()); fprintf(fp, " <outerBoundaryIs>\n"); fprintf(fp, " <LinearRing>\n"); fprintf(fp, " <coordinates>\n"); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_start_lon, datapool->near_start_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->far_start_lon, datapool->far_start_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->far_end_lon, datapool->far_end_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_end_lon, datapool->near_end_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_start_lon, datapool->near_start_lat); fprintf(fp, " </coordinates>\n"); fprintf(fp, " </LinearRing>\n"); fprintf(fp, " </outerBoundaryIs>\n"); fprintf(fp, " </Polygon>\n"); fprintf(fp, "</Placemark>\n"); }
static void add_to_kml(FILE *fp, datapool_type_t *datapool, dbf_header_t *dbf, int nCols) { int ii; char begin[10], end[10]; // Print out according to configuration fprintf(fp, "<Placemark>\n"); fprintf(fp, " <description><![CDATA[\n"); fprintf(fp, "<table width=\"350\"><tr><td>\n"); fprintf(fp, "<!-- Format: DATAPOOL (generated by %s) -->\n", version_string("conver2vector")); for (ii=0; ii<nCols; ii++) { if (dbf[ii].visible == 0) { strcpy(begin, "<!--"); strcpy(end, "-->\n"); } else { strcpy(begin, ""); strcpy(end, "\n"); } if (strcmp(dbf[ii].header, "Granule_Name") == 0) fprintf(fp, "%s<strong>Granule Name</strong>: %s <br>%s", begin, datapool->granule_name, end); else if (strcmp(dbf[ii].header, "Platform") == 0) fprintf(fp, "%s<strong>Platform</strong>: %s <br>%s", begin, datapool->platform, end); else if (strcmp(dbf[ii].header, "Sensor") == 0) fprintf(fp, "%s<strong>Sensor</strong>: %s <br>%s", begin, datapool->sensor, end); else if (strcmp(dbf[ii].header, "Beam_Mode") == 0) fprintf(fp, "%s<strong>Beam mode</strong>: %s <br>%s", begin, datapool->beam_mode, end); else if (strcmp(dbf[ii].header, "Beam_Mode_Description") == 0) fprintf(fp, "%s<strong>Beam mode description</strong>: %s <br>%s", begin, datapool->beam_mode_description, end); else if (strcmp(dbf[ii].header, "Orbit") == 0) fprintf(fp, "%s<strong>Orbit</strong>: %d <br>%s", begin, datapool->orbit, end); else if (strcmp(dbf[ii].header, "Path_Number") == 0) fprintf(fp, "%s<strong>Path Number</strong>: %d <br>%s", begin, datapool->path_number, end); else if (strcmp(dbf[ii].header, "Frame_Number") == 0) fprintf(fp, "%s<strong>Frame Number</strong>: %d <br>%s", begin, datapool->frame_number, end); else if (strcmp(dbf[ii].header, "Acquisition_Date") == 0) fprintf(fp, "%s<strong>Acquisition Date</strong>: %s <br>%s", begin, datapool->acquisition_date, end); else if (strcmp(dbf[ii].header, "Processing_Date") == 0) fprintf(fp, "%s<strong>Processing Date</strong>: %s <br>%s", begin, datapool->processing_date, end); else if (strcmp(dbf[ii].header, "Processing_Level") == 0) fprintf(fp, "%s<strong>Processing Level</strong>: %s <br>%s", begin, datapool->processing_level, end); else if (strcmp(dbf[ii].header, "Start_Time") == 0) fprintf(fp, "%s<strong>Start Time</strong>: %s <br>%s", begin, datapool->start_time, end); else if (strcmp(dbf[ii].header, "End_Time") == 0) fprintf(fp, "%s<strong>End Time</strong>: %s <br>%s", begin, datapool->end_time, end); else if (strcmp(dbf[ii].header, "Center_Lat") == 0) fprintf(fp, "%s<strong>Center Lat</strong>: %.4f <br>%s", begin, datapool->center_lat, end); else if (strcmp(dbf[ii].header, "Center_Lon") == 0) fprintf(fp, "%s<strong>Center Lon</strong>: %.4f <br>%s", begin, datapool->center_lon, end); else if (strcmp(dbf[ii].header, "Near_Start_Lat") == 0) fprintf(fp, "%s<strong>Near Start Lat</strong>: %.4f <br>%s", begin, datapool->near_start_lat, end); else if (strcmp(dbf[ii].header, "Near_Start_Lon") == 0) fprintf(fp, "%s<strong>Near Start Lon</strong>: %.4f <br>%s", begin, datapool->near_start_lon, end); else if (strcmp(dbf[ii].header, "Far_Start_Lat") == 0) fprintf(fp, "%s<strong>Far Start Lat</strong>: %.4f <br>%s", begin, datapool->far_start_lat, end); else if (strcmp(dbf[ii].header, "Far_Start_Lon") == 0) fprintf(fp, "%s<strong>Far Start Lon</strong>: %.4f <br>%s", begin, datapool->far_start_lon, end); else if (strcmp(dbf[ii].header, "Near_End_Lat") == 0) fprintf(fp, "%s<strong>Near End Lat</strong>: %.4f <br>%s", begin, datapool->near_end_lat, end); else if (strcmp(dbf[ii].header, "Near_End_Lon") == 0) fprintf(fp, "%s<strong>Near End Lon</strong>: %.4f <br>%s", begin, datapool->near_end_lon, end); else if (strcmp(dbf[ii].header, "Far_End_Lat") == 0) fprintf(fp, "%s<strong>Far End Lat</strong>: %.4f <br>%s", begin, datapool->far_end_lat, end); else if (strcmp(dbf[ii].header, "Far_End_Lon") == 0) fprintf(fp, "%s<strong>Far End Lon</strong>: %.4f <br>%s", begin, datapool->far_end_lon, end); else if (strcmp(dbf[ii].header, "Faraday_Rotation") == 0) fprintf(fp, "%s<strong>Faraday Rotation</strong>: %.1f <br>%s", begin, datapool->faraday_rotation, end); else if (strcmp(dbf[ii].header, "Orbit_Direction") == 0) fprintf(fp, "%s<strong>Orbit Direction</strong>: %s <br>%s", begin, datapool->orbit_direction, end); else if (strcmp(dbf[ii].header, "Url") == 0) fprintf(fp, "%s<strong>URL</strong>: %s <br>%s", begin, datapool->url, end); else if (strcmp(dbf[ii].header, "Size") == 0) fprintf(fp, "%s<strong>Size (MB)</strong>: %.2f <br>%s", begin, datapool->size, end); else if (strcmp(dbf[ii].header, "Off_Nadir_Angle") == 0) fprintf(fp, "%s<strong>Off Nadir Angle</strong>: %.1f <br>%s", begin, datapool->off_nadir_angle, end); } fprintf(fp, "</td></tr></table>\n"); fprintf(fp, " ]]></description>\n"); fprintf(fp, " <name>%s</name>\n", datapool->granule_name); fprintf(fp, " <LookAt>\n"); fprintf(fp, " <longitude>%.4f</longitude>\n", datapool->center_lon); fprintf(fp, " <latitude>%.4f</latitude>\n", datapool->center_lat); fprintf(fp, " <range>400000</range>\n"); fprintf(fp, " </LookAt>\n"); fprintf(fp, " <visibility>1</visibility>\n"); fprintf(fp, " <open>1</open>\n"); write_kml_style_keys(fp); fprintf(fp, " <Polygon>\n"); fprintf(fp, " <extrude>1</extrude>\n"); fprintf(fp, " <altitudeMode>%s</altitudeMode>\n", altitude_mode()); fprintf(fp, " <outerBoundaryIs>\n"); fprintf(fp, " <LinearRing>\n"); fprintf(fp, " <coordinates>\n"); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_start_lon, datapool->near_start_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->far_start_lon, datapool->far_start_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->far_end_lon, datapool->far_end_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_end_lon, datapool->near_end_lat); fprintf(fp, " %.4f,%.4f,7000\n", datapool->near_start_lon, datapool->near_start_lat); fprintf(fp, " </coordinates>\n"); fprintf(fp, " </LinearRing>\n"); fprintf(fp, " </outerBoundaryIs>\n"); fprintf(fp, " </Polygon>\n"); fprintf(fp, "</Placemark>\n"); }
// Convert baselines to kml void baseline2kml(int ii, struct base_pair *pairs, FILE *fp) { int kk, vertices=4; double *lat, *lon; julian_date jd; ymd_date ymd; char *mon[13]= {"", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; lat = (double *) MALLOC(sizeof(double)*(vertices+1)); lon = (double *) MALLOC(sizeof(double)*(vertices+1)); lat[0] = pairs->ns_lat; lon[0] = pairs->ns_lon; lat[1] = pairs->fs_lat; lon[1] = pairs->fs_lon; lat[2] = pairs->fe_lat; lon[2] = pairs->fe_lon; lat[3] = pairs->ne_lat; lon[3] = pairs->ne_lon; lat[vertices] = lat[0]; lon[vertices] = lon[0]; // Write information in kml file fprintf(fp, "<Placemark>\n"); fprintf(fp, "<description><![CDATA[<table><tr><td width=400>\n"); if (strcmp(pairs->m_sensor, pairs->s_sensor) == 0) fprintf(fp, "<strong>Sensor</strong>: %s<br>\n", pairs->m_sensor); else { fprintf(fp, "<strong>Master sensor</strong>: %s<br>\n", pairs->m_sensor); fprintf(fp, "<strong>Slave sensor</strong>: %s<br>\n", pairs->s_sensor); } fprintf(fp, "<strong>Mode</strong>: %s<br>\n", pairs->mode); fprintf(fp, "<strong>Frame</strong>: %d<br>\n", pairs->frame); if (strcmp_case(pairs->m_sensor, "PSR") == 0) fprintf(fp, "<strong>Off-nadir angle</strong>: %.4f\n", pairs->off_nadir); fprintf(fp, "<strong>Orbit direction</strong>: %s<br>\n", pairs->orbit_dir); fprintf(fp, "<strong>Master</strong>: %d<br>\n", pairs->master); sscanf(pairs->m_time, "%4d-%3dT", &jd.year, &jd.jd); date_jd2ymd(&jd, &ymd); fprintf(fp, "<strong>Master acquisition</strong>: %d-%s-%d<br>\n", ymd.day, mon[ymd.month], ymd.year); fprintf(fp, "<strong>Slave</strong>: %d<br>\n", pairs->slave); sscanf(pairs->s_time, "%4d-%3dT", &jd.year, &jd.jd); date_jd2ymd(&jd, &ymd); fprintf(fp, "<strong>Slave acquisition</strong>: %d-%s-%d<br>\n", ymd.day, mon[ymd.month], ymd.year); fprintf(fp, "<strong>Parallel baseline</strong>: %i<br>\n", pairs->b_par); fprintf(fp, "<strong>Perpendicular baseline</strong>: %i<br>\n", pairs->b_perp); fprintf(fp, "<strong>Temporal baseline</strong>: %i<br>\n", pairs->b_temp); for (kk=0; kk<vertices; kk++) { fprintf(fp, "<strong>%d</strong> - ", kk+1); fprintf(fp, "<strong>Lat</strong>: %9.4f, ", lat[kk]); fprintf(fp, "<strong>Lon</strong>: %9.4f<br>\n", lon[kk]); } fprintf(fp, "</td></tr></table>]]></description>\n"); fprintf(fp, "<name>Master orbit: %d - Slave orbit: %d - " "Frame: %d</name>\n", pairs->master, pairs->slave, pairs->frame); fprintf(fp, "<LookAt>\n"); fprintf(fp, "<longitude>%.4f</longitude>\n", pairs->c_lon); fprintf(fp, "<latitude>%.4f</latitude>\n", pairs->c_lat); fprintf(fp, "<range>500000</range>\n"); fprintf(fp, "<heading>0</heading>\n"); fprintf(fp, "</LookAt>\n"); write_kml_style_keys(fp); fprintf(fp, "<Polygon>\n"); fprintf(fp, "<outerBoundaryIs>\n"); fprintf(fp, "<LinearRing>\n"); fprintf(fp, "<extrude>1</extrude>\n"); fprintf(fp, "<tessellate>1</tessellate>\n"); fprintf(fp, "<altitudeMode>absolute</altitudeMode>\n"); fprintf(fp, "<coordinates>\n"); for (kk=0; kk<=vertices; kk++) fprintf(fp, "%.12f,%.12f,20000\n", lon[kk], lat[kk]); fprintf(fp, "</coordinates>\n"); fprintf(fp, "</LinearRing>\n"); fprintf(fp, "</outerBoundaryIs>\n"); fprintf(fp, "</Polygon>\n"); fprintf(fp, "</Placemark>\n"); fflush(fp); return; }