创建本地旅行地图:不依赖第三方服务的D3.js项目

需积分: 9 0 下载量 41 浏览量 更新于2024-12-21 收藏 94KB ZIP 举报
资源摘要信息:"该资源是一个名为'visited_places'的项目,是一个使用D3.js库创建的简单、静态的本地旅行地图应用程序。它允许用户通过一个Web应用程序可视化地展示他们在旅行中访问过的国家和城市等地方。这个应用程序的特点在于它是完全独立的,没有后端依赖,不使用如Google Maps这样的第三方服务,从而避免了第三方服务变更可能带来的影响。所有的依赖项都被本地化,即存储在本地,而非从互联网上获取。用户访问过的国家和城市信息被保存在一个类似JSON的简单文件中,用户可以使用任何文本编辑器进行编辑。" 详细知识点: 1. D3.js的使用:D3.js是一个JavaScript库,用于将数据和文档结合在一起,通过数据驱动的方式来操作文档。D3.js可以用于创建动态和交互式的数据可视化,例如地图、图表、信息图等。在这个项目中,D3.js被用来将用户访问过的地点数据转换成地图上的视觉元素。 2. 静态Web应用程序:静态网页不同于动态网页,它不包含任何服务器端的处理,内容在服务器上是静态的。用户每次访问相同的URL时,都会获取到相同的HTML内容。在这个项目中,地图应用程序作为一个静态页面,意味着所有的数据处理和可视化都发生在用户的浏览器中。 3. 自主托管(Self-Hosted):与依赖第三方服务不同,自主托管意味着用户可以将应用程序的所有依赖项复制到自己的服务器上,从而完全控制应用程序。这个项目不需要用户连接到互联网来获取任何数据或服务,这意味着它可以离线使用。 4. JSON数据格式:JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在这个项目中,用户可以编辑countries.js和cities.js文件来更新他们的旅行数据。这两个文件可能采用了类似JSON的格式,用以存储和展示数据。 5. 本地化依赖:项目的所有依赖项都保存在本地,这包括了D3.js库和地图可视化所需的其他相关文件。这意味着项目不依赖于任何远程服务器或外部API,从而使得用户能够自主管理和控制所有必要的文件。 6. 可视化访问过的地方:该项目允许用户通过地图形式查看他们所访问过的国家和城市。这可能是通过在地图上放置标记、连线或者其他图形化的方式展示用户旅行的轨迹。 7. 缺少功能和社区贡献:项目描述中提到了目前缺少的功能,如无缩放功能。这是一个开放的请求,鼓励社区贡献代码来增强应用程序的功能,同时强调需要干净的代码贡献,以避免项目代码变得臃肿(即“不要肿!”)。 8. Git仓库的使用:项目可以通过克隆Git仓库来获取,这是现代软件开发中常用的版本控制和协作的方法。用户可以将Git仓库克隆到本地,然后对项目进行编辑和使用。 9. HTML和JavaScript结合:项目使用HTML来构建基础的页面结构,JavaScript(特别是D3.js库)用于处理数据并创建动态内容,例如地图上的位置点。 综上所述,该资源是一个独立的旅行地图Web应用程序,它通过使用D3.js库和本地化的数据文件,允许用户以可视化的方式展示他们的旅行历史。它避免了对第三方服务的依赖,提供了自主托管的可能性,并鼓励社区参与改进。

class AbstractGreedyAndPrune(): def __init__(self, aoi: AoI, uavs_tours: dict, max_rounds: int, debug: bool = True): self.aoi = aoi self.max_rounds = max_rounds self.debug = debug self.graph = aoi.graph self.nnodes = self.aoi.n_targets self.uavs = list(uavs_tours.keys()) self.nuavs = len(self.uavs) self.uavs_tours = {i: uavs_tours[self.uavs[i]] for i in range(self.nuavs)} self.__check_depots() self.reachable_points = self.__reachable_points() def __pruning(self, mr_solution: MultiRoundSolution) -> MultiRoundSolution: return utility.pruning_multiroundsolution(mr_solution) def solution(self) -> MultiRoundSolution: mrs_builder = MultiRoundSolutionBuilder(self.aoi) for uav in self.uavs: mrs_builder.add_drone(uav) residual_ntours_to_assign = {i : self.max_rounds for i in range(self.nuavs)} tour_to_assign = self.max_rounds * self.nuavs visited_points = set() while not self.greedy_stop_condition(visited_points, tour_to_assign): itd_uav, ind_tour = self.local_optimal_choice(visited_points, residual_ntours_to_assign) residual_ntours_to_assign[itd_uav] -= 1 tour_to_assign -= 1 opt_tour = self.uavs_tours[itd_uav][ind_tour] visited_points |= set(opt_tour.targets_indexes) # update visited points mrs_builder.append_tour(self.uavs[itd_uav], opt_tour) return self.__pruning(mrs_builder.build()) class CumulativeGreedyCoverage(AbstractGreedyAndPrune): choice_dict = {} for ind_uav in range(self.nuavs): uav_residual_rounds = residual_ntours_to_assign[ind_uav] if uav_residual_rounds > 0: uav_tours = self.uavs_tours[ind_uav] for ind_tour in range(len(uav_tours)): tour = uav_tours[ind_tour] quality_tour = self.evaluate_tour(tour, uav_residual_rounds, visited_points) choice_dict[quality_tour] = (ind_uav, ind_tour) best_value = max(choice_dict, key=int) return choice_dict[best_value] def evaluate_tour(self, tour : Tour, round_count : int, visited_points : set): new_points = (set(tour.targets_indexes) - visited_points) return round_count * len(new_points) 如何改写上述程序,使其能返回所有已经探索过的目标点visited_points的数量,请用代码表示

2023-06-10 上传