1223西站坐标更新

1223 西站坐标更新

1.Update for the station’s location

    def initial_out_map_indoor_points(self):
        '''
            Load the indoor data and update both the wall_matrix and the ditch_matrix.
        '''
        # Initialize the wall_matrix
        # List of coordinates
        coordinates = [
            (417, 287, 417, 290),
            (414, 254, 414, 257),
            (412, 222, 412, 225),
            (411, 209, 411, 211),
            (411, 203, 411, 205),
            (567, 275, 567, 276),
            (566, 268, 566, 270),
            (566, 261, 566, 263),
            (565, 247, 565, 249),
            (563, 215, 563, 218),
            (561, 189, 561, 192),
            (407, 238, 407, 245),
            (570, 226, 570, 234),
            (464, 291, 466, 292),
            (518, 288, 521, 288),
            (457, 187, 459, 187),
            (511, 183, 513, 183)
        ]
        coordinates = self.sort_segments_clockwise(coordinates)

        last_pointx,last_pointy=0,0
        temp_no=0

        # Fill in the wall_matrix
        for x1, y1, x2, y2 in coordinates:
            # apply the process of wall's calculation
            points = bresenham_line(x1, y1, x2, y2)  # find all the points within the straight line
            for x, y in points:
                if 0 <= x < len(self.wall_matrix) and 0 <= y < len(
                        self.wall_matrix[0]):
                    self.wall_matrix[int(x), int(y)] = 1  # Remember the location of the wall.
            if temp_no>=1 and calculate_distance(last_pointx,last_pointy,x1,y1)<=1000:
                points=bresenham_line(last_pointx,last_pointy,x1,y1)
                for x, y in points:
                    if 0 <= x < len(self.wall_matrix) and 0 <= y < len(
                            self.wall_matrix[0]):
                        self.wall_matrix[int(x), int(y)] = 1  # Remember the location of the wall.
            # if calculate_distance(last_pointx,last_pointy,x1,y1)>100:
            #     print(f'Out of range:(x1:{x},y1:{y})')
            temp_no=temp_no+1
            last_pointx,last_pointy=x2,y2
        begin_x1,begin_y1,begin_x2,begin_y2=coordinates[0]
        print(f'begin_x1:{begin_x1},begin_y1:{begin_y1},begin_x2:{begin_x2},begin_y2:{begin_y2}')
        points = bresenham_line(begin_x1, begin_y1, x2, y2)  # find all the points within the straight line
        for x, y in points:
            if 0 <= x < len(self.wall_matrix) and 0 <= y < len(
                    self.wall_matrix[0]):
                self.wall_matrix[int(x), int(y)] = 1  # Remember the location of the wall.

        self.wall_matrix = self.fill_area(self.wall_matrix, target_value=1)
        # Update the location to the overall matrix
        self.outdoor_label[self.wall_matrix == 1] = 1

        df=pd.DataFrame(self.wall_matrix)
        df.to_csv('G:/HZXZ/Hws-Mirror-City/water_indoor/Model2_data/outdoor_data/temp_data/wall_matrix.csv', index=False)

        # label the location of the door
        current_dir = os.path.dirname(os.path.abspath(__file__))
        data_path = os.path.join(current_dir, 'Model2_data/outdoor_data/out_in_map_points.xlsx')
        data = pd.read_excel(data_path)
        for _, row in data.iterrows():
            # load the door coordinates and finish the transfer
            id, x1, y1, x2, y2 = row['id'], row['x1'], row['y1'], row['x2'], row['y2']
            x1, y1 = self.indoor_transfer.cad2ue(x1, y1)
            x2, y2 = self.indoor_transfer.cad2ue(x2, y2)
            index_x1, index_y1 = self.outdoor_transer.ue2index_model2(x1, y1,self.scaled_width,self.scaled_height)
            index_x2, index_y2 = self.outdoor_transer.ue2index_model2(x2, y2,self.scaled_width,self.scaled_height)
            index_x1, index_y1, index_x2, index_y2 = int(index_x1), int(index_y1), int(index_x2), int(index_y2)
            if index_y1 > index_y2:
                tmp = index_y1
                index_y1 = index_y2
                index_y2 = tmp
            # print(f'x1:{index_x1}, x2:{index_x2}, y1:{index_y1}, y2:{index_y2}')

            # label the location of the indoor doors
            if index_x1 == index_x2:
                self.outdoor_label[index_x1, index_y1:index_y2] = 5
            elif index_y1 == index_y2:
                self.outdoor_label[index_x1:index_x2, index_y1] = 5
            else:
                self.outdoor_label[index_x1:index_x2, index_y1:index_y2] = 5
        # self.wall_matrix = self.fill_area(self.wall_matrix, target_value=1) # fill the circled area

