Example #1
0
	def position_boundary_label(self, shape, node, label_width, label_height, node_extent_shape):
		x_scale = (node.max_x - node.min_x) / float(self.img_w)
		y_scale = (node.max_y - node.min_y) / float(self.img_h)
		label_geo_w = label_width * x_scale * .5
		label_geo_h = label_height * y_scale * .5
		#TODO: this will be weird if the extent isn't square
		label_geo_spacing = self.label_spacing * x_scale

		ret_results = []

		if(not shape):
			return None

		distance_since_last_label = 0
		line = shape.get(0)
		for line_iter in range(shape.numlines):
			line = shape.get(line_iter)

			if(line.numpoints == 0):
				continue

			last_point = line.get(0)
			last_x, last_y = tiletree.geo_coord_to_img(last_point.x, last_point.y,
					self.img_w, self.img_h, node.min_x, node.min_y, node.max_x, node.max_y)
			point_iter = 1
			while point_iter < line.numpoints:
				point = line.get(point_iter)
				this_x, this_y = tiletree.geo_coord_to_img(point.x, point.y,
					self.img_w, self.img_h, node.min_x, node.min_y, node.max_x, node.max_y)
				this_distance = calc_distance(this_x, this_y, last_x, last_y)

				if((distance_since_last_label + this_distance) > self.label_spacing ):
					point = pro_rate_point(last_point.x, last_point.y, point.x, point.y,
							label_geo_spacing - distance_since_last_label*x_scale)
					point = mapscript.pointObj(*point)
					this_x, this_y = tiletree.geo_coord_to_img(point.x, point.y,
						self.img_w, self.img_h, node.min_x, node.min_y, node.max_x, node.max_y)
					point_iter -= 1

					if(node_extent_shape.contains(point)):
						min_label_x = point.x - (x_scale * self.label_adjustment_max)
						max_label_x = point.x + (x_scale * self.label_adjustment_max)
						pos_results = self.slow_position_poly_label(shape, node, point.x, point.y, x_scale,
							y_scale, min_label_x, max_label_x, label_geo_w, label_geo_h)
						ret_results.append(self.return_pos_results(node, pos_results))

					distance_since_last_label = 0
				else:
					distance_since_last_label += this_distance

				last_x = this_x
				last_y = this_y
				last_point = point
				point_iter +=1 

		return ret_results
Example #2
0
	def render_pos_results(self, node, context, label_class, label_text, is_in_tile, label_extent):
		if(not is_in_tile):
			return

		img_x, img_y = tiletree.geo_coord_to_img(label_extent[0], label_extent[1],
				self.img_w, self.img_h, node.min_x, node.min_y, node.max_x, node.max_y)
		img_max_x, img_max_y = tiletree.geo_coord_to_img(label_extent[2], label_extent[3],
				self.img_w, self.img_h, node.min_x, node.min_y, node.max_x, node.max_y)

		self.render_label(context, label_text, img_x, img_y, img_max_x, img_max_y, label_class)
Example #3
0
    def render_pos_results(self, node, context, label_class, label_text,
                           is_in_tile, label_extent):
        if (not is_in_tile):
            return

        img_x, img_y = tiletree.geo_coord_to_img(label_extent[0],
                                                 label_extent[1], self.img_w,
                                                 self.img_h, node.min_x,
                                                 node.min_y, node.max_x,
                                                 node.max_y)
        img_max_x, img_max_y = tiletree.geo_coord_to_img(
            label_extent[2], label_extent[3], self.img_w, self.img_h,
            node.min_x, node.min_y, node.max_x, node.max_y)

        self.render_label(context, label_text, img_x, img_y, img_max_x,
                          img_max_y, label_class)
Example #4
0
    def position_boundary_label(self, shape, node, label_width, label_height,
                                node_extent_shape):
        x_scale = (node.max_x - node.min_x) / float(self.img_w)
        y_scale = (node.max_y - node.min_y) / float(self.img_h)
        label_geo_w = label_width * x_scale * .5
        label_geo_h = label_height * y_scale * .5
        #TODO: this will be weird if the extent isn't square
        label_geo_spacing = self.label_spacing * x_scale

        ret_results = []

        if (not shape):
            return None

        distance_since_last_label = 0
        line = shape.get(0)
        for line_iter in range(shape.numlines):
            line = shape.get(line_iter)

            if (line.numpoints == 0):
                continue

            last_point = line.get(0)
            last_x, last_y = tiletree.geo_coord_to_img(last_point.x,
                                                       last_point.y,
                                                       self.img_w, self.img_h,
                                                       node.min_x, node.min_y,
                                                       node.max_x, node.max_y)
            point_iter = 1
            while point_iter < line.numpoints:
                point = line.get(point_iter)
                this_x, this_y = tiletree.geo_coord_to_img(
                    point.x, point.y, self.img_w, self.img_h, node.min_x,
                    node.min_y, node.max_x, node.max_y)
                this_distance = calc_distance(this_x, this_y, last_x, last_y)

                if ((distance_since_last_label + this_distance) >
                        self.label_spacing):
                    point = pro_rate_point(
                        last_point.x, last_point.y, point.x, point.y,
                        label_geo_spacing -
                        distance_since_last_label * x_scale)
                    point = mapscript.pointObj(*point)
                    this_x, this_y = tiletree.geo_coord_to_img(
                        point.x, point.y, self.img_w, self.img_h, node.min_x,
                        node.min_y, node.max_x, node.max_y)
                    point_iter -= 1

                    if (node_extent_shape.contains(point)):
                        min_label_x = point.x - (x_scale *
                                                 self.label_adjustment_max)
                        max_label_x = point.x + (x_scale *
                                                 self.label_adjustment_max)
                        pos_results = self.slow_position_poly_label(
                            shape, node, point.x, point.y, x_scale, y_scale,
                            min_label_x, max_label_x, label_geo_w, label_geo_h)
                        ret_results.append(
                            self.return_pos_results(node, pos_results))

                    distance_since_last_label = 0
                else:
                    distance_since_last_label += this_distance

                last_x = this_x
                last_y = this_y
                last_point = point
                point_iter += 1

        return ret_results