isRectangle method

bool isRectangle()
override

Tests whether this is a rectangular {@link Polygon}.

@return true if the geometry is a rectangle.

Implementation

bool isRectangle() {
  if (getNumInteriorRing() != 0) return false;
  if (shell == null) return false;
  if (shell!.getNumPoints() != 5) return false;

  CoordinateSequence seq = shell!.getCoordinateSequence();

  // check vertices have correct values
  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;
  }

  // check vertices are in right order
  double prevX = seq.getX(0);
  double prevY = seq.getY(0);
  for (int i = 1; i <= 4; i++) {
    double x = seq.getX(i);
    double y = seq.getY(i);
    bool xChanged = x != prevX;
    bool yChanged = y != prevY;
    if (xChanged == yChanged) return false;
    prevX = x;
    prevY = y;
  }
  return true;
}