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
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="*")