Формирование файла KML и запуск соответствующего приложения (если есть - GoogleEarth, если его нет -
запуск Google через браузер
//---------------------------------------------------------------------------
// filename - имя создаваемого файла KML
// b,l - координаты в градусах
// text - подпись названия точки при отображении в GoogleEarth
//---------------------------------------------------------------------------
int TForm1::ViewPointToGoogle(char *filename,double b,double l,char *text)
{
char drive[MAX_PATH];
char dir[MAX_PATH];
char file[MAX_PATH];
char ext[MAX_PATH];
FILE *gfile = fopen(filename,"w");
fprintf(gfile,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
fprintf(gfile,"<kml xmlns=\"http://earth.google.com/kml/2.1\">\n");
fprintf(gfile," <Document>\n");
fprintf(gfile," <name>Elets, RUS.kml</name>\n");
fprintf(gfile," <open>1</open>\n");
fprintf(gfile," <Style id=\"sn_wht-blank\">\n");
fprintf(gfile," <IconStyle>\n");
fprintf(gfile," <Icon>\n");
fprintf(gfile," </Icon>\n");
fprintf(gfile," </IconStyle>\n");
fprintf(gfile," </Style>\n");
fprintf(gfile," <Placemark>\n");
fprintf(gfile," <name>%s</name>\n",AnsiToUtf8(text));
fprintf(gfile," <LookAt>\n");
fprintf(gfile," <longitude>%lf</longitude>\n",l);
fprintf(gfile," <latitude>%lf</latitude>\n",b);
fprintf(gfile," <altitude>2000</altitude>\n");
fprintf(gfile," <range>10000</range>\n");
fprintf(gfile," <tilt>35</tilt>\n");
fprintf(gfile," <heading>0</heading>\n");
fprintf(gfile," </LookAt>\n");
fprintf(gfile," <styleUrl>#default_myplaces_style</styleUrl>\n");
fprintf(gfile," <Point>\n");
fprintf(gfile," <coordinates>%lf,%lf,20000</coordinates>\n",l,b);
fprintf(gfile," </Point>\n");
fprintf(gfile," </Placemark>\n");
fprintf(gfile,"</Document>\n");
fprintf(gfile,"</kml>\n");
fclose(gfile);
// Выбрать программу из регистра
char buffer[MAX_PATH];
long bufSize = MAX_PATH;
memset(buffer,0,MAX_PATH);
char exe[512];
memset(exe,0,MAX_PATH);
// Выбрать программу из регистра
// Описание расширения
if(::RegQueryValue(HKEY_CLASSES_ROOT,".kml", buffer, &bufSize) == ERROR_SUCCESS)
{
bufSize = MAX_PATH;
sprintf(exe,"%s\\shell\\open\\command", buffer);
// Описание связанной программы
if(::RegQueryValue(HKEY_CLASSES_ROOT, exe, buffer, &bufSize) == ERROR_SUCCESS)
{
SplitThePath(buffer,drive,dir,file,ext);
MakeThePath(buffer,drive,dir,file,".exe");
strcat(buffer," \"");
strcat(buffer,filename);
strcat(buffer,"\"");
::WinExec(buffer,SW_SHOW);
}
}
else
{
char parm[256];
sprintf(parm,"http://maps.google.com/maps?ll=%lf,%lf&spn=0.1,0.1&t=h&hl=ru",b,l);
::ShellExecute(Application->Handle,"open",parm,NULL,NULL, SW_SHOWNORMAL);
}
return 1;
}