Package chunmap.model.relate

Source Code of chunmap.model.relate.ComputeImFactory

/**
* Copyright (c) 2009-2011, chunquedong(YangJiandong)
*
* This file is part of ChunMap project
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE(Version >=3)
*
* History:
*     2010-05-05  Jed Young  Creation
*/
package chunmap.model.relate;

import chunmap.model.geom.AbstractGeometry;
import chunmap.model.geom.GeoPoint;
import chunmap.model.geom.Geometry;
import chunmap.model.geom.GeometryCollection;
import chunmap.model.geom.LineString;
import chunmap.model.geom.Polygon;
import chunmap.model.relate.relateop.LineString_LineString;
import chunmap.model.relate.relateop.LineString_Polygon;
import chunmap.model.relate.relateop.Multi2Multi;
import chunmap.model.relate.relateop.Point_LineString;
import chunmap.model.relate.relateop.Point_Point;
import chunmap.model.relate.relateop.Point_Polygon;
import chunmap.model.relate.relateop.Polygon_Polygon;

/**
* 计算九交矩阵工厂
* @author chunquedong
*
*/
public class ComputeImFactory {

  private static ComputeImFactory instance;

  private ComputeImFactory() {
  }

  public static ComputeImFactory getInstance() {
    if (instance == null) {
      instance = new ComputeImFactory();
    }
    return instance;
  }

  public ComputeIm getImComputer(Geometry g1, Geometry g2) {
    if (g1 instanceof GeoPoint) {
      GeoPoint p1 = (GeoPoint) g1;
      return pointTo(p1, g2);
    } else if (g1 instanceof LineString) {
      LineString l1 = (LineString) g1;
      return lineTo(l1, g2);

    } else if (g1 instanceof Polygon) {
      Polygon a1 = (Polygon) g1;
      return polygonTo(a1, g2);
    } else if (g1 instanceof GeometryCollection) {
      return multiTo(g1, g2);
    } else {
      throw new UnsupportedOperationException();
    }
  }

  public ComputeIm pointTo(GeoPoint p1, Geometry g2) {
    if (g2 instanceof GeoPoint) {
      GeoPoint p2 = (GeoPoint) g2;
      return new Point_Point(p1, p2);
    } else if (g2 instanceof LineString) {
      LineString l2 = (LineString) g2;
      return new Point_LineString(p1, l2);

    } else if (g2 instanceof Polygon) {
      Polygon a2 = (Polygon) g2;
      return new Point_Polygon(p1, a2);
    } else if (g2 instanceof GeometryCollection) {
      return multiTo(p1, g2);
    } else {
      throw new UnsupportedOperationException();
    }

  }

  public ComputeIm lineTo(LineString l1, Geometry g2) {
    if (g2 instanceof GeoPoint) {
      GeoPoint p2 = (GeoPoint) g2;
      return new Point_LineString(p2, l1).setReverse(true);
    } else if (g2 instanceof LineString) {
      LineString l2 = (LineString) g2;
      return new LineString_LineString(l1, l2);

    } else if (g2 instanceof Polygon) {
      Polygon a2 = (Polygon) g2;
      return new LineString_Polygon(l1, a2);
    } else if (g2 instanceof GeometryCollection) {
      return multiTo(l1, g2);
    } else {
      throw new UnsupportedOperationException();
    }
  }

  public ComputeIm polygonTo(Polygon a1, Geometry g2) {
    if (g2 instanceof GeoPoint) {
      GeoPoint p2 = (GeoPoint) g2;
      return new Point_Polygon(p2, a1).setReverse(true);
    } else if (g2 instanceof LineString) {
      LineString l2 = (LineString) g2;
      return new LineString_Polygon(l2, a1).setReverse(true);

    } else if (g2 instanceof Polygon) {
      Polygon a2 = (Polygon) g2;
      return new Polygon_Polygon(a1, a2);
    } else if (g2 instanceof GeometryCollection) {
      return multiTo(a1, g2);
    } else {
      throw new UnsupportedOperationException();
    }
  }

  public ComputeIm multiTo(Geometry g1, Geometry g2) {
    return new Multi2Multi(((AbstractGeometry)g1).toGeometryCollection()
        , ((AbstractGeometry)g2).toGeometryCollection());
  }
}
TOP

Related Classes of chunmap.model.relate.ComputeImFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.