Robert, That got me essentially all the way there. Herewith a gist: https://gist.github.com/urschrei/17cf0be92ca90a244a91
This simply calculates a grid of hexagon coordinates given LL and UR x, y values and side length. The returned list can easily generate Shapely polygons, from which the sky is the limit. Here’s what the result looks like for London, using a 1000m side length: https://dl.dropboxusercontent.com/u/21382/photos/hex.png -- s > On 20 Oct 2014, at 02:22, Robert Sanson <robert.san...@asurequality.com> > wrote: > > Here is some code I wrote a while ago to create a Shape file of > hexagons using Python + OGR: > > import math > from osgeo import gdal > from osgeo import ogr > from osgeo import osr > from pyproj import Proj > > #input lower left and upper right bounds and side length > sl = 5000.0 #side length > origx = 1772193.50482601 > origy = 5495586.50355601 > endx = 1892367.49517399 > endy = 5617030.49644399 > > #output format > outpf = "esri" > #outpf = "wkt" > > #calculate coordinates of the hexagon points > p = sl * 0.5 #sin(30) > b = sl * math.cos(math.radians(30)) > w = b * 2 > h = 2 * sl > > #offsets for moving along and up rows > xoffset = b > yoffset = 3 * p > > #Proj.4 coordinate system > tmpr = Proj('+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 > +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs') > > #Create the output file object > fp = open("hex5km.txt", "w") > if outpf == "esri": > fp.write("Polygon\n") > > #set up OGR stuff > driver = ogr.GetDriverByName('ESRI Shapefile') > newShp = driver.CreateDataSource('hex5km.shp') > layer = newShp.CreateLayer('hex1',geom_type=ogr.wkbPolygon) > field = ogr.FieldDefn('hex_id',ogr.OFTInteger) > field.SetWidth(9) > layer.CreateField(field) > out_ref = osr.SpatialReference() > out_ref.ImportFromEPSG(2193) > > startx = origx > starty = origy > row = 1 > counter = 0 > > while starty < endy: > if row % 2 == 0: > startx = origx + xoffset > else: > startx = origx > while startx < endx: > p1x = str(startx) > p1y = str(starty + p) > p2x = str(startx) > p2y = str(starty + (3 * p)) > p3x = str(startx + b) > p3y = str(starty + h) > p4x = str(startx + w) > p4y = str(starty + (3 * p)) > p5x = str(startx + w) > p5y = str(starty + p) > p6x = str(startx + b) > p6y = str(starty) > wkt = "POLYGON(("+p1x+" "+p1y+","+p2x+" "+p2y+","+p3x+" > "+p3y+","+p4x+" "+p4y+","+p5x+" "+p5y+","+p6x+" "+p6y+","+p1x+" > "+p1y+"))" > feature = ogr.Feature(layer.GetLayerDefn()) > feature.SetField(0,counter) > geom = ogr.CreateGeometryFromWkt(wkt) > feature.SetGeometryDirectly(geom) > geom.AssignSpatialReference(out_ref) > layer.CreateFeature(feature) > if outpf == "wkt": > fp.write("POLYGON(("+p1x+" "+p1y+","+p2x+" "+p2y+","+p3x+" > "+p3y+","+p4x+" "+p4y+","+p5x+" "+p5y+","+p6x+" "+p6y+","+p1x+" > "+p1y+"))\n") > else: > fp.write(str(counter)+" 0\n") > fp.write("0 "+p1x+" "+p1y+"\n") > fp.write("1 "+p2x+" "+p2y+"\n") > fp.write("2 "+p3x+" "+p3y+"\n") > fp.write("3 "+p4x+" "+p4y+"\n") > fp.write("4 "+p5x+" "+p5y+"\n") > fp.write("5 "+p6x+" "+p6y+"\n") > fp.write("6 "+p1x+" "+p1y+"\n") > counter = counter + 1 > startx = startx + w > starty = starty + yoffset > row = row + 1 > if outpf == "esri": > fp.write("END\n") > print str(counter) + " Polygons created" > fp.close() > newShp.Destroy() > > Regards, > > Robert >>>> Stephan Hügel<ursch...@gmail.com> 18/10/2014 3:33 a.m. >>> > Apologies for the general question, but I*m wondering if anyone*s > got a recipe to generate a grid of hexagon polygons (or any tessellating > shape!) for given coordinate bounds, using Shapely. > Essentially I want to emulate the MMQGIS *Create Grid Layer* > function* > > Pointers and suggestions gladly accepted. > -- > s > > _______________________________________________ > Community mailing list > Community@lists.gispython.org > http://lists.gispython.org/mailman/listinfo/community > > > This email and any attachments are confidential and intended solely for the > addressee(s). If you are not the intended recipient, please notify us > immediately and then delete this email from your system. > > This message has been scanned for Malware and Viruses by Websense Hosted > Security. > www.websense.com > _______________________________________________ > Community mailing list > Community@lists.gispython.org > http://lists.gispython.org/mailman/listinfo/community _______________________________________________ Community mailing list Community@lists.gispython.org http://lists.gispython.org/mailman/listinfo/community