Newer
Older
osmCoverage / src / osm / jp / api / OsmnodeArea.java
@hayashi hayashi on 30 May 2018 2 KB OverpassAPI
  1. package osm.jp.api;
  2.  
  3. import java.util.ArrayList;
  4. import org.w3c.dom.Node;
  5.  
  6. /**
  7. * OSM.xml の「Area(way)」ノード
  8. * 例)
  9. * <pre>{@code
  10. * <node id="5645448449" lat="35.7506438" lon="139.7516866"/>
  11. * <node id="5645448450" lat="35.7507261" lon="139.7516913"/>
  12. * <node id="5645448451" lat="35.7507196" lon="139.7518665"/>
  13. * <node id="5645448452" lat="35.7506374" lon="139.7518619"/>
  14. * <node id="289445748" lat="35.5251815" lon="139.3256576">
  15. * <tag k="amenity" v="fuel"/>
  16. * <tag k="brand" v="出光"/>
  17. * <tag k="name" v="出光"/>
  18. * <tag k="name:en" v="Idemitsu"/>
  19. * <tag k="opening_hours" v="24/7"/>
  20. * </node>
  21. * <way id="591327850">
  22. * <nd ref="5645448449"/>
  23. * <nd ref="5645448450"/>
  24. * <nd ref="5645448451"/>
  25. * <nd ref="5645448452"/>
  26. * <nd ref="5645448449"/>
  27. * <tag k="amenity" v="fuel"/>
  28. * <tag k="name" v="Mobil"/>
  29. * <tag k="name:ja" v="モービル"/>
  30. * </way>
  31. * }</pre>
  32. *
  33. * @author yuu
  34. */
  35. public class OsmnodeArea extends OsmnodeNode {
  36. ArrayList<OsmnodeNd> ndList = new ArrayList<>();
  37. public OsmnodeArea(Node node) {
  38. super(node);
  39.  
  40. Node ndNode = node.getFirstChild();
  41. while(ndNode != null) {
  42. String nodeName = ndNode.getNodeName();
  43. switch (nodeName) {
  44. case "nd":
  45. OsmnodeNd nodeNd = new OsmnodeNd(ndNode);
  46. ndList.add(nodeNd);
  47. break;
  48. }
  49. ndNode = ndNode.getNextSibling();
  50. }
  51. }
  52. public void setPosition(ArrayList<OsmnodeNode> nodelist) {
  53. int size = 0;
  54. double lat = 0.0D;
  55. double lon = 0.0D;
  56. for (OsmnodeNd nd : ndList) {
  57. OsmnodeNode node1 = getNode(nodelist, nd.ref);
  58. if (node1 != null) {
  59. lat += Double.parseDouble(node1.latStr);
  60. lon += Double.parseDouble(node1.lonStr);
  61. size++;
  62. }
  63. }
  64. lat = lat / size;
  65. lon = lon / size;
  66. this.latStr = String.format("%2.5f", lat);
  67. this.lonStr = String.format("%3.5f", lon);
  68. }
  69. static OsmnodeNode getNode(ArrayList<OsmnodeNode> nodelist, String id) {
  70. for (OsmnodeNode node : nodelist) {
  71. if (node.id.equals(id)) {
  72. return node;
  73. }
  74. }
  75. return null;
  76. }
  77.  
  78. }