<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-ligatures:none;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head><body lang="EN-AU" link="#0563C1" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal">GDAL Guru’s,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I’m looking at how to apply some sort of predefined style to a dataset coming from XLSX and going to KML (LIBKML).<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">My thoughts are XLSX <span style="font-family:Wingdings">à</span> VRT
<span style="font-family:Wingdings">à</span> KML.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I can successfully add OGR_STYLE at each feature and style the features individually, however I’m hoping I can leverage existing styles at the layer / folder level of the KML. (<a href="https://gdal.org/drivers/vector/libkml.html#styletable">https://gdal.org/drivers/vector/libkml.html#styletable</a>,
<a href="https://gdal.org/drivers/vector/libkml.html#style">https://gdal.org/drivers/vector/libkml.html#style</a>)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For the KML file specifically I’d love to be able to append a StyleURL in the format ‘sharedstyle.kml#Zone’ and somehow bundle the ogr2ogr generated file with this sharedstyle.kml in a kmz…?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Some data sets:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>The XLSX data:<o:p></o:p></b></p>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" width="1233" style="width:925.0pt;border-collapse:collapse">
<tbody>
<tr style="height:15.0pt">
<td width="75" nowrap="" valign="bottom" style="width:56.55pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">ElementId<o:p></o:p></span></p>
</td>
<td width="52" nowrap="" valign="bottom" style="width:38.65pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">Name<o:p></o:p></span></p>
</td>
<td width="1106" nowrap="" valign="bottom" style="width:829.8pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">WKT<o:p></o:p></span></p>
</td>
</tr>
<tr style="height:15.0pt">
<td width="75" nowrap="" valign="bottom" style="width:56.55pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">1179<o:p></o:p></span></p>
</td>
<td width="52" nowrap="" valign="bottom" style="width:38.65pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">Zone1<o:p></o:p></span></p>
</td>
<td width="1106" nowrap="" valign="bottom" style="width:829.8pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">POLYGON ((530494.56 6944864.63, 530486.431754 6944883.227494, 530497.919033 6944897.30242, 530575.4 6944931.94, 530589.075307 6944920.363282, 530608.620897 6944914.005078, 530494.56 6944864.63))<o:p></o:p></span></p>
</td>
</tr>
<tr style="height:15.0pt">
<td width="75" nowrap="" valign="bottom" style="width:56.55pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">1180<o:p></o:p></span></p>
</td>
<td width="52" nowrap="" valign="bottom" style="width:38.65pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">Zone4<o:p></o:p></span></p>
</td>
<td width="1106" nowrap="" valign="bottom" style="width:829.8pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">POLYGON ((530640.737164 6944927.90768, 530633.256 6944960.922, 530648.673025 6944964.552847, 530660.54 6944936.48, 530640.737164 6944927.90768))<o:p></o:p></span></p>
</td>
</tr>
<tr style="height:15.0pt">
<td width="75" nowrap="" valign="bottom" style="width:56.55pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">1181<o:p></o:p></span></p>
</td>
<td width="52" nowrap="" valign="bottom" style="width:38.65pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">Zone2<o:p></o:p></span></p>
</td>
<td width="1106" nowrap="" valign="bottom" style="width:829.8pt;padding:0cm 5.4pt 0cm 5.4pt;height:15.0pt">
<p class="MsoNormal"><span style="color:black;mso-fareast-language:EN-AU">POLYGON ((530494.56 6944864.63, 530501.34 6944857.63, 530665.986727 6944919.946257, 530660.54 6944936.48, 530494.56 6944864.63))<o:p></o:p></span></p>
</td>
</tr>
</tbody>
</table>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="border:none;padding:0cm"><b><o:p> </o:p></b></p>
</div>
<p class="MsoNormal"><b><o:p> </o:p></b></p>
<p class="MsoNormal"><b>The VRT file (Local.vrt):<o:p></o:p></b></p>
<p class="MsoNormal"><OGRVRTDataSource><o:p></o:p></p>
<p class="MsoNormal">  <OGRVRTLayer name="Zone"><o:p></o:p></p>
<p class="MsoNormal">    <SrcDataSource relativeToVRT="1">Local.xlsx</SrcDataSource><o:p></o:p></p>
<p class="MsoNormal">    <FID name="ElementId"/><o:p></o:p></p>
<p class="MsoNormal">    <OpenOptions><o:p></o:p></p>
<p class="MsoNormal">      <OOI key="HEADERS">FORCE</OOI><o:p></o:p></p>
<p class="MsoNormal">    </OpenOptions><o:p></o:p></p>
<p class="MsoNormal">    <SrcSQL>Select ElementId, Name, WKT, '@Zone' as OGR_STYLE from Zone</SrcSQL><o:p></o:p></p>
<p class="MsoNormal">    <GeometryType>wkbPolygon</GeometryType><o:p></o:p></p>
<p class="MsoNormal">    <LayerSRS>EPSG:28356</LayerSRS><o:p></o:p></p>
<p class="MsoNormal">    <GeometryField encoding="WKT" name="Geometry" field="WKT" reportSrcColumn="FALSE" /><o:p></o:p></p>
<p class="MsoNormal">    <Field name="ElementId" type="Integer" /><o:p></o:p></p>
<p class="MsoNormal">    <Field name="Name" type="String" /><o:p></o:p></p>
<p class="MsoNormal">    <Style>OGR_STYLE</Style><o:p></o:p></p>
<p class="MsoNormal">  </OGRVRTLayer><o:p></o:p></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="border:none;padding:0cm"></OGRVRTDataSource><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Template KML file (Base.kml):<o:p></o:p></p>
<p class="MsoNormal"><?xml version="1.0" encoding="UTF-8"?><o:p></o:p></p>
<p class="MsoNormal"><kml xmlns=<a href="http://www.opengis.net/kml/2.2">http://www.opengis.net/kml/2.2</a>><o:p></o:p></p>
<p class="MsoNormal">  <Document id="root_doc"><o:p></o:p></p>
<p class="MsoNormal">    <Style id="Zone"><o:p></o:p></p>
<p class="MsoNormal">      <LineStyle><o:p></o:p></p>
<p class="MsoNormal">        <color>ff0000ff</color><o:p></o:p></p>
<p class="MsoNormal">        <width>15</width><o:p></o:p></p>
<p class="MsoNormal">      </LineStyle><o:p></o:p></p>
<p class="MsoNormal">      <PolyStyle><o:p></o:p></p>
<p class="MsoNormal">        <color>7f7faaaa</color><o:p></o:p></p>
<p class="MsoNormal">        <colorMode>random</colorMode><o:p></o:p></p>
<p class="MsoNormal">      </PolyStyle><o:p></o:p></p>
<p class="MsoNormal">    </Style><o:p></o:p></p>
<p class="MsoNormal">  </Document><o:p></o:p></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="border:none;padding:0cm"></kml><o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Local.ofs:<o:p></o:p></p>
<p class="MsoNormal">#OFS-Version: 1.0<o:p></o:p></p>
<p class="MsoNormal">#StyleField: "LayerStyle"<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">DefaultStyle: BRUSH(fc:#000000);PEN(c:#000000)<o:p></o:p></p>
<div style="mso-element:para-border-div;border:none;border-bottom:solid windowtext 1.0pt;padding:0cm 0cm 1.0pt 0cm">
<p class="MsoNormal" style="border:none;padding:0cm">Zone:      BRUSH(fc:#0000FF);PEN(c:#000000)<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">ogr2ogr Local.kml Local.vrt Zone -oo HEADERS=FORCE -t_srs EPSG:4326 -f LIBKML -lco FOLDER=NO<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">How do I append layer level rules to a KML file when using ogr2ogr, things I’ve tried:<o:p></o:p></p>
<p class="MsoNormal">‘BRUSH(fc:#0000FF);PEN(c:#000000)’, writes a style element to each feature (this will work but not ideal).<o:p></o:p></p>
<p class="MsoNormal">‘@Zone’, generates ‘#Zone’ in the styleurl, but I don’t know how to append the style rule to the newly created kml file.<o:p></o:p></p>
<p class="MsoNormal">‘@styles.kml#Zome’, generates ‘#styles.kml#Zone’, just not going to cut it.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://gdal.org/user/ogr_feature_style.html#styles-table-format">https://gdal.org/user/ogr_feature_style.html#styles-table-format</a><o:p></o:p></p>
<p class="MsoNormal">I’ve tinkered with the .ofs file, documentation on this is a little sparse not sure exactly what to do with it?<o:p></o:p></p>
</div>



<hr>
<font face="Arial"><font size="2"><strong>Note:</strong> </font></font>
<div><font size="2" face="Arial">This message is for the named person's use 
only.  It may contain confidential, proprietary or legally privileged 
information.  No confidentiality or privilege is waived or lost by any 
mistransmission.  If you receive this message in error, please 
immediately delete it and all copies of it from your system, destroy any hard 
copies of it and notify the sender.  You must not, directly or indirectly, 
use, disclose, distribute, print, or copy any part of this message if you are 
not the intended recipient. The <font color="#0000a0"><strong>Port of 
Brisbane </strong></font> reserves the right to monitor all e-mail 
communications through its networks.</font></div>
<div><font size="2" face="Arial">If you have received this transmission in error 
please let us know by contacting us on +61 7 3258 4888 or by reply E-Mail to the 
sender.</font></div>
<div><font size="2" face="Arial">Any views expressed in this message are those of 
the individual sender, except where the message states otherwise and the sender 
is authorised to state them to be the views of any such entity.</font></div>
<div><font size="2" face="Arial"></font> </div>
<div><font face="Arial"><font size="2"><strong>Thank You.</strong> 
<br></font></font>
<hr>
</div>

</body></html>