【问题标题】:Make KML LineString follow roads使 KML LineString 跟随道路
【发布时间】:2020-11-18 17:00:19
【问题描述】:

我正在处理一个带有两个坐标的 KML 文件,用于绘制线串。当道路是直的时它工作得很好,但只要道路弯曲,线条就不会弯曲。这是我使用的 KML 代码

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
  <Document>
    <open>1</open>
    <Style id="s_ylw-pushpin_hl">
      <IconStyle>
        <color>ffff5500</color>
        <scale>0.583333</scale>
        <Icon>
          <href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
        </Icon>
      </IconStyle>
      <LabelStyle>
        <color>00ffffff</color>
      </LabelStyle>
      <ListStyle />
      <LineStyle>
        <color>ff0000ff</color>
        <width>3.6</width>
      </LineStyle>
      <PolyStyle>
        <fill>0</fill>
      </PolyStyle>
    </Style>
    <StyleMap id="m_pushpin">
      <Pair>
        <key>normal</key>
        <styleUrl>#s_ylw-pushpin</styleUrl>
      </Pair>
      <Pair>
        <key>highlight</key>
        <styleUrl>#s_ylw-pushpin_hl</styleUrl>
      </Pair>
    </StyleMap>
    <Style id="s_ylw-pushpin">
      <IconStyle>
        <color>ffff5500</color>
        <scale>0.5</scale>
        <Icon>
          <href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
        </Icon>
      </IconStyle>
      <LabelStyle>
        <color>00ffffff</color>
      </LabelStyle>
      <ListStyle />
      <LineStyle>
        <color>ff0000ff</color>
        <width>3.6</width>
      </LineStyle>
      <PolyStyle>
        <fill>0</fill>
      </PolyStyle>
    </Style>
    <Placemark>
      <name>Test Fac 10-26-2020</name>
      <description>Sidewalk</description>
      <sidewalk_missing>No</sidewalk_missing>
      <LineString>
        <extrude>1</extrude>
        <tessellate>1</tessellate>
        <coordinates>-104.818968772888,39.710975093838,0 -104.810267686844,39.708465999778,0</coordinates>
      </LineString>
      <Style>
        <LineStyle>
          <color>ffff0000</color>
          <width>5</width>
        </LineStyle>
      </Style>
    </Placemark>
    <Placemark>
      <name>Test Fac 10-26-2020</name>
      <description>Sidewalk 1</description>
      <sidewalk_missing>No</sidewalk_missing>
      <LineString>
        <extrude>1</extrude>
        <tessellate>1</tessellate>
        <coordinates>-104.819033145905,39.707747919881,0 -104.814473390579,39.70400883137,0</coordinates>
      </LineString>
      <Style>
        <LineStyle>
          <color>ffff0000</color>
          <width>5</width>
        </LineStyle>
      </Style>
    </Placemark>
  </Document>
</kml>

我希望 LineString 遵循类似于道路上的黄线。我研究了 Directions API,但找不到更好的方法。

【问题讨论】:

  • 您需要所有道路坐标的来源(不仅仅是起点和终点)。 OpenStreetMaps 可能有这些数据。谷歌地图有这些数据,但检查使用条款,不允许从他们的 API 存储坐标(并且不能在非谷歌地图上显示)或者至少不是我上次检查的。
  • 谢谢,有没有例子告诉我如何实现这一点?使用 OpenStreetMaps 或 Google Roads or Directions API..谢谢
  • 您打算在 Google 地图、OpenStreetMaps 或其他地方显示这些 KML 文件吗?
  • 谷歌地球,谢谢

标签: kml


【解决方案1】:

我能够如下查询 Google Roads API 并解析 json 响应并将多几何图形添加到 KML 文件以及生成的坐标

        string url = @"https://roads.googleapis.com/v1/snapToRoads?path=" + beginLat + "," + beginLon + "|" + endLat + "," + endLon + "&interpolate=true&key=";
        System.Net.WebRequest request = System.Net.WebRequest.Create(url);
        System.Net.WebResponse response = request.GetResponse();
        System.IO.Stream data = response.GetResponseStream();
        System.IO.StreamReader reader = new System.IO.StreamReader(data);
        string responseFromServer = reader.ReadToEnd();
        response.Close();

这里是 json 解析器代码。坐标位于数据集中的“位置”表中。

            jsonString = $"{{ \"snappedPoints\": {{{jsonString.Trim().TrimStart('{').TrimEnd('}')}}} }}";
            var xd = JsonConvert.DeserializeXmlNode(jsonString);
            var result = new DataSet();
            result.ReadXml(new XmlNodeReader(xd), mode);
            return result;

感谢大家的帮助并为我指明正确的方向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 2013-12-30
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多