⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 awmlreader.java

📁 linux下用于移动节点的移动活动生成工具
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            org.w3c.dom.Node n = roadRun_node.getFirstChild();
            if (n!=null)
            {
                String s = n.getNodeValue();
                shapes = processGeometry(s);
            }
        }

        // create elements
        java.util.ArrayList loc_elements = new java.util.ArrayList();
        if ((shapes!=null)&&(shapes.size()>0))
        {
          for (int i=0; i<shapes.size(); i++)
          {
            SpatialModelElement element = new SpatialModelElement(id+'.'+i, "41", "10", (GeometryElement)shapes.get(i));
            loc_elements.add(element);
          }
        }
        else
        {
          SpatialModelElement element = new SpatialModelElement(id, "41", "10", null);
          loc_elements.add(element);          
        }

        // process attributes

        // add "Official Name"
        org.w3c.dom.Element name_node = (org.w3c.dom.Element)e.getElementsByTagName("name").item(0);
        if (name_node!=null)
        {
            org.w3c.dom.Node n = name_node.getFirstChild();
            if (n!=null)
            {
                String s = n.getNodeValue();
                
                for (int i=0; i<loc_elements.size(); i++)
                  ((SpatialModelElement)loc_elements.get(i)).getAttributes().put("ON", s);
            }
        }
        
        // add localy created elements
        elements.addAll(loc_elements);
    }
    
    /**
     * Normalizes the coordinates of loaded elements
     */
    protected void normalizeElements()
    {
      java.util.Iterator iter = elements.iterator();
      while (iter.hasNext())
      {
        SpatialModelElement element = (SpatialModelElement)iter.next();
        
        // scale the element's geometry
        java.util.ArrayList points = ((Polyline)element.getGeometry()).getPoints();
        for (int i=0; i<points.size(); i++)
        {
          Point point = (Point)points.get(i);
          Point norm_point = new Point(point.getPosition().getX()-min_x, point.getPosition().getY()-min_y);          

          points.set(i, norm_point);
        }
      }
    }
    
    /**
     * Adds the loaded elements to Spatial Model
     */
    protected void addElements()
    {
      // add elements to Spatial Model
      java.util.Iterator iter = elements.iterator();
      while (iter.hasNext())
      {
        SpatialModelElement element = (SpatialModelElement)iter.next();
        
        // clip
        if (clipArea!=null)
        {
          clip(element);
          if (((Polyline)element.getGeometry()).getPoints().size()>0)
            spatialModel.getElements().put(element.getID(), element);
        }
        else
          spatialModel.getElements().put(element.getID(), element);
      }
    }
    
    /**
     * Loads AWML data from the source stream
     */
    protected void doLoad() throws Exception
    {
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      DocumentBuilder builder = factory.newDocumentBuilder();

      org.w3c.dom.Document document = builder.parse(new java.io.FileInputStream(fileSource));

      org.w3c.dom.Element root=document.getDocumentElement();

      String rootTag=root.getNodeName();
      if (!rootTag.equals("awml"))
        throw new Exception("Invalid parent tag: "+rootTag);

      // process the nexus objects
      org.w3c.dom.NodeList obj_list = root.getElementsByTagName("nexusobject");
      for (int i=0; i<obj_list.getLength(); i++)
      {
        org.w3c.dom.Element object = (org.w3c.dom.Element)obj_list.item(i);
        String type = object.getAttribute("type");
        String kind = object.getAttribute("kind");

        if (kind.equalsIgnoreCase("real"))
        {
          if (type.equalsIgnoreCase("building"))
            processBuilding(object);
          else
          if (type.equalsIgnoreCase("road"))
            processRoad(object);
          else
            u.sendNotification(new LoaderNotification(this, u, "Unknown type of object: "+type));
        }
      }
    }

    /**
     * Clips the Element. <br>
     * <br>
     * @param elem element to clip
     */
    protected void clip(SpatialModelElement elem)
    {
      java.util.ArrayList points = ((Polyline)elem.getGeometry()).getPoints();
      java.util.ArrayList resPoints = new java.util.ArrayList();

      // iterate all points
      boolean flag = true;
      for (int i=0; i<points.size(); i++)
      {
        Point point = (Point)points.get(i);
        if (clipArea.contains(point))
        {
          if (flag)
            resPoints.add(point);
          else
          {
            // do clipping
            Line tempLine = new Line((Point)points.get(i-1), point);

            // add clipping point
            for (int j=0; j<clipArea.getPoints().size(); j++)
            {
              Line boundLine = new Line((Point)clipArea.getPoints().get(j),
                (Point)clipArea.getPoints().get((j+1)%clipArea.getPoints().size()));
              Point p = tempLine.intersect(boundLine);
              if (p!=null)
              {
                resPoints.add(p);
                break;
              }
            }

            // add point
            resPoints.add(point);
          }

          flag = true;
        }
        else
        {
          if ((flag)&&(i>0))
          {
            // do clipping
            Line tempLine = new Line((Point)points.get(i-1), point);

            // add clipping point
            for (int j=0; j<clipArea.getPoints().size(); j++)
            {
              Line boundLine = new Line((Point)clipArea.getPoints().get(j),
                (Point)clipArea.getPoints().get((j+1)%clipArea.getPoints().size()));
              Point p = tempLine.intersect(boundLine);
              if (p!=null)
              {
                resPoints.add(p);
                break;
              }
            }
          }

          flag = false;
        }
      }

      points.clear();
      points.addAll(resPoints);
    }

    /**
     * Initializes the object from XML tag. <br>
     * <br>
     * @param element source tag
     * @throws Exception Exception if parameters are invalid
     */
    public void load(org.w3c.dom.Element element) throws Exception
    {
      u.sendNotification(new LoaderNotification(this, u, "Loading AWMLReader extension"));

      super.load(element);

      spatialModel = (SpatialModel)u.getExtension("SpatialModel");

      String s;

      float min_x_clip = Float.NaN, max_x_clip = Float.NaN,
            min_y_clip = Float.NaN, max_y_clip = Float.NaN;

      s = element.getAttribute("min_x");
      if(s.length()>0)
        min_x_clip = Float.parseFloat(s);

      s = element.getAttribute("max_x");
      if(s.length()>0)
        max_x_clip = Float.parseFloat(s);

      s = element.getAttribute("min_y");
      if(s.length()>0)
        min_y_clip = Float.parseFloat(s);

      s = element.getAttribute("max_y");
      if(s.length()>0)
        max_y_clip = Float.parseFloat(s);

      if ( Float.isNaN(min_x_clip)&&Float.isNaN(max_x_clip)
         &&Float.isNaN(min_y_clip)&&Float.isNaN(max_y_clip) )
      {
      }
      else
      {
        if ( (Float.isNaN(min_x_clip)||Float.isNaN(max_x_clip)
              ||Float.isNaN(min_y_clip)||Float.isNaN(max_y_clip))
              ||((min_x_clip>=max_x_clip)||(min_y_clip>=max_y_clip)) )
            throw new Exception("Invalid clip region");

        clipArea = new Polygon();
        clipArea.getPoints().add(new Point(min_x_clip, min_y_clip));
        clipArea.getPoints().add(new Point(max_x_clip, min_y_clip));
        clipArea.getPoints().add(new Point(max_x_clip, max_y_clip));
        clipArea.getPoints().add(new Point(min_x_clip, max_y_clip));
      }

      s = element.getAttribute("source");
      if(s.length()==0)
        throw new Exception("Invalid source name: "+s);

      fileSource = s;

      // prepare the converter, use wgs'84 by default
      Gdc_To_Utm_Converter.Init();

      doLoad();
      normalizeElements();
      addElements();
      
      u.sendNotification(new LoaderNotification(this, u, "Processed area dimensions:"));
      u.sendNotification(new LoaderNotification(this, u, "Min_x="+min_x+" Max_x="+max_x+" Min_y="+min_y+" Max_y="+max_y));      
      u.sendNotification(new LoaderNotification(this, u, "Min_lat="+min_lat+" Max_lat="+max_lat+" Min_lon="+min_lon+" Max_lon="+max_lon));
    
      spatialModel.rebuildGraph();

      u.sendNotification(new LoaderNotification(this, u, "Finished loading AWMLReader extension"));
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -