1 package net.systemeD.potlatch2.utils {
3 import net.systemeD.halcyon.Map;
4 import net.systemeD.halcyon.connection.*;
5 import net.systemeD.potlatch2.tools.Simplify;
7 public class OsmImporter extends Importer {
9 public function OsmImporter(connection:Connection, map:Map, filenames:Array, callback:Function=null, simplify:Boolean=false) {
10 super(connection,map,filenames,callback,simplify);
13 override protected function doImport(push:Function):void {
14 var map:XML = new XML(files[0]);
20 var nodemap:Object={};
22 var relationmap:Object={};
24 for each(data in map.node) {
25 oldid = Number(data.@id);
26 nodemap[oldid] = connection.createNode(parseTags(data.tag), Number(data.@lat), Number(data.@lon), push);
29 for each(data in map.way) {
30 oldid = Number(data.@id);
32 for each(var nd:XML in data.nd) { nodes.push(nodemap[Number(nd.@ref)]); }
33 waymap[oldid] = connection.createWay(parseTags(data.tag), nodes, push);
36 for each(data in map.relation) {
37 oldid = Number(data.@id);
38 var members:Array = [];
39 for each(var memberXML:XML in data.member) {
40 var type:String = memberXML.@type.toLowerCase();
41 var role:String = memberXML.@role;
42 var memberID:Number = Number(memberXML.@ref);
43 var member:Entity = null;
44 switch (memberXML.@type.toLowerCase()) {
45 case 'node': member=nodemap[memberID]; break;
46 case 'way': member=waymap[memberID]; break;
47 case 'relation': break; // ** TODO - cope with evil nested relations
49 if (member!=null) { members.push(new RelationMember(member,role)); }
51 relationmap[oldid] = connection.createRelation(parseTags(data.tag), members, push);
55 private function parseTags(tagElements:XMLList):Object {
57 for each (var tagEl:XML in tagElements)
58 tags[tagEl.@k] = tagEl.@v;