【问题标题】:Writing a KML using C# - ScreenOverlay使用 C# 编写 KML - ScreenOverlay
【发布时间】:2013-03-13 03:05:05
【问题描述】:

我正在尝试使用我在 C# 中制作的程序在谷歌地图上获得覆盖。我似乎无法弄清楚代码来获得我想要的叠加层的位置。无论我尝试什么,它都位于页面中间。

这是我的代码:

kml.WriteStartElement("ScreenOverlay");
kml.WriteElementString("name", "elephant");
kml.WriteStartElement("Icon");
kml.WriteElementString("href", "images/elephant.jpg");

//This is the part I can't figure out below

kml.WriteStartElement("overlayXY", "x='0' y='0' xunits='fraction' yunits='fraction'/");
kml.WriteStartElement("screenXY", "x='0' y='0' xunits='pixels' yunits='pixels'/");
kml.WriteStartElement("rotationXY", "x='0' y='0' xunits='fraction' yunits='fraction'/");
kml.WriteStartElement("size", "x='0' y='0' xunits='pixels' yunits='pixels'/");

kml.WriteEndElement();
kml.WriteEndElement();
kml.WriteEndElement();
kml.WriteEndElement();
kml.WriteEndElement();
kml.WriteEndElement();

该代码是我最近的尝试。但它没有用。 “大象”图像仍然保留在屏幕中间。我是初学者(如果不是很明显!)。

【问题讨论】:

  • 澄清您是在项目中使用 System.Xml.XmlTextWriter 类还是其他库。另外,您是否使用 kmlvalidator.com 验证生成的 KML?

标签: c# google-maps kml


【解决方案1】:

如果您在 C# 中使用 System.Xml.XmlTextWriter 类生成 KML 输出,则 WriteStartElement() 的第二个参数是元素命名空间而不是属性,并且 Icon 元素必须在开始 overlayXY 元素之前结束,否则生成的输出为无效的 KML。

语法是这样的:

[C#]
public void WriteStartElement(
 string localName,
 string ns
);

您需要改为将代码更改为:

  XmlTextWriter kml = new XmlTextWriter(...)
  kml.Formatting = Formatting.Indented;
  kml.WriteStartElement("kml", "http://www.opengis.net/kml/2.2");
  kml.WriteStartElement("ScreenOverlay");
  kml.WriteElementString("name", "elephant");
  kml.WriteStartElement("Icon");
  kml.WriteElementString("href", "images/elephant.jpg");
  kml.WriteEndElement(); // Icon

  kml.WriteStartElement("overlayXY");    
  kml.WriteAttributeString("x", "0");
  kml.WriteAttributeString("y", "0");
  kml.WriteAttributeString("xunits", "fraction");
  kml.WriteAttributeString("yunits", "fraction");
  kml.WriteEndElement(); // overlayXY

  kml.WriteStartElement("screenXY");
  kml.WriteAttributeString("x", "0");
  kml.WriteAttributeString("y", "0");
  kml.WriteAttributeString("xunits", "pixels");
  kml.WriteAttributeString("yunits", "pixels");
  kml.WriteEndElement(); // screenXY
  ...
  kml.WriteEndElement(); // ScreenOverlay
  kml.WriteEndElement(); // kml


提示:当您使用应用程序(Google 地球除外)生成 KML 时,您应该始终验证您的 KML。您可以将您的 KML 发布到 Galdos KML Validator,它不仅会向 KML XML Schema 报告任何错误,还会向 OGC KML 规范报告任何错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多