com.vividsolutions.jts.geom.Polygon类的使用及代码示例

x33g5p2x  于2022-01-26 转载在 其他  
字(15.0k)|赞(0)|评价(0)|浏览(169)

本文整理了Java中com.vividsolutions.jts.geom.Polygon类的一些代码示例,展示了Polygon类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。Polygon类的具体详情如下:
包路径:com.vividsolutions.jts.geom.Polygon
类名称:Polygon

Polygon介绍

[英]Represents a polygon with linear edges, which may include holes. The outer boundary (shell) and inner boundaries (holes) of the polygon are represented by LinearRings. The boundary rings of the polygon may have any orientation. Polygons are closed, simple geometries by definition.

The polygon model conforms to the assertions specified in the OpenGIS Simple Features Specification for SQL.

A Polygon is topologically valid if and only if:

  • the coordinates which define it are valid coordinates
  • the linear rings for the shell and holes are valid (i.e. are closed and do not self-intersect)
  • holes touch the shell or another hole at at most one point (which implies that the rings of the shell and holes must not cross)
  • the interior of the polygon is connected, or equivalently no sequence of touching holes makes the interior of the polygon disconnected (i.e. effectively split the polygon into two pieces).
    [中]表示具有线性边(可能包括孔)的多边形。多边形的外边界(壳)和内边界(孔)由线性毛刺表示。多边形的边界环可以有任何方向。多边形是封闭的、简单的几何体。
    多边形模型符合OpenGIS Simple Features Specification for SQL中指定的断言。
    当且仅当满足以下条件时,Polygon在拓扑上有效:
    *定义它的坐标是有效坐标
    *壳体和孔的线性环有效(即闭合且不自相交)
    *孔最多在一个点接触壳体或另一个孔(这意味着壳体环和孔不得交叉)
    *多边形的内部是连接的,或者等效地,没有一系列接触孔会使多边形的内部断开(即,有效地将多边形分割为两部分)。

代码示例

代码示例来源:origin: opentripplanner/OpenTripPlanner

private Ring toRing(Polygon polygon, HashMap<Coordinate, OSMNode> nodeMap) {
  List<OSMNode> shell = new ArrayList<OSMNode>();
  for (Coordinate coord : polygon.getExteriorRing().getCoordinates()) {
    OSMNode node = nodeMap.get(coord);
    if (node == null) {
      throw new RingConstructionException();
    }
    shell.add(node);
  }
  Ring ring = new Ring(shell, true);
  // now the holes
  for (int i = 0; i < polygon.getNumInteriorRing(); ++i) {
    LineString interior = polygon.getInteriorRingN(i);
    List<OSMNode> hole = new ArrayList<OSMNode>();
    for (Coordinate coord : interior.getCoordinates()) {
      OSMNode node = nodeMap.get(coord);
      if (node == null) {
        throw new RingConstructionException();
      }
      hole.add(node);
    }
    ring.holes.add(new Ring(hole, true));
  }
  return ring;
}

代码示例来源:origin: opentripplanner/OpenTripPlanner

LineString merge = (LineString)lineMerger.getMergedLineStrings().iterator().next();
if (merge.isRing()) {
  LinearRing lr = new LinearRing(merge.getCoordinateSequence(), this.geomFactory);
  Polygon concaveHull = new Polygon(lr, null, this.geomFactory);
  return concaveHull;

代码示例来源:origin: Impetus/Kundera

@Override
  public Coordinate[] getCoordinates()
  {
    com.vividsolutions.jts.geom.Coordinate[] coordinates = super.getCoordinates();

    Coordinate[] cs = new Coordinate[coordinates.length];

    int count = 0;
    for (com.vividsolutions.jts.geom.Coordinate c : coordinates)
    {
      cs[count++] = new Coordinate(c);
    }

    return cs;
  }
}

代码示例来源:origin: osmandapp/Osmand