新增函数

    def calculate_midpoint(self,segment):
        return ((segment[0] + segment[2]) / 2, (segment[1] + segment[3]) / 2)

    def calculate_centroid(self,segments):
        x_sum, y_sum = 0, 0
        for segment in segments:
            midpoint = self.calculate_midpoint(segment)
            x_sum += midpoint[0]
            y_sum += midpoint[1]
        return x_sum / len(segments), y_sum / len(segments)

    def calculate_angle(self,centroid, point):
        return math.atan2(point[1] - centroid[1], point[0] - centroid[0])

    def sort_segments_clockwise(self,segments):
        centroid = self.calculate_centroid(segments)
        return sorted(segments, key=lambda segment: self.calculate_angle(centroid, self.calculate_midpoint(segment)))

更细的函数

    def showOutdoorImg(self, outdoor_acc_water_matrix):
        """
        opencv可视化降雨量矩阵结果
        input: rainfall_matrix
        output: null
        """
        # 获取矩阵中的最大值和对应的下标
        max_value = np.max(outdoor_acc_water_matrix)
        max_index = np.argmax(outdoor_acc_water_matrix)

        # 将一维下标转换为二维下标
        max_index_2d = np.unravel_index(max_index, outdoor_acc_water_matrix.shape)
        print(f'the largest water logging is {max_value}, the index is {max_index_2d}')

        mat = np.transpose(np.copy(outdoor_acc_water_matrix))[::-1]

        # 归一化矩阵
        # mat = cv2.normalize(mat, None, 200, 250, cv2.NORM_MINMAX, dtype=cv2.CV_8UC3)
        mat = mat / 300 * 250
        mat[mat > 250] = 250
        mat[mat < 30] = 30
        mat = mat.astype(np.uint8)
        mat = cv2.cvtColor(mat, cv2.COLOR_RGB2BGR)
        # 自定义颜色映射表
        custom_colormap = create_custom_colormap()

        # 将矩阵映射到蓝色色域
        image = cv2.applyColorMap(mat, custom_colormap)

        label = np.transpose(self.outdoor_label)[::-1]
        outdoor_acc_water_matrix = np.transpose(outdoor_acc_water_matrix)[::-1]
        image[outdoor_acc_water_matrix < 2] = [255, 255, 255]  # 积水为0设置为白色
        image[label == 1] = [0,255,255]  # 墙体设置为黄色
        image[label == 2] = 0  # 路面设置为黑色
        image[label == 3] = [0, 0, 255]  # 河流部分设置为(30,144,255)
        image[label == 5] = [0, 255, 0]  # 河流部分设置为(30,144,255)
        # image[label == 4] = [0, 255, 0]
        image[label == 9] = [25, 74, 230]

        image = cv2.resize(image, None, None, 1, 1, cv2.INTER_NEAREST)
        # 插入西站图片
        # west_station_img = cv2.imread('Model2_data/outdoor_data/west_station.png')
        # x, y = int(108*self.resize_scale), int(54*self.resize_scale)
        # west_station_img = cv2.resize(west_station_img, None, None, self.resize_scale, self.resize_scale, cv2.INTER_NEAREST)
        # image[y:y + west_station_img.shape[0], x:x + west_station_img.shape[1]] = west_station_img
        cv2.imwrite(f'result/outdoor_imgs/time_stamp{self.time_stamp}.png', image)
        cv2.imwrite(f'Model2_data/outdoor_data/temp_data/time_stamp{self.time_stamp}.png', image)
        if self.__debug_mode:
            # 显示图像
            cv2.imshow("OutdoorImage", image)
            cv2.waitKey(500)
            # cv2.destroyAllWindows()
    def initialMatrix(self):
        '''
        水体系统,初步生成室外降水 渗透 地势三个matrix
            0.土壤
            1.墙体
            2.道路
            3.河流
            4.沟渠
            5.室内外映射点位
            9.易涝点
        初步生成室内地势matrix
            1.ditch
            2.wall
            3.Stair
            4.RoadStair
        '''
        # 初始化outdoor_label矩阵
        soil_label = 0
        walls_label = 1
        roads_label = 2
        river_label = 3
        ditch_label = 4
        infinite = np.inf  # 设置较大的值代表河流的渗透是无穷的
        infiltration_standard = 2  # 渗透量国标
        # 初始化地势图中各处的高度
        walls_height = np.inf
        roads_height = 0
        river_height = -1
        ditch_height = -10
        # 室内初始化
        self.indoor_topographic_matrix[self.indoor_label == 1] = ditch_height
        self.indoor_topographic_matrix[self.indoor_label == 2] = infinite

        # path = 'Model2_data/outdoor_data/'
        # np.save(path+'road_matrix_test.npy', self.road_matrix)
        # road_matrix = np.load(path+'road_matrix_test.npy')
        # 室外初始化
        # 对标签矩阵作转换,转换到UE矩阵中去
        # self.wall_matrix = self.outdoor_transer.four_point_transform(self.wall_matrix)
        # self.river_matrix = self.outdoor_transer.four_point_transform(self.river_matrix)
        # self.ditch_matrix = self.outdoor_transer.four_point_transform(self.ditch_matrix)
        # self.road_matrix = self.outdoor_transer.four_point_transform(self.road_matrix)
        # 初始化降雨矩阵
        soil_mask = (self.wall_matrix == 0) & (self.road_matrix == 0) & (self.river_matrix == 0) & (self.ditch_matrix == 0)
        self.rainfall_matrix[self.wall_matrix == 1] = 0
        self.rainfall_matrix[self.wall_matrix == 0] = 1

        # UE转为地势矩阵&初始化特殊地势矩阵
        self.initial_topographic_matrix()
        # print(f'topographic_matrix non zero points num is {np.count_nonzero(self.outdoor_topographic_matrix)}')
        self.outdoor_topographic_matrix[self.wall_matrix == 1] = walls_height
        # self.outdoor_topographic_matrix[self.road_matrix == 1] = roads_height
        # self.outdoor_topographic_matrix[self.river_matrix == 1] = river_height
        self.outdoor_topographic_matrix[self.ditch_matrix == 1] = ditch_height

        # 西站坐标初始化

        # random_values = np.random.randint(-10, 10, size=np.count_nonzero(soil_mask))
        # self.outdoor_topographic_matrix[soil_mask] = random_values

        # 初始化标签
        self.outdoor_label[soil_mask] = soil_label
        # Updated way of labeling both the station and the ditch
        self.initial_out_map_indoor_points()
        self.outdoor_label[self.road_matrix == 1] = roads_label
        # self.outdoor_label[self.river_matrix == 1] = river_label
        self.outdoor_label[self.ditch_matrix == 1] = ditch_label
        # self.outdoor_label[self.wall_matrix == 1] = walls_label
        # Realize this function.
        self.initial_river()
        df=pd.DataFrame(self.outdoor_label)
        df.to_csv('G:/HZXZ/Hws-Mirror-City/water_indoor/Model2_data/outdoor_data/temp_data/outdoor_label.csv', index=False)
        print(f'temporary numbers: {np.unique(self.outdoor_label)}')
        self.initial_prone_waterlogging_points()

        # 室内外映射点位初始化
        # for index in range(len(self.outdoor_map_indoor) // 2):
        #     for (i, j) in self.outdoor_map_indoor[f'outdoor_point{index + 1}']:
        #         self.outdoor_topographic_matrix[i][j] = 0
        #         self.outdoor_label[i][j] = 5
        pass

