How to create a StyleMap tag using SharpKml?

I would like to know how to create the following XML using SharpKml:

<StyleMap id="msn_placemark_circle">
    <Pair>
        <key>normal</key>
        <styleUrl>#sn_placemark_circle</styleUrl>
    </Pair>
    <Pair>
        <key>highlight</key>
        <styleUrl>#sh_placemark_circle_highlight</styleUrl>
    </Pair>
</StyleMap>

I tried several things, but to no avail. This is what I still have:

public static StyleSelector Generate_M_ylw_pushpin3()
{
    var stylemap = new StyleMapCollection();
    stylemap.Id = "s_ylw-pushpin3";
    var normalPair = new Pair();
    normalPair.Id = "normal";
    normalPair.Selector = StyleGenerator.Generate_s_ylw_pushpin_hl3();
    //normalPair.StyleUrl = new Uri(#sh_placemark_circle_highlight); // Exception by .NET

    var highlightPair = new Pair();
    highlightPair.Id = "highlight";
    highlightPair.Selector = StyleGenerator.Generate_s_ylw_pushpin_hl3();
    //highlightPair.StyleUrl = new Uri(#sh_placemark_circle_highlight); // Exception by .NET

    stylemap.Add(normalPair);
    stylemap.Add(highlightPair);

    return stylemap;
}

// This code just works fine
public static StyleSelector Generate_s_ylw_pushpin_hl3()
{
    var style = new Style();
    style.Id = "s_ylw-pushpin_hl3";
    var iconStyle = new IconStyle();
    iconStyle.Color = Color32.Parse("ff00ff00");
    iconStyle.Scale = 1.18182;
    iconStyle.Icon = new IconStyle.IconLink(new Uri("http://some/url"));
    var labelStyle = new LabelStyle();
    labelStyle.Color = Color32.Parse("00ffffff");

    style.Icon = iconStyle;
    style.Label = labelStyle;

    return style;
}

Who knows how to achieve this?

+4
source share
2 answers

I found the answer to my question:

public static StyleSelector Generate_M_ylw_pushpin3()
{
    var stylemap = new StyleMapCollection();
    stylemap.Id = "s_ylw-pushpin3";
    var normalPair = new Pair();
    normalPair.StyleUrl = new Uri("#sh_placemark_circle", UriKind.Relative); 
    normalPair.State = StyleState.Normal;

    var highlightPair = new Pair();
    highlightPair.StyleUrl = new Uri("#sh_placemark_circle_highlight", UriKind.Relative); 
    highlightPair.State = StyleState.Highlight;

    stylemap.Add(normalPair);
    stylemap.Add(highlightPair);

    return stylemap;
}
+3
source
Marchinin added the answer to his question, which was surprising and helped me get to my decision. Just for the alternative, which, in my opinion, is a little more general, I decided that I would leave my decision, which I received thanks to Martigine's answer.

Note: my solution generates them to create a string object, however this can be easily used for other styles.

. , ,

( , ..) , . :

kmlDom.Style normalStyle = createPlacemarkLineStyle(thisPlacemark, false);
kmlDom.Style highlightStyle = createPlacemarkLineStyle(thisPlacemark, true);

:

public kmlDom.Style createPlacemarkLineStyle ( kmlDom.Placemark placemark , bool highlight )
{
  kmlDom.Style styleNode = new kmlDom.Style( );
  // Add Line Style
  kmlDom.LineStyle lineStyle = new kmlDom.LineStyle( );
  if( !highlight )
  {
    styleNode.Id = String.Format( "{0}-normal", placemark.placemarkName );
    lineStyle.Color = hexToColor("ff0000ff");
    lineStyle.Width = 2;
  }
  else
  {
  styleNode.Id = String.Format( "{0}-highlight", placemark.placemarkName );
    lineStyle.Color = hexToColor( "ff0000ff" );
    lineStyle.Width = 2;
  }
  styleNode.Line = lineStyle;
  return styleNode;
}

,

, . , :

thisPlacemark.StyleSelector = createPlacemarkLineStyleMap(placemark, normalStyle, highlightStyle);

:

public kmlDom.StyleSelector createPlacemarkLineStyleMap ( kmlDom.Placemark  placemark , kmlDom.Style normalStyle , kmlDom.Style highlightStyle )
{
  // Set up style map
  kmlDom.StyleMapCollection styleMapCollection = new kmlDom.StyleMapCollection( );
  styleMapCollection.Id = String.Format( "{0}-stylemap" , placemark.placemarkName );
  // Create the normal line pair
  kmlDom.Pair normalPair = new kmlDom.Pair();
  normalPair.StyleUrl = new Uri(String.Format("#{0}", normalStyle.Id), UriKind.Relative);
  normalPair.State = kmlDom.StyleState.Normal;
  // Create the highlight line pair
  kmlDom.Pair highlightPair = new kmlDom.Pair( );
  highlightPair.StyleUrl = new Uri( String.Format( "#{0}" , highlightStyle.Id ) , UriKind.Relative );
  highlightPair.State = kmlDom.StyleState.Highlight;
  // Attach both pairs to the map
  styleMapCollection.Add( normalPair);
  styleMapCollection.Add( highlightPair );

  return styleMapCollection;
}

kmlDom, kmlBase kmlEngine

** , sharpkml .

using kmlBase = SharpKml.Base;
using kmlDom = SharpKml.Dom;
using kmlEngine = SharpKml.Engine;
0

All Articles