使 KML LineString 跟随道路

Make KML LineString follow roads

我正在处理一个包含两个坐标的 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 与道路上的黄线类似。我查看了方向 API,但找不到更好的方法。

我能够如下查询 Google 道路 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 解析器代码。坐标位于数据集内的“位置”table 内。

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

谢谢大家的帮助,为我指明了正确的方向。