Newer
Older
task-bldg / src / main / java / osm / surveyor / task / util / JsonGeometryLine.java
  1. package osm.surveyor.task.util;
  2.  
  3. import java.math.BigDecimal;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6.  
  7. import com.fasterxml.jackson.databind.JsonNode;
  8.  
  9. import lombok.Getter;
  10. import lombok.Setter;
  11.  
  12. @Getter
  13. @Setter
  14. public class JsonGeometryLine extends JsonTemple {
  15. /**
  16. * {
  17. * "coordinates":[
  18. * [141.35,42.9],
  19. * [141.36249999999998,42.9],
  20. * [141.36249999999998,42.90833333333333],
  21. * [141.35,42.90833333333333],
  22. * [141.35,42.9]
  23. * ],
  24. * "type":"LineString"
  25. * }
  26. */
  27.  
  28. private List<Point> coordinates;
  29. private String type = "LineString";
  30. public String toString() {
  31. StringBuffer sb = new StringBuffer();
  32. boolean first = false;
  33. sb.append("{");
  34. if (coordinates != null) {
  35. first = true;
  36. boolean c1 = false;
  37. sb.append("\"coordinates\":[");
  38. for (JsonNumberArray arry : coordinates) {
  39. c1 = out(c1, sb, null, arry);
  40. }
  41. sb.append("]");
  42. }
  43. if (type != null) {
  44. first = outStr(first, sb, "type", getType());
  45. }
  46. sb.append("}");
  47. return sb.toString();
  48. }
  49. public void parse(JsonNode node) {
  50. JsonNode node1 = node.get("type");
  51. if (node1 != null) {
  52. this.type = node1.textValue();
  53. }
  54. node1 = node.get("coordinates");
  55. if (node1 != null) {
  56. this.coordinates = new ArrayList<Point>();
  57. for (JsonNode node2 : node1) {
  58. Point point = new Point();
  59. point.parse(node2);
  60. this.coordinates.add(point);
  61. }
  62. }
  63. }
  64. /**
  65. * このラインの中心点を取得する
  66. * 各ラインの頂点の最大最小値の中間
  67. */
  68. public Point getCenter() {
  69. if (coordinates == null) {
  70. return null;
  71. }
  72. double maxlng = -180.0;
  73. double maxlat = -90.0;
  74. double minlng = 180.0;
  75. double minlat = 90.0;
  76. for (JsonNumberArray arry : coordinates) {
  77. boolean first = true;
  78. List<String> lnglat = arry.getList();
  79. for (String str : lnglat) {
  80. double dd = Double.parseDouble(str);
  81. if (first) {
  82. if (maxlng < dd) {
  83. maxlng = dd;
  84. }
  85. if (minlng > dd) {
  86. minlng = dd;
  87. }
  88. first = false;
  89. }
  90. else {
  91. if (maxlat < dd) {
  92. maxlat = dd;
  93. }
  94. if (minlat > dd) {
  95. minlat = dd;
  96. }
  97. }
  98. }
  99. }
  100. double lng = (minlng + maxlng) / 2;
  101. double lat = (minlat + maxlat) / 2;
  102.  
  103. Point point = new Point();
  104. point.setLat(BigDecimal.valueOf(lat));
  105. point.setLng(BigDecimal.valueOf(lng));
  106. return point;
  107. }
  108. }