private static FeatureStats polyStats(Geometry geom) {
  final FeatureStats featureStats = new FeatureStats();
  for(int i = 0; i < geom.getNumGeometries(); ++i) {
    final Polygon nextPoly = (Polygon) geom.getGeometryN(i);
    // Stats: exterior ring
    final LineString exteriorRing = nextPoly.getExteriorRing();
    featureStats.totalPts += exteriorRing.getNumPoints();
    featureStats.repeatedPts += checkRepeatedPoints2d(exteriorRing);
    // Stats: interior rings
    for(int ringIndex = 0; ringIndex < nextPoly.getNumInteriorRing(); ++ringIndex) {
      final LineString nextInteriorRing = nextPoly.getInteriorRingN(ringIndex);
      featureStats.totalPts += nextInteriorRing.getNumPoints();
      featureStats.repeatedPts += checkRepeatedPoints2d(nextInteriorRing);
    }
  }
  return featureStats;
}

代码示例来源:origin: opentripplanner/OpenTripPlanner

holes.add(ring);
else
  shells.add(geomFactory.createPolygon(ring));
shell.setUserData(new ArrayList<LinearRing>());
    if (shell.contains(hole)) {
      ((List<LinearRing>) shell.getUserData()).add(hole);
      break outer;
List<LinearRing> shellHoles = ((List<LinearRing>) shell.getUserData());
punched.add(geomFactory.createPolygon((LinearRing) (shell.getExteriorRing()),
    shellHoles.toArray(new LinearRing[shellHoles.size()])));

代码示例来源:origin: org.geotools/gt2-shapefile

multi = (MultiPolygon) geometry;
} else {
 multi = geometryFactory.createMultiPolygon(new Polygon[] { (Polygon) geometry });
buffer.putDouble(box.getMinX());
buffer.putDouble(box.getMinY());
buffer.putDouble(box.getMaxX());
buffer.putDouble(box.getMaxY());
 Polygon p;
 p = (Polygon) multi.getGeometryN(t);
 nrings = nrings + 1 + p.getNumInteriorRing();
 Polygon p;
 p = (Polygon) multi.getGeometryN(t);
 pointsPerRing[u] = p.getExteriorRing().getNumPoints();
 u++;
 for (int v = 0; v < p.getNumInteriorRing(); v++) {
  pointsPerRing[u] = p.getInteriorRingN(v).getNumPoints();
  u++;

代码示例来源:origin: org.orbisgis/h2gis

private Collection<Geometry> restoreDim4(Collection<Geometry> geoms, Map<Coordinate, Double> map) {
  GeometryFactory factory = new GeometryFactory(
      new PackedCoordinateSequenceFactory(PackedCoordinateSequenceFactory.DOUBLE, 4));
  Collection<Geometry> result = new ArrayList<>();
  for (Geometry geom : geoms) {
    if (geom instanceof Point) {
      result.add(factory.createPoint(restoreDim4(
          ((Point) geom).getCoordinateSequence(), map)));
    } else if (geom instanceof LineString) {
      result.add(factory.createLineString(restoreDim4(
          ((LineString) geom).getCoordinateSequence(), map)));
    } else if (geom instanceof Polygon) {
      LinearRing outer = factory.createLinearRing(restoreDim4(
          ((Polygon) geom).getExteriorRing().getCoordinateSequence(), map));
      LinearRing[] inner = new LinearRing[((Polygon) geom).getNumInteriorRing()];
      for (int i = 0; i < ((Polygon) geom).getNumInteriorRing(); i++) {
        inner[i] = factory.createLinearRing(restoreDim4(
            ((Polygon) geom).getInteriorRingN(i).getCoordinateSequence(), map));
      }
      result.add(factory.createPolygon(outer, inner));
    } else {
      for (int i = 0; i < geom.getNumGeometries(); i++) {
        result.addAll(restoreDim4(Collections.singleton(geom.getGeometryN(i)), map));
      }
    }
  }
  return result;
}

代码示例来源:origin: DataSystemsLab/GeoSpark

public Polygon call(T spatialObject)
  {
    Double x1, x2, y1, y2;
    LinearRing linear;
    Coordinate[] coordinates = new Coordinate[5];
    GeometryFactory fact = new GeometryFactory();
    final Envelope envelope = spatialObject.getEnvelopeInternal();
    x1 = envelope.getMinX();
    x2 = envelope.getMaxX();
    y1 = envelope.getMinY();
    y2 = envelope.getMaxY();
    coordinates[0] = new Coordinate(x1, y1);
    coordinates[1] = new Coordinate(x1, y2);
    coordinates[2] = new Coordinate(x2, y2);
    coordinates[3] = new Coordinate(x2, y1);
    coordinates[4] = coordinates[0];
    linear = fact.createLinearRing(coordinates);
    Polygon polygonObject = new Polygon(linear, null, fact);
    return polygonObject;
  }
});

