15 #include <QCoreApplication>
18 #include <QStringList>
24 xml.replace(
'&',
"&");
25 xml.replace(
'<',
"<");
26 xml.replace(
'>',
">");
27 xml.replace(
'\'',
"'");
28 xml.replace(
'"',
""");
34 int main(
int argc,
char *argv[])
36 QString sourcefilename;
37 QString targetfilename;
41 for (
int i = 1; i < argc; ++i ) {
42 if ( strcmp( argv[ i ],
"-o" ) != 0 )
45 targetfilename = QString(argv[i+1]);
46 sourcefilename = QString(argv[i+2]);
48 qDebug() <<
"Source: " << sourcefilename;
49 qDebug() <<
"Target: " << targetfilename;
51 QFile sourcefile( sourcefilename );
52 sourcefile.open( QIODevice::ReadOnly );
55 QTextStream sourcestream( &sourcefile );
56 sourcestream.setCodec(
"UTF-8");
58 QFile targetfile( targetfilename );
59 targetfile.open( QIODevice::ReadWrite );
61 QTextStream targetstream( &targetfile );
62 targetstream.setCodec(
"UTF-8");
67 targetstream <<
"<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n"
68 <<
"<kml xmlns=\"http://earth.google.com/kml/2.1\"> \n"
71 targetstream <<
" <Schema name=\"MarblePlacemark\" parent=\"Placemark\"> \n";
72 targetstream <<
" <SimpleField name=\"pop\" type=\"int\"></SimpleField> \n";
73 targetstream <<
" <SimpleField name=\"role\" type=\"string\"></SimpleField> \n";
74 targetstream <<
" </Schema> \n";
88 QStringList splitline;
90 while ( !sourcestream.atEnd() ) {
92 rawline = sourcestream.readLine();
94 if ( !rawline.startsWith(QLatin1String(
"\"V\"|\"V\"|\"" ) ) ) {
97 rawline = rawline.replace(
"\"|",
"|" );
98 rawline = rawline.replace(
"|\"",
"|" );
99 if ( rawline.startsWith(
'\"') && rawline.endsWith(
'\"') ) {
100 rawline = rawline.left( rawline.length() - 1 );
101 rawline = rawline.right( rawline.length() - 2 );
104 splitline = rawline.split(
'|');
106 nameString = splitline[2];
107 latString = splitline[3];
108 lonString = splitline[4];
109 popString = splitline[10];
110 roleString = splitline[18];
111 description = splitline[19];
115 QString marbleRoleString = QLatin1String(
"o" );
117 if ( roleString ==
"AA" || roleString ==
"SF" ) marbleRoleString =
"c";
118 if ( roleString ==
"ME" || roleString ==
"OC"
119 || roleString ==
"LC" || roleString ==
"SI" ) marbleRoleString =
"a";
120 if ( roleString ==
"MO" ) marbleRoleString =
"m";
121 if ( roleString ==
"VA" ) marbleRoleString =
"v";
123 population = (int) ( 1000.0 * popString.toFloat() );
125 lon = lonString.toFloat();
127 if ( lon > 180.0 ) lon = lon - 360.0;
129 if ( rawline.startsWith(QLatin1String(
"\"M\"|\"M\"|\"" ) ) || rawline.startsWith(
"\"V\"|\"V\"|\"" ) ) {
133 lat = latString.toFloat();
135 description = description.remove(
'"');
137 targetstream <<
" <MarblePlacemark> \n";
138 targetstream <<
" <name>" <<
escapeXml( nameString ) <<
"</name> \n";
139 targetstream <<
" <role>" <<
escapeXml( marbleRoleString ) <<
"</role> \n";
140 targetstream <<
" <pop>"
141 <<
escapeXml( QString::number( population ) ) <<
"</pop> \n";
142 targetstream <<
" <description>" <<
escapeXml( description ) <<
"</description> \n";
143 targetstream <<
" <Point>\n"
148 <<
"</coordinates> \n"
150 targetstream <<
" </MarblePlacemark> \n";
153 targetstream <<
"</Document> \n"
164 qDebug(
" iau2kml -o targetfile sourcefile");
QString escapeXml(const QString &str)
int main(int argc, char *argv[])