我想知道如何使用SharpKml创建以下XML:
<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>
我尝试过几件事,但没有成功。这就是我到目前为止所做的:
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;
}
谁知道如何实现这一目标?
答案 0 :(得分:3)
我找到了自己问题的答案:
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;
}
答案 1 :(得分:0)
注意:我的解决方案是为要生成的线对象生成这些,但是这可以轻松地用于其他样式
这里我们只传入地标本身(有一些细节,如地标名称等,可用)和布尔值,以确定它是高亮还是普通风格。我的用法是:
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;
}
**我的使用如下将sharpkml对象与我自己的内部对象分开
using kmlBase = SharpKml.Base;
using kmlDom = SharpKml.Dom;
using kmlEngine = SharpKml.Engine;