mmngreco mmngreco - 5 months ago 37
Python Question

How move a multipolygon with geopandas in python2

I'm novice in GIS world in python (geopandas, shapely, etc). I need "move" a Multipolygon upwards, but I don't know how to do that.

The Problem

import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns
import pysal as ps
from pysal.contrib.viz import mapping as maps
import geopandas as gpd

fs = 5
nums = ("renta", 1)

f, ax = plt.subplots(1, figsize=(fs,fs))

spain.plot(column="XBAR", ax=ax, linewidth=0.05, cmap="OrRd", scheme="unique_values")

plt.title("RENTA MEDIA", fontsize=20)

plt.savefig("../imgs/map_%s_%s.svg" % nums, bbox_iches="tight", dpi=2800)


As you can see, Islands "Canarias" are away from rest of Spain, I want a smaller figure, and it's takes account that color is important, it's represent income mean for each counties.

If it's helps:

canarias = spain[ == "CANARIAS"]["geometry"]
print canarias
print canarias.type

13 (POLYGON ((-17.92791748046875 27.8495826721191...
Name: geometry, dtype: object
13 MultiPolygon
dtype: object

Note: Are counties missing, that's why I don't have data for this counties.

My first attempt was try to change coords of polygon for example, I try to find how to do some like this: canarias.coords + (-3,-4) but I didn't find how to access to coords of multipolygon to do that.

I appreciate any help.

PS: Sorry for my English :-/


I think you are looking for shapely.affinity.translate. From the docs:

Signature: shapely.affinity.translate(geom, xoff=0.0, yoff=0.0, zoff=0.0)
Returns a translated geometry shifted by offsets along each dimension.

The general 3D affine transformation matrix for translation is:

/ 1  0  0 xoff \ 
| 0  1  0 yoff |
| 0  0  1 zoff |
\ 0  0  0   1  /

For your specific example, you can use:

canarias = spain[ == "CANARIAS"].geometry
canarias_shift = canarias.apply(lambda x: shapely.affinity.translate(x, xoff=-3, yoff=-4))