Final Output

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/266362.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java--抽象工厂设计模式

抽象工厂设计模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在抽象工厂模式中&#xff0c;接口是负责…

考研往应届考生报名流程?

文章目录&#xff1a; 一&#xff1a;考试时间相关 二&#xff1a;公告查询获取信息 三&#xff1a;提供材料 1.基本要求 2.证件要求 四&#xff1a;相关问题 1.报名流程如何操作 2.考点选择 2.1 应届考生考点选择 2.2 往届考生考点选择 3.预报名时间可能不同 4.档…

Python编程 圣诞树教程 (附代码)专属于程序员的浪漫

文章目录 1.turtle库2.python函数的定义规则3.引入库4.定义画彩灯函数5.定义画圣诞树的函数6.定义树下面小装饰的函数7.定义一个画雪花的函数8.画五角星9.写文字10.全部源代码11.html圣诞树代码实现&#xff08;动态音乐&#xff09; 1.turtle库 turtle库是Python语言中一个很…

Java LocalDateTime转Json报错处理

在项目中LocalDateTime 进行json转换时&#xff0c;抛出序列化异常&#xff0c;查找解决方案&#xff0c;记录下来&#xff0c;方便备查。 报错信息 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Java 8 date/time type java.time.LocalDateT…

【小白攻略】php 小数转为百分比,保留两位小数的函数

