Как создать ответ KML с циклом? - PullRequest
0 голосов
/ 02 ноября 2019

У меня проблема с зацикливанием kml и отображением его в ответе на Swagger / Postman.

Я пытался использовать sharpKML Nuget, чтобы преобразовать его в KML, но данные показывают только один, и данные не совпадают с моими ожиданиями.

Это мой код для создания цикла результата KML иизвлеките его в контроллер:

public static async Task<object> ExecuteTest(string query)
{
    string connStrResult = 
        ConfigurationManager.ConnectionStrings["PostGresConnection"].ConnectionString;
    NpgsqlConnection connection;
    NpgsqlCommand command;
    NpgsqlDataReader reader;

    List<PointMaster> master = new List<PointMaster>();
    connection = new NpgsqlConnection(connStrResult);
    connection.Open();
    command = new NpgsqlCommand(query, connection);
    reader = command.ExecuteReader();

    var kml = new Kml();
    var placemarks = new Placemark();
    var points = new Point();

    while (await reader.ReadAsync())
    {
        PointMaster point = new PointMaster
        {
            point_id        = (string)reader["point_id"],
            point_type      = (string)reader["point_type"],
            sp_geometry     = (PostgisPoint)(reader["sp_geometry"]),
            msid            = (int)reader["msid"],       
        };

        points = new Point();
        points.Coordinate = new Vector(point.sp_geometry.Y, point.sp_geometry.X);
        placemarks = new Placemark();
        placemarks.Name = point.point_type.ToString();
        placemarks.Geometry = points;
        kml.Feature = placemarks;    
    }

    Serializer serializer = new Serializer();
    serializer.Serialize(kml);

    return serializer.Xml;
}

, и это мой контроллер для получения данных возврата из кода выше:

public class TestController : ApiController
{
    [HttpGet]
    [EnableCors("*", "*", "*")]
    public async Task<IHttpActionResult> Get()
    {
        var result = await PostgreDataAccess.ExecuteTest(
            string.Format("select * from vw_tbl_point_master limit 3"));
        return Ok(result);   
    }
}

ожидаемый результат для этого кода, так как я зацикливаю данныеи вернуть его в ответ KML, или как лучше всего создать результат KML в веб-API

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document id="root_doc">
<Schema name="Download_Spasial_Kabel" id="Download_Spasial_Kabel">
    <SimpleField name="msid" type="int"></SimpleField>
    <SimpleField name="point_id" type="string"></SimpleField>
    <SimpleField name="point_type" type="string"></SimpleField>
</Schema>
<Folder><name>Download_Spasial_Kabel</name>
  <Placemark>
    <Style><LineStyle><color>ff0000ff</color></LineStyle><PolyStyle><fill>0</fill></PolyStyle></Style>
    <ExtendedData><SchemaData schemaUrl="#Download_Spasial_Kabel">
        <SimpleData name="msid">17191</SixmpleData>
        <SimpleData name="point_id">CAB0001117191</SixmpleData>
        <SimpleData name="point_type">A</SixmpleData>
    </SchemaData></ExtendedData>
      <LineString><coordinates>115.210146853828,-8.71815797576044 115.21115</coordinates></LineString>
  </Placemark>
  <Placemark>
    </Placemark>
  </Folder>
</Document>
</kml>
...