示例#1
0
文件: Viewer.py 项目: 8A8/SDB_project
    def highlight_area(self, event):
        coords = self.coords
        if self.flag == 1:
            ix, iy = event.xdata, event.ydata
            # print 'x = %f, y = %f' % (ix, iy)
            coords.append((ix, iy))

        if len(coords) == 2 and self.flag == 1:
            rec = []
            x1, y1 = coords[0]
            x2, y2 = coords[1]
            rec.append(coords[0])
            rec.append((x1,y2))
            rec.append(coords[1])
            rec.append((x2, y1))

            self.flag = 0
            #plt.scatter(*zip(*coords), color=(17 / 255, 120 / 255, 100 / 255, 1), s=0.5)
            ring_patch = PolygonPatch(Polygon(rec))
            r = Polygon(rec)

            # if point
            for p in self.points:
                if r.contains(p['object']):
                    self.scatters[p['table']]._facecolors[p['index'], :] = (1, 1, 0, 1)
                    self.scatters[p['table']]._edgecolors[p['index'], :] = (1, 1, 0, 1)

            # if polygon
            for p in self.ax.patches:
                idx = p.get_picker()
                if idx is None:
                    break;
                if r.contains(self.polygons[idx]['object']):
                    p.set_fc((0.968, 0.8627, 0.435, 1))
                    #p.set_fc((0.424, 0.204, 0.514, 0.5))


            # if line
            for l in self.ax.get_lines():
                idx = l.get_gid()
                if idx is None:
                    break;
                line = self.lines[idx]['object']
                if r.contains(line):
                    l.set_color((0.968, 0.8627, 0.435, 1))

            ring_patch.set_fc((0.84, 0.917, 0.97, 0.5))
            ring_patch.set_zorder(99)
            self.highlifgted = ring_patch
            self.ax.add_patch(ring_patch)
            for p in coords:
                x, y = p[0], p[1]
                self.ax.plot(x, y, color='GRAY', linewidth=1, solid_capstyle='round')

            self.coords = []
            self.fig.canvas.draw()
            # fig.canvas.mpl_disconnect(cid)

        return coords
示例#2
0
文件: Viewer.py 项目: 8A8/SDB_project
    def insert_object(self, table_name, objects, _color):

        self.all_points[table_name] = []

        for o in objects:
            object = o['object']
            zorder = o['zorder']
            o['table'] = table_name
            o['color'] = _color

            self.object[table_name].append(o)
            self.color[table_name] = _color
            if isinstance(object, shapely.geometry.point.Point):
                self.points.append(o)
                self.all_points[table_name].append([object.x, object.y])
                o['index'] = len(self.all_points[table_name]) - 1
            elif isinstance(object, shapely.geometry.linestring.LineString):
                self.lines.append(o)
                # line plot
                x, y = object.xy
                self.ax.plot(x, y, color=_color, linewidth=1, solid_capstyle='round', zorder=-1 * zorder, gid=self.line_index)
                o['index'] = self.line_index
                self.line_index += 1
            elif isinstance(object, shapely.geometry.polygon.Polygon):
                self.polygons.append(o)
                poly_patch = PolygonPatch(object)
                poly_patch.set_fc(_color)
                poly_patch.set_zorder(zorder)  # * zorder[i])
                poly_patch.set_picker(self.polygon_index)
                self.ax.add_patch(poly_patch)
                o['index'] = self.polygon_index
                self.polygon_index += 1


        # point draw
        if len(self.all_points[table_name]) != 0:
            self.scatters[table_name] = self.ax.scatter(*zip(*self.all_points[table_name]),
                                            color=[_color] * len(self.all_points[table_name]),
                                            s=[5] * len(self.all_points[table_name]), picker=True, marker="*")