/// <summary>
        /// Creates a KML placemark of the given site.
        /// </summary>
        /// <param name="site">The site to convert.</param>
        /// <param name="styleUrl">The URI of the shared style to use. Null for not to add any style URL.</param>
        /// <returns>The placemark object reflecting the site.</returns>
        public static Placemark ToKmlPlacemark(this IHamnetDbSite site, Uri styleUrl = null)
        {
            if (site == null)
            {
                throw new ArgumentNullException(nameof(site), "site is null");
            }

            var pm = new Placemark
            {
                Name        = site.Callsign?.ToUpperInvariant(),
                Id          = site.Callsign?.ToUpperInvariant(), // we use callsign for unique ID - must see if that works out
                Description = new Description
                {
                    Text = $@"<h2>{site.Callsign?.ToUpperInvariant()}:</h2>
<table>
<tr><td class=""left"">latitude: </td><td>{site.Latitude}&#176;</td></tr>
<tr><td class=""left"">longitude: </td><td>{site.Longitude}&#176;</td></tr>
<tr><td class=""left"">ground asl: </td><td>{site.GroundAboveSeaLevel} m</td></tr>
<tr><td class=""left"">elevation: </td><td>{site.Elevation} m</td></tr>
<tr><td class=""left"">abs. altitude: </td><td>{site.Altitude} m</td></tr>
</table>
<p>Comment:</p>
<p>{site.Comment.Replace("\n", "<br/>")}</p>
"
                },
                Geometry = site.ToKmlPoint()
            };

            if (styleUrl != null)
            {
                pm.StyleUrl = styleUrl;
            }

            return(pm);
        }