php 小数转为百分比 首先&#xff0c;最简单直观的方法是利用PHP内置的number_format函数。该函数可以对一个数字进行格式化&#xff0c;并可以设置小数点后的精度。通过将小数乘以100&#xff0c;再用number_format函数将结果格式化为百分比形式&#xff0c;即可达到将小数转为…

基于Java SSM框架实现多人试卷批改考试命题系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现多人试卷批改考试命题系统演示 摘要 多人命题系统是高校为教师、学生试卷的重要组成部分&#xff0c;是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。我所在学院多采用半手工管理学生试卷…

什么是动态代理?

目录 一、为什么需要代理&#xff1f; 二、代理长什么样&#xff1f; 三、Java通过什么来保证代理的样子&#xff1f; 四、动态代理实现案例 五、动态代理在SpringBoot中的应用 导入依赖 数据库表设计 OperateLogEntity实体类 OperateLog枚举 RecordLog注解 上下文相…

车云TCP链路偶现链接失联问题排查

一、问题分析 1.1 车云tcp长连接分析排查 在15:37:32.039上线&#xff0c; 在 16:07:26.527下线&#xff0c;车云长连接通道稳定&#xff0c;且该期间心跳数据正常。 1.2 云向驾仓推送数据分析 在15:37:42 进行车辆接管后&#xff0c;该车辆下线&#xff0c;且无法在上线&am…

Java语法---使用sort进行排序

目录 一、升序 二、降序 &#xff08;1&#xff09;类实现接口 &#xff08;2&#xff09;匿名内部类 三、自定义排序规则 四、集合中的sort排序 &#xff08;1&#xff09;升序 &#xff08;2&#xff09;降序 &#xff08;3&#xff09;自定义排序 一、升序 升序排…

vue3+Ts

安装 命令含义可参考typescript文章中的自动编译部分 npm create vitelatest vuets-project -- --template vue-tsvs code插件 Vue Language Features (Volar)对.vue文件进行实时的类型错误反馈TypeScript Vue Plugin (Volar) 用于支持在TS中import*.vue文件&#xff08;mai…

