def xform(g): if self.simplify: k = g.simplify((maxx - minx) / width) if k: g = k g.transform(t_srs.wkt) return g
def xform(g): if self.simplify: k = g.simplify((maxx - minx) / width) if k: g = k g.transform(t_srs.wkt) return g
def simplifyGeometry(geometry): # If we have a LineString, if isinstance(geometry, shapely.geometry.LineString): return geometry.simplify(0) # If we have a MultiLineString, elif isinstance(geometry, shapely.geometry.MultiLineString): return shapely.ops.linemerge(geometry).simplify(0) # Otherwise, else: # Raise exception raise ValueError('Unexpected geometry type: %s' % geometry.type)
def simplifyGeometry(geometry): # If we have a LineString, if isinstance(geometry, shapely.geometry.LineString): return geometry.simplify(0) # If we have a MultiLineString, elif isinstance(geometry, shapely.geometry.MultiLineString): return shapely.ops.linemerge(geometry).simplify(0) # Otherwise, else: # Raise exception raise ValueError('Unexpected geometry type: %s' % geometry.type)
def renderMapInset(self, codes, left, top, width): envelope = [] for code in codes: envelope.append(self.features[code]['geometry'].envelope) bbox = shapely.geometry.MultiPolygon(envelope).bounds scale = (bbox[2] - bbox[0]) / width # generate SVG paths for code in codes: feature = self.features[code] geometry = feature['geometry'] if self.buffer_distance: geometry = geometry.buffer(self.buffer_distance * scale, 1) if geometry.is_empty: continue if self.simplify_tolerance: geometry = geometry.simplify(self.simplify_tolerance * scale, preserve_topology=True) if isinstance(geometry, shapely.geometry.multipolygon.MultiPolygon): polygons = geometry.geoms else: polygons = [geometry] path = '' for polygon in polygons: rings = [] rings.append(polygon.exterior) rings.extend(polygon.interiors) for ring in rings: for pointIndex in range(len(ring.coords)): point = ring.coords[pointIndex] if pointIndex == 0: path += 'M' + str( round((point[0] - bbox[0]) / scale + left, self.precision)) path += ',' + str( round((bbox[3] - point[1]) / scale + top, self.precision)) else: path += 'l' + str( round( point[0] / scale - ring.coords[pointIndex - 1][0] / scale, self.precision)) path += ',' + str( round( ring.coords[pointIndex - 1][1] / scale - point[1] / scale, self.precision)) path += 'Z' self.map.addPath(path, feature['code'], feature['name']) return bbox
def renderMapInset(self, codes, left, top, width): envelope = [] for code in codes: envelope.append(self.features[code]['geometry'].envelope) bbox = shapely.geometry.MultiPolygon(envelope).bounds scale = (bbox[2] - bbox[0]) / width # generate SVG paths for code in codes: feature = self.features[code] geometry = feature['geometry'] if self.buffer_distance: geometry = geometry.buffer(self.buffer_distance * scale, 1) if geometry.is_empty: continue if self.simplify_tolerance: geometry = geometry.simplify(self.simplify_tolerance, preserve_topology=True) if isinstance(geometry, shapely.geometry.multipolygon.MultiPolygon): polygons = geometry.geoms else: polygons = [geometry] path = '' for polygon in polygons: rings = [] rings.append(polygon.exterior) rings.extend(polygon.interiors) for ring in rings: for pointIndex in range(len(ring.coords)): point = ring.coords[pointIndex] if pointIndex == 0: path += 'M' + str(round((point[0] - bbox[0]) / scale + left, self.precision)) path += ',' + str(round((bbox[3] - point[1]) / scale + top, self.precision)) else: path += 'l' + str( round(point[0] / scale - ring.coords[pointIndex - 1][0] / scale, self.precision)) path += ',' + str( round(ring.coords[pointIndex - 1][1] / scale - point[1] / scale, self.precision)) path += 'Z' self.map.addPath(path, feature['code'], feature['name']) return bbox
if fatal_errors: raise else: print >> sys.stderr, "Shapely error:", str(e) ogr_feature.Destroy() ogr_feature = layer.GetNextFeature() continue attrs = [] for n, name in enumerate(fields): value = ogr_feature.GetField(n) if isinstance(value, basestring): try: value = value.decode("utf-8") except UnicodeDecodeError: value = value.decode("latin-1") attrs.append(value) ogr_feature.Destroy() yield geometry, attrs ogr_feature = layer.GetNextFeature() source.Destroy() for shpfile in sys.argv[1:]: year = os.path.basename(shpfile).split(".")[0][-4:] print >> sys.stderr, year for geometry, attrs in read_with_ogr(shpfile, False): attrs += [year, geometry.simplify(.01).to_wkt()] for n, val in enumerate(attrs): if val is None: attrs[n] = "" print "\t".join(map(unicode, attrs)).encode("utf8")
except Exception, e: if fatal_errors: raise else: print >>sys.stderr, "Shapely error:", str(e) ogr_feature.Destroy() ogr_feature = layer.GetNextFeature() continue attrs = [] for n, name in enumerate(fields): value = ogr_feature.GetField(n) if isinstance(value, basestring): try: value = value.decode("utf-8") except UnicodeDecodeError: value = value.decode("latin-1") attrs.append(value) ogr_feature.Destroy() yield geometry, attrs ogr_feature = layer.GetNextFeature() source.Destroy() for shpfile in sys.argv[1:]: year = os.path.basename(shpfile).split(".")[0][-4:] print >>sys.stderr, year for geometry, attrs in read_with_ogr(shpfile, False): attrs += [year, geometry.simplify(.01).to_wkt()] for n, val in enumerate(attrs): if val is None: attrs[n] = "" print "\t".join(map(unicode,attrs)).encode("utf8")