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;
}
}