public GridCoordinates getGridCoordinates() {
		Row<?> lastRow = lastRow();
		Column<?> lastColumn = lastColumn();
		if (lastRow == null || lastColumn == null) {
			return new GridCoordinates(new int[0], new int[0]);
		}

		// add 1 to compute a row y value and a column x value for closing the grid
		int[] rowStarts = new int[lastRow.index + 1];
		int[] colStarts = new int[lastColumn.index + 1];

		for (Row<?> row : rowsByIndex.values()) {
			rowStarts[row.index] = row.y;
		}
		for (Column<?> col : columnsByIndex.values()) {
			colStarts[col.index] = col.x;
		}

		// Give any empty rows or columns the coordinate of the row or column that precedes it 
		// since it takes no space. (Otherwise all the empty row or column labels would overwrite
		// themselves at the 0 row or 0 column.
		for (int row = 1; row < rowStarts.length; row++) {
			if (rowStarts[row] == 0) {
				rowStarts[row] = rowStarts[row - 1];
			}
		}
		for (int col = 1; col < colStarts.length; col++) {
			if (colStarts[col] == 0) {
				colStarts[col] = colStarts[col - 1];
			}
		}

		// close the grid
		rowStarts[rowStarts.length - 1] = lastRow.y + lastRow.getPaddedHeight(isCondensed);
		colStarts[colStarts.length - 1] = lastColumn.x + lastColumn.getPaddedWidth(isCondensed);

		return new GridCoordinates(rowStarts, colStarts);

	}
Returns the rows in this location map, sorted from lowest index to highest 

@return the rows in this location map, sorted from lowest index to highest
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/layout/LayoutLocationMap.java