# Polygons generated using python-script appear stretched?

We are trying to generate a grid of hexagons that is supposed to span the whole of Germany. The code we are using to generate this grid is as follows (excluding some sqlalchemy related parts):

``````from shapely.geometry import Polygon, Point
from pyproj import Proj, transform

class HexGenImpl(object):
def __init__(self, size):
self.size = size

@property
def width(self):
return self.size * 2.0

@property
def height(self):
return self.width * ( math.sqrt(3) / 2.0 )

def colFactor(self, col):
return (col * self.width * (3.0 / 4.0))

def rowFactor(self, row):
return (row * self.height)

def __call__(self, col, row):
for angle in range(0, 360+60, 60):
x = self.colFactor(col)
y = self.rowFactor(row)
# Offsetting every other column to fit the grid
y += (col & 1) * 0.5 * self.height
x += math.cos(theta) * self.size
y += math.sin(theta) * self.size
x = round(x, 10)
y = round(y, 10)
if x == -0: x = 0
if y == -0: y = 0
yield (x, y)

def generateHexGrid():
session = Session()
hexagon_generator = HexGenImpl(.1)

ap = Proj("+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs")
# Formerly just Proj("+proj=EPSG:4326")

for a in range(100):
for b in range(400):
hexagon = hexagon_generator(a, b)
hList = list(hexagon)
glist = [ap(p, p) for p in hList]
pol = Polygon([[p, p] for p in glist])
tHex = Hexagon(geom=pol.wkt)
print(a)
session.commit()
``````

This code works in that it generates a grid that can be rendered using our Geoserver without any problems. Sadly, whenever we try to use the layer in our front-end-application (which uses Leaflet) the hexagons appear stretched. This seems to be a problem with the projection, yet I haven't been able to figure out how one would go about projecting our coordinates (which are basically points on a cartesian plane) to something that gets rendered properly. The closer the hexagons are to the equator, the less they appear to be stretched out.

I tried multiple projections, offsetting the coordinates, changing settings on the GeoServer etc. yet the problem persists.