#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. Обновлено. Взгляните, надеюсь, вам поможет !.