08-JVM调优实战及常量池详解

文章目录 阿里巴巴Arthas详解Arthas使用场景Arthas使用 GC日志详解打印GC日志方法如何分析GC日志CMSG1 JVM参数汇总查看命令Class常量池与运行时常量池字面量符号引用 字符串常量池字符串常量池的设计思想三种字符串操作(Jdk1.7 及以上版本)字符串常量池位置字符串常量池设计原…

C语言——高精度除法

一、引子 1、引言 高精度除法相较于加减乘法更加复杂&#xff0c;它需要处理的因素更多&#xff0c;在这里我们先探讨高精度数除以低精度数&#xff0c;即大数除小数。这已满足日常所需&#xff0c;如需大数除以大数&#xff0c;可以使用专门的库&#xff0c;例如&#xff1a…

3.Redis持久化

文章目录 RDB&#xff08;Redis DataBase&#xff09;&#xff1a;RDB是什么&#xff1f;RDB能干嘛&#xff1f;RDB自动触发RDB手动触发RDB优点RDB缺点什么情况会触发RDB快照 AOF&#xff08;Append Only File&#xff09;&#xff1a;AOF是什么&#xff1f;AOF能干嘛&#xff…

【Hadoop】 YARN 运行过程/YARN设计目标

YARN 运行过程剖析YARN设计目标 YARN 运行过程剖析 一个Job在YARN中的处理过程&#xff1a; 客户端向RM提交一个job&#xff0c;进入RM中的调度器队列以供调度RM中的AppManager与NM协商协商好一个容器&#xff0c;以启动一个App Master实例App Master启动之后向RM注册并根据Jo…

刷题第五十一天 84. 柱状图中最大矩形

好难&#xff0c;看解析&#xff1a; # 双指针 class Solution:def largestRectangleArea(self, heights: List[int]) -> int:size len(heights)# 两个DP数列储存的均是下标indexmin_left_index [0] * sizemin_right_index [0] * sizeresult 0# 记录每个柱子的左侧第一…

量化服务器 - 后台挂载运行

服务器 - 后台运行 pip3命令被kill 在正常的pip命令后面加上 -no-cache-dir tmux 使用教程 https://codeleading.com/article/40954761108/ 如果你希望在 tmux 中后台执行一个 Python 脚本&#xff0c;你可以按照以下步骤操作&#xff1a; 启动 tmux: tmux这将会创建一个新…

Ubuntu 常用命令之 ps 命令用法介绍

&#x1f4d1;Linux/Ubuntu 常用命令归类整理 ps命令是Linux下的一个非常重要的命令&#xff0c;它用于查看系统中的进程状态。ps是Process Status的缩写&#xff0c;可以显示系统中当前运行的进程的状态。 以下是一些常用的参数 a&#xff1a;显示所有进程&#xff08;包括…

【机器学习】决策树

参考课程视频&#xff1a;https://www.icourse163.org/course/NEU-1462101162?tid1471214452 1 概述 样子&#xff1a; 2 分裂 2.1 分裂原则 信息增益 信息增益比 基尼指数 3 终止 & 剪枝 3.1 终止条件 无需分裂 当前节点内样本同属一类 无法分裂 当前节点内…

【数据结构】四、串

目录 一、定义 二、表示与实现 定长顺序存储 堆分配存储 链式存储 三、BF算法 四、KMP算法 1.求next数组 方法一 方法二&#xff08;考试方法&#xff09; 2.KMP算法实现 方法一 方法二 3.nextval 4.时间复杂度 本节最重要的就是KMP算法&#xff0c;其他要求不高…

融资项目——swagger2的注解

1. ApiModel与ApiModelProperty(在实体类中使用) 如上图&#xff0c;ApiModel加在实体类上方&#xff0c;用于整体描述实体类。ApiModelProperty(value"xxx",example"xxx")放于每个属性上方&#xff0c;用于对属性进行描述。swagger2网页上的效果如下图&am…