- package osm.surveyor.task.util;
-
- import java.math.BigDecimal;
- import java.util.ArrayList;
- import java.util.List;
-
- import com.fasterxml.jackson.databind.JsonNode;
-
- import lombok.Getter;
- import lombok.Setter;
-
- @Getter
- @Setter
- public class JsonGeometryLine extends JsonTemple {
-
- /**
- * {
- * "coordinates":[
- * [141.35,42.9],
- * [141.36249999999998,42.9],
- * [141.36249999999998,42.90833333333333],
- * [141.35,42.90833333333333],
- * [141.35,42.9]
- * ],
- * "type":"LineString"
- * }
- */
-
- private List<Point> coordinates;
-
- private String type = "LineString";
-
- public String toString() {
- StringBuffer sb = new StringBuffer();
- boolean first = false;
- sb.append("{");
- if (coordinates != null) {
- first = true;
- boolean c1 = false;
- sb.append("\"coordinates\":[");
- for (JsonNumberArray arry : coordinates) {
- c1 = out(c1, sb, null, arry);
- }
- sb.append("]");
- }
- if (type != null) {
- first = outStr(first, sb, "type", getType());
- }
- sb.append("}");
- return sb.toString();
- }
-
- public void parse(JsonNode node) {
- JsonNode node1 = node.get("type");
- if (node1 != null) {
- this.type = node1.textValue();
- }
-
- node1 = node.get("coordinates");
- if (node1 != null) {
- this.coordinates = new ArrayList<Point>();
- for (JsonNode node2 : node1) {
- Point point = new Point();
- point.parse(node2);
- this.coordinates.add(point);
- }
- }
- }
-
- /**
- * このラインの中心点を取得する
- * 各ラインの頂点の最大最小値の中間
- */
- public Point getCenter() {
- if (coordinates == null) {
- return null;
- }
- double maxlng = -180.0;
- double maxlat = -90.0;
- double minlng = 180.0;
- double minlat = 90.0;
- for (JsonNumberArray arry : coordinates) {
- boolean first = true;
- List<String> lnglat = arry.getList();
- for (String str : lnglat) {
- double dd = Double.parseDouble(str);
- if (first) {
- if (maxlng < dd) {
- maxlng = dd;
- }
- if (minlng > dd) {
- minlng = dd;
- }
- first = false;
- }
- else {
- if (maxlat < dd) {
- maxlat = dd;
- }
- if (minlat > dd) {
- minlat = dd;
- }
- }
- }
- }
- double lng = (minlng + maxlng) / 2;
- double lat = (minlat + maxlat) / 2;
-
- Point point = new Point();
- point.setLat(BigDecimal.valueOf(lat));
- point.setLng(BigDecimal.valueOf(lng));
- return point;
- }
- }