diff --git a/src/c3nav/mapdata/utils/svg.py b/src/c3nav/mapdata/utils/svg.py index 2734fd48..802ce295 100644 --- a/src/c3nav/mapdata/utils/svg.py +++ b/src/c3nav/mapdata/utils/svg.py @@ -56,6 +56,10 @@ class SVGImage: self.altitudes = {} self.last_altitude = None + # for fast numpy operations + self.np_scale = np.array((self.scale, -self.scale)) + self.np_offset = np.array((-self.left*self.scale, self.top*self.scale)) + # keep track of created blur filters to avoid duplicates self.blurs = set() @@ -134,19 +138,16 @@ class SVGImage: return re.sub(r'L (-?([0-9]+)(.[0-9]+)?,(-?[0-9]+)(.[0-9]+)?) L', r'L \1 ', data) def _geometry_to_svg(self, geom): + # scale and move geometry geometry and create svg code for it if isinstance(geom, Polygon): return ('').replace('.0 ', ' ') if isinstance(geom, LineString): return (('') % - tuple((np.array(geom) - * np.array((self.scale, -self.scale)) - + np.array((-self.left*self.scale, self.top*self.scale))).flatten())).replace('.0 ', ' ') + tuple((np.array(geom)*self.np_scale+self.np_offset).flatten())).replace('.0 ', ' ') try: geoms = geom.geoms except AttributeError: