Формат GeoJson основан на IEnumerable <Users> - PullRequest
0 голосов
/ 01 июля 2019

У меня работает базовый API, я могу хранить данные и получать данные как обычно.Однако у меня возникли проблемы с форматированием моего контента.Я могу получить список всех моих пользователей с помощью HTTPGet, и это выглядит так ...

[
    {
        "userId": "1                           ",
        "geoHash": "123456789",
        "latitude": 1.234,
        "longitude": 5.689,
        "locationDate": "2019-07-01T00:00:00"

    },
    {
        "userId": "2                           ",
        "geoHash": "123456789",
        "latitude": 1.234,
        "longitude": 5.689,
    "locationDate": "2019-07-01T00:00:00"

    },
    {
        "userId": "3                           ",
        "geoHash": "123456789",
        "latitude": 1.234,
        "longitude": 5.689,
    "locationDate": "2019-07-01T00:00:00"

    }
]

Однако я понятия не имею, как я могу превратить это в GeoJson (https://geojson.org/) это выглядит так ...

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}

И это основа того, как я получаю свой список пользователей

        [HttpGet]
        public IEnumerable<Users> GetUsers()
        {
            return _context.Users;
        }

Я искал часы и контент вокруг этогоМне кажется, что этот предмет несколько сбивает с толку, я был бы очень признателен за помощь.

1 Ответ

0 голосов
/ 01 июля 2019

Редактировать: хотя вопрос содержит пользовательские данные как Json, в комментариях теперь указывается, что они содержатся в IEnumerable<Users>.В приведенном ниже коде предполагается, что имена свойств этих значений такие же, как показано в Json.

Вам необходимо «проецировать» пользовательские данные как GeoJson, самый простой способ - это использовать анонимный тип, затемсериализуйте его: это создает действительный GeoJson в соответствии с этим линтером .

    var users = GetUsers();

    var userGeo = users.Select(u => new
        {
            type = "Feature",
            geometry = new
            {
                type = "Point",
                coordinates = new double[] { u.longitude, u.latitude }
            },
            properties = new {
                name = "User " + u.userId.Trim()
            }
        }
    );

    var featureCollection = new {
        type = "FeatureCollection",
        features = userGeo
    };

    var geoJson = JsonConvert.SerializeObject(featureCollection, Formatting.Indented);

Вывод:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          5.689,
          1.234
        ]
      },
      "properties": {
        "name": "User 1"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          5.689,
          1.234
        ]
      },
      "properties": {
        "name": "User 2"
      }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          5.689,
          1.234
        ]
      },
      "properties": {
        "name": "User 3"
      }
    }
  ]
}
...