# How to list all polygon vertice coordinates using geopandas

Im trying to list all polygon vertice coordinates of a rectangle with four corners and a hole with four corners. I drew the vertices in this order:

``````import geopandas as gpd
import matplotlib.pyplot as plt
import numpy as np

g = [i for i in df.geometry]
x,y = g[0].exterior.coords.xy
coords = np.dstack((x,y)).tolist()

>>coords
[[[536176.3224485546, 6724565.633642049],
[538863.5583380334, 6724580.120088892],
[539022.9092533124, 6722189.856359706],
[536201.6737305308, 6722124.66734891],
[536176.3224485546, 6724565.633642049]]]
``````

Only five coordinate pairs are listed. How can I list all?

• for the interior polygon, you need to use (interiors.coords). Regarding the order, normally geopandas use clockwise direction, that's why the order you got is (1,4,3,2,1) – Moh Jun 23 '18 at 11:09

Not sure if one line method exists, but following ways could work.

1. `boundary` property of a polygon returns exterior and all interiors of that polygon.

``````import geopandas as gpd
import numpy as np

g = [i for i in df.geometry]

all_coords = []
for b in g[0].boundary:
coords = np.dstack(b.coords.xy).tolist()
all_coords.append(*coords)

all_coords
``````

Result:

``````[[[0.0, 0.0],  #1
[0.0, 4.0],  #2
[7.0, 4.0],  #3
[7.0, 0.0],  #4
[0.0, 0.0]], #1

[[1.0, 1.0],  #5
[3.0, 1.0],  #6
[3.0, 3.0],  #7
[1.0, 3.0],  #8
[1.0, 1.0]], #5

[[4.0, 3.0],  #9
[4.0, 1.0],  #10
[6.0, 1.0],  #11
[6.0, 3.0],  #12
[4.0, 3.0]]] #9
``````

2. `polygon.interiors` returns `InteriorRingSequence` object which consists of `LinearRing` objects.

``````import geopandas as gpd
import numpy as np

g = [i for i in df.geometry]
x,y = g[0].exterior.coords.xy
all_coords = np.dstack((x,y)) ####

for interior in g[0].interiors:
x, y = interior.coords.xy
coords = np.dstack((x,y))
all_coords = np.append(all_coords, coords, axis=0)

all_coords  # or all_coords.tolist()
``````

Result:

``````array([[[0., 0.],  #1
[0., 4.],  #2
[7., 4.],  #3
[7., 0.],  #4
[0., 0.]], #1

[[1., 1.],  #5
[3., 1.],  #6
[3., 3.],  #7
[1., 3.],  #8
[1., 1.]], #5

[[4., 3.],  #9
[4., 1.],  #10
[6., 1.],  #11
[6., 3.],  #12
[4., 3.]]])#9
``````

3. You can use `shapely.geometry.mapping` function.

``````import geopandas as gpd
from shapely.geometry import mapping

g = [i for i in df.geometry]
all_coords = mapping(g[0])["coordinates"]
all_coords
``````

Result:

``````(((0.0, 0.0), (0.0, 4.0), (7.0, 4.0), (7.0, 0.0), (0.0, 0.0)), #exterior
((1.0, 1.0), (3.0, 1.0), (3.0, 3.0), (1.0, 3.0), (1.0, 1.0)), #interior1
((4.0, 3.0), (4.0, 1.0), (6.0, 1.0), (6.0, 3.0), (4.0, 3.0))) #interior2
``````
• I don't know exactly, but it should be. I couldn't find any information about that in shapely user manual. – Kadir Şahbaz Jun 23 '18 at 16:05

One way might be to convert to json then read back to dictionary:

``````import geopandas as gpd
import numpy as np
import json

• It is only one coordinate pair in coords. This seems to work: `coords = np.array(g['features'][0]['geometry']['coordinates'])` – BERA Aug 16 '18 at 13:07