Java не удается инициализировать классы для представления структуры GeoJSON

#java

#java

Вопрос:

Я пытаюсь инициализировать классы для представления структуры GeoJSON следующим образом:

 {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "ACCESS": "N",
        "TAG": "T",
        "CROSSINGTIMEHRS": 0,
        "COUNTRYCODE": "USA",
        "GROUPID": 699
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [[-0.426321,51.3882268],[-0.4183388,51.3946538],
                        [-0.4183388,51.3946538],[-0.415678,51.3982953],
                        [-0.415678,51.3982953],[-0.4083824,51.4049886]]
      }
    }
 }
 

Мои классы следующие:

Features.java

 public class Features {

    public String type;
    public Geometry geometry;
    public Properties properties;

    public Features() {
        this.type = "Feature";
        this.geometry = new Geometry();
        this.properties = new Properties();
    }
}
 

Geometry.java

 public class Geometry {

    public String type;
    public List<Coordinates> coordinates;

    public Geometry() {
        this.type = "LineString";
        this.coordinates = new ArrayList<>();
    }
}
 

Coordinates.java

 public class Coordinates {

    public double lat;
    public double lon;

    public Coordinates() {
        this.lat = 0.0;
        this.lon = 0.0;
    }
}
 

Properties.java

 public class Properties {

    public String ACCESS;
    public String TAG;
    public String COUNTRYCODE;
    public double CROSSINGTIMEHRS;
    public int GROUPID;

    public Properties() {
        this.ACCESS = "";
        this.TAG = "";
        this.COUNTRYCODE = "UK";
        this.CROSSINGTIMEHRS = 0.0;
        this.GROUPID = 0;
    }
}
 

При инициализации Features все правильно устанавливается на значения по умолчанию, за исключением latlongs, найденных в Coordinates/java

Features bridge = new Features(); дает:введите описание изображения здесь

Как видно, координаты имеют размер 0. Во время отладки я понял, что не вхожу в Coordinates конструктор, но не понимаю, почему.

Как я могу добавить значения по умолчанию для lat и long в список массива координат при инициализации?

Комментарии:

1. В вашем JSON coordinates представлено в виде матрицы двойных значений — я считаю, что это должен быть массив пар lat / lon, нет? например, «координаты»: [{«широта»: 1.2, «длина»: 3.4}, …].

2. В соответствии со GeoJSON стандартом tools.ietf.org/html/rfc7946#section-3.1.1 , координаты LineString представляют собой массив позиций, как указано выше. Если вы проверите страницу 5 документа, там есть пример.

Ответ №1:

В Geometry.java вы пишете this.coordinates = new ArrayList<>(); , что означает это.координаты new ArrayList<>() -> пустой список массивов.

 this.coordinates = new Coordinates();
 

загрузит lon / lat по умолчанию из Coordinates.java

 public class Geometry {

    public String type;
    public List<Coordinates> coordinates;

    public Geometry() {
        this.type = "LineString";
        this.coordinates = Lists.newArrayList(new Coordinates());
    }
}
 

Для Lists.newArrayList простого импорта com.google.common.collect.Lists;

Комментарии:

1. Спасибо за ваш ответ. Как будет преобразован объект типа Coordinates List<Coordinates> ? Это приведет к ошибке несовместимых типов.

2. Обновлено. Взгляните, надеюсь, вам поможет !.