- package osm.jp.api;
-
- import java.util.ArrayList;
- import org.w3c.dom.Node;
-
- /**
- * OSM.xml の「Area(way)」ノード
- * 例)
- * <pre>{@code
- * <node id="5645448449" lat="35.7506438" lon="139.7516866"/>
- * <node id="5645448450" lat="35.7507261" lon="139.7516913"/>
- * <node id="5645448451" lat="35.7507196" lon="139.7518665"/>
- * <node id="5645448452" lat="35.7506374" lon="139.7518619"/>
- * <node id="289445748" lat="35.5251815" lon="139.3256576">
- * <tag k="amenity" v="fuel"/>
- * <tag k="brand" v="出光"/>
- * <tag k="name" v="出光"/>
- * <tag k="name:en" v="Idemitsu"/>
- * <tag k="opening_hours" v="24/7"/>
- * </node>
- * <way id="591327850">
- * <nd ref="5645448449"/>
- * <nd ref="5645448450"/>
- * <nd ref="5645448451"/>
- * <nd ref="5645448452"/>
- * <nd ref="5645448449"/>
- * <tag k="amenity" v="fuel"/>
- * <tag k="name" v="Mobil"/>
- * <tag k="name:ja" v="モービル"/>
- * </way>
- * }</pre>
- *
- * @author yuu
- */
- public class OsmnodeArea extends OsmnodeNode {
- ArrayList<OsmnodeNd> ndList = new ArrayList<>();
-
- public OsmnodeArea(Node node) {
- super(node);
-
- Node ndNode = node.getFirstChild();
- while(ndNode != null) {
- String nodeName = ndNode.getNodeName();
- switch (nodeName) {
- case "nd":
- OsmnodeNd nodeNd = new OsmnodeNd(ndNode);
- ndList.add(nodeNd);
- break;
- }
- ndNode = ndNode.getNextSibling();
- }
- }
-
- public void setPosition(ArrayList<OsmnodeNode> nodelist) {
- int size = 0;
- double lat = 0.0D;
- double lon = 0.0D;
- for (OsmnodeNd nd : ndList) {
- OsmnodeNode node1 = getNode(nodelist, nd.ref);
- if (node1 != null) {
- lat += Double.parseDouble(node1.latStr);
- lon += Double.parseDouble(node1.lonStr);
- size++;
- }
- }
- lat = lat / size;
- lon = lon / size;
- this.latStr = String.format("%2.5f", lat);
- this.lonStr = String.format("%3.5f", lon);
- }
-
- static OsmnodeNode getNode(ArrayList<OsmnodeNode> nodelist, String id) {
- for (OsmnodeNode node : nodelist) {
- if (node.id.equals(id)) {
- return node;
- }
- }
- return null;
- }
-
- }