Beispiel #1
0
 def xform(g):
     if self.simplify:
         k = g.simplify((maxx - minx) / width)
         if k:
             g = k
     g.transform(t_srs.wkt)
     return g
Beispiel #2
0
 def xform(g):
     if self.simplify:
         k = g.simplify((maxx - minx) / width)
         if k:
             g = k
     g.transform(t_srs.wkt)
     return g
Beispiel #3
0
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)
Beispiel #4
0
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
Beispiel #6
0
    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
Beispiel #7
0
            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")