代码示例来源:origin: DataSystemsLab/GeoSpark

GeometryFactory geometryfactory = new GeometryFactory();
ArrayList<Coordinate> coordinatesList = new ArrayList<Coordinate>();
LinearRing linear;
for (int i = 0; i < spatialObject.getCoordinates().length; i++) {
  Tuple2<Integer, Integer> pixelCoordinate = null;
  pixelCoordinate = FindOnePixelCoordinate(resolutionX, resolutionY, datasetBoundary, spatialObject.getCoordinates()[i], reverseSpatialCoordinate);
  coordinatesList.add(new Coordinate(pixelCoordinate._1, pixelCoordinate._2));
linear = geometryfactory.createLinearRing(coordinatesList.toArray(new Coordinate[coordinatesList.size()]));
Polygon polygon = new Polygon(linear, null, geometryfactory);
int minPixelX = (int) polygon.getEnvelopeInternal().getMinX();
int maxPixelX = (int) polygon.getEnvelopeInternal().getMaxX();
int minPixelY = (int) polygon.getEnvelopeInternal().getMinY();
int maxPixelY = (int) polygon.getEnvelopeInternal().getMaxY();
for (int j = minPixelY; j <= maxPixelY; j++) {
  for (int i = minPixelX; i <= maxPixelX; i++) {
    if (polygon.contains(geometryfactory.createPoint(new Coordinate(i, j)))) {
      try {
        Pixel newPixel = new Pixel(i, j, resolutionX, resolutionY);

代码示例来源:origin: org.integratedmodelling/klab-engine

GeometryFactory geoFactory = new GeometryFactory();
double x = envelope.getMinX() - edgeBuffer;
double y = envelope.getMinY() - edgeBuffer;
double w = envelope.getWidth() + edgeBuffer * 2;
double h = envelope.getHeight() + edgeBuffer * 2;
  for (int i = 0; i < geometry.getNumGeometries(); i++) {
    com.vividsolutions.jts.geom.Polygon poly = (com.vividsolutions.jts.geom.Polygon) geometry
        .getGeometryN(i);
    LinearRing lr = geoFactory.createLinearRing(poly.getExteriorRing().getCoordinates());
    com.vividsolutions.jts.geom.Polygon part = geoFactory.createPolygon(lr, null);
    drawGeometry(part, bounds, graphics, width, height, flags);
    for (int j = 0; j < poly.getNumInteriorRing(); j++) {
      lr = geoFactory.createLinearRing(poly.getInteriorRingN(j).getCoordinates());
      part = geoFactory.createPolygon(lr, null);
      drawGeometry(part, bounds, graphics, width, height, flags);

代码示例来源:origin: org.geotools/gt-coverage

/**
 * Returns the polygon surrounding the specified rectangle.
 * Code lifted from ArcGridDataSource (temporary).
 */
public static Polygon getPolygon(final Rectangle2D rect, final int srid) {
  final PrecisionModel  pm = new PrecisionModel();
  final GeometryFactory gf = new GeometryFactory(pm, srid);
  final Coordinate[] coord = new Coordinate[] {
    new Coordinate(rect.getMinX(), rect.getMinY()),
    new Coordinate(rect.getMaxX(), rect.getMinY()),
    new Coordinate(rect.getMaxX(), rect.getMaxY()),
    new Coordinate(rect.getMinX(), rect.getMaxY()),
    new Coordinate(rect.getMinX(), rect.getMinY())
  };
  final LinearRing ring = gf.createLinearRing(coord);
  return new Polygon(ring, null, gf);
}

代码示例来源:origin: org.orbisgis/orbisgis-core

/**
 * Removes duplicated coordinates within a Polygon.
 * @param poly 
 * @return
 */
public static Polygon removeDuplicateCoordinates(Polygon poly) {
    Coordinate[] shellCoords = CoordinateArrays.removeRepeatedPoints(poly.getExteriorRing().getCoordinates());
    LinearRing shell = FACTORY.createLinearRing(shellCoords);
    ArrayList<LinearRing> holes = new ArrayList<LinearRing>();
    for (int i = 0; i < poly.getNumInteriorRing(); i++) {
        Coordinate[] holeCoords = CoordinateArrays.removeRepeatedPoints(poly.getInteriorRingN(i).getCoordinates());
        holes.add(FACTORY.createLinearRing(holeCoords));
    }
    return FACTORY.createPolygon(shell, GeometryFactory.toLinearRingArray(holes));
}

代码示例来源:origin: org.geotools/gt-render

centroid = geom.getCentroid();
} catch (Exception e) {
    centroid = geom.getExteriorRing().getCentroid();
  } catch (Exception ee) {
    try {
      centroid = geom.getFactory().createPoint(geom.getCoordinate());
    } catch (Exception eee) {
      return false; // we're hooped
  Envelope env = geom.getEnvelopeInternal();
  double step = 5;
  int steps = (int) Math.round((env.getMaxX() - env.getMinX()) / step);
  Coordinate c = new Coordinate();
  Point pp = gf.createPoint(c);
  c.y = centroid.getY();
  int max = -1;
  int maxIdx = -1;
  int containCounter = -1;
  for (int i = 0; i < steps; i++) {
    c.x = env.getMinX() + step * i;
    pp.geometryChanged();
    if(!pg.contains(pp)) {
      containCounter = 0;
    pp.geometryChanged();
    centroid = pp;
  } else {

代码示例来源:origin: org.orbisgis/h2gis

/**
 * Reverse the polygon to be oriented clockwise
 * @param polygon
 * @return 
 */
private static Polygon extractFloor(final Polygon polygon) {
  GeometryFactory factory = polygon.getFactory();
  final LinearRing shell = factory.createLinearRing(getClockWise(
      polygon.getExteriorRing()).getCoordinates());
  final int nbOfHoles = polygon.getNumInteriorRing();
  final LinearRing[] holes = new LinearRing[nbOfHoles];
  for (int i = 0; i < nbOfHoles; i++) {
    holes[i] = factory.createLinearRing(getCounterClockWise(
        polygon.getInteriorRingN(i)).getCoordinates());
  }
  return factory.createPolygon(shell, holes);
}

代码示例来源:origin: DataSystemsLab/GeoSpark

throws Exception
GeometryFactory geometryFactory = new GeometryFactory();
List<Tuple2<Object, Double>> result = new ArrayList<Tuple2<Object, Double>>();
if (spatialObject instanceof Point) {
  if (!datasetBoundary.covers(((Point) spatialObject).getEnvelopeInternal())) { return result.iterator(); }
  Coordinate coordinate = RasterizationUtils.FindPixelCoordinates(resolutionX, resolutionY, datasetBoundary, ((Point) spatialObject).getCoordinate(), reverseSpatialCoordinate, false, true);
  Point rasterizedObject = geometryFactory.createPoint(coordinate);
  if (colorizeOption == ColorizeOption.EARTHOBSERVATION) {
    result.add(new Tuple2<Object, Double>(rasterizedObject, ((Point) spatialObject).getCoordinate().z));
  if (!datasetBoundary.covers(((Polygon) spatialObject).getEnvelopeInternal())) { return result.iterator(); }
  Coordinate[] spatialCoordinates = RasterizationUtils.FindPixelCoordinates(resolutionX, resolutionY, datasetBoundary, ((Polygon) spatialObject).getCoordinates(), reverseSpatialCoordinate, false, true);
  result.add(new Tuple2<Object, Double>(geometryFactory.createPolygon(spatialCoordinates), new Double(1.0)));
  return result.iterator();
  if (!datasetBoundary.covers(((LineString) spatialObject).getEnvelopeInternal())) { return result.iterator(); }
  Coordinate[] spatialCoordinates = RasterizationUtils.FindPixelCoordinates(resolutionX, resolutionY, datasetBoundary, ((LineString) spatialObject).getCoordinates(), reverseSpatialCoordinate, false, true);
  result.add(new Tuple2<Object, Double>(geometryFactory.createLineString(spatialCoordinates), new Double(1.0)));
  return result.iterator();

代码示例来源:origin: com.vividsolutions/jts

if (getNumInteriorRing() != 0) return false;
if (shell == null) return false;
if (shell.getNumPoints() != 5) return false;
Envelope env = getEnvelopeInternal();
for (int i = 0; i < 5; i++) {
 double x = seq.getX(i);
 if (! (x == env.getMinX() || x == env.getMaxX())) return false;
 double y = seq.getY(i);
 if (! (y == env.getMinY() || y == env.getMaxY())) return false;

代码示例来源:origin: matsim-org/matsim

final int glType;
if (geo instanceof Polygon) {
  ls = ((Polygon) geo).getExteriorRing();
  glType = GL2.GL_POLYGON;
} else if (geo instanceof MultiPolygon) {
  ls = ((Polygon) geo.getGeometryN(0)).getExteriorRing();
  glType = GL2.GL_POLYGON;
} else if (geo instanceof LineString) {
  glType = GL2.GL_LINE_STRIP;
} else if (geo instanceof MultiLineString) {
  ls = (LineString) geo.getGeometryN(0);
  glType = GL2.GL_LINE_STRIP;
} else if (geo instanceof Point) {
  final GeometryFactory geofac  = new GeometryFactory();
  ls = geofac.createLineString(new Coordinate[]{geo.getCoordinate()});
  glType = GL.GL_POINTS;
} else {
  throw new RuntimeException("Could not read Geometry from Feature!!");
final int npoints = ls.getNumPoints();
final float [] xpoints = new float[npoints];
final float [] ypoints = new float[npoints];
for (int i = 0; i < npoints; i++) {
  xpoints[i] = (float) (ls.getPointN(i).getCoordinate().x);
  ypoints[i] = (float) (ls.getPointN(i).getCoordinate().y);

代码示例来源:origin: org.orbisgis/h2gis

private void gatherDim4(Geometry geometry, Map<Coordinate, Double> map) {
  if (geometry instanceof Point) {
    gatherDim4(((Point) geometry).getCoordinateSequence(), map);
  } else if (geometry instanceof LineString) {
    gatherDim4(((LineString) geometry).getCoordinateSequence(), map);
  } else if (geometry instanceof Polygon) {
    Polygon polygon = (Polygon) geometry;
    gatherDim4(polygon.getExteriorRing().getCoordinateSequence(), map);
    for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
      gatherDim4(polygon.getInteriorRingN(i).getCoordinateSequence(), map);
    }
  } else {
    for (int i = 0; i < geometry.getNumGeometries(); i++) {
      gatherDim4(geometry.getGeometryN(i), map);
    }
  }
}

代码示例来源:origin: org.geotools/gt2-render

/**
 * Remove holes from a polygon
 *
 * @param polygon
 */
private Polygon simplifyPoly(Polygon polygon) {
  if(polygon.getNumInteriorRing() == 0)
    return polygon;
  
  LineString outer = polygon.getExteriorRing();
  if (outer.getStartPoint().distance(outer.getEndPoint()) != 0) {
    List clist = new ArrayList(Arrays.asList(outer.getCoordinates()));
    clist.add(outer.getStartPoint().getCoordinate());
    outer = outer.getFactory().createLinearRing(
        (Coordinate[]) clist.toArray(new Coordinate[clist.size()]));
  }
  LinearRing r = (LinearRing) outer;
  return outer.getFactory().createPolygon(r, null);
}

代码示例来源:origin: DataSystemsLab/GeoSpark

private boolean intersects(Polygon polygon)
{
  if (intersects(polygon.getExteriorRing())) {
    return true;
  }
  if (polygon.contains(factory.createPoint(centerPoint))) {
    return true;
  }
  if (polygon.getNumInteriorRing() == 0) {
    return false;
  }
  for (int i = 0; i < polygon.getNumInteriorRing(); i++) {
    if (intersects(polygon.getInteriorRingN(i))) {
      return true;
    }
  }
  return false;
}

相关文章