如何通过Java代码实现AnyLogic GIS指定位置周边学校搜索及集合生成
AnyLogic GIS自动化地点搜索与POI采集实现方案
1. 提前配置模型基础元素
- 在Main代理中新增字符串类型参数
userInputLocation,勾选仿真窗口可编辑权限,用于接收用户输入的目标地点名称 - 新建两个智能体类型:
CustomPoint(存储用户输入的目标位置)、School(存储搜索到的学校信息),两类智能体均新增GISPoint类型变量location存储GIS坐标 - 在Main中新增元素类型为
School的集合schoolsAround,用于存储搜索到的学校智能体 - 确认GIS地图组件(默认命名为
map)已开启POI搜索权限,使用支持地点搜索的GIS服务(如内置OpenStreetMap服务)
2. 地址转坐标并生成目标位置智能体
以下代码可放入Main的启动动作,或userInputLocation参数的「更改时动作」中触发:
// 调用GIS地图搜索接口,根据用户输入文本获取匹配坐标 List<GISSearchResult> searchResults = map.search(userInputLocation); if(!searchResults.isEmpty()){ // 取优先级最高的第一条搜索结果坐标 GISPoint targetPoint = searchResults.get(0).getPoint(); // 生成目标位置智能体 CustomPoint target = add_customPoints(); target.location = targetPoint; // 在GIS地图上渲染智能体 target.setGISPosition(targetPoint); }
注:
customPoints为CustomPoint智能体对应种群的命名,可根据实际修改
3. 周边学校搜索与结果存储
在上述坐标获取成功的逻辑分支后,追加以下代码实现周边学校搜索:
// 定义搜索半径,单位为米,示例为3公里搜索范围 double searchRadius = 3000.0; // 搜索指定范围内的学校类POI List<GISPOI> poiResults = map.searchPOI(targetPoint, searchRadius, GISPOICategory.AMENITY_SCHOOL); // 清空历史搜索结果 schoolsAround.clear(); // 遍历POI结果生成学校智能体并存储 for(GISPOI poi : poiResults){ School school = add_schools(); school.location = poi.getPoint(); school.setGISPosition(poi.getPoint()); // 可选:赋值学校名称、地址等扩展属性 school.name = poi.getName(); school.address = poi.getAddress(); // 存入结果集合 schoolsAround.add(school); }
注意:低版本AnyLogic的
GISPOICategory枚举命名可能存在差异,可在代码编辑器中使用代码补全功能查看对应版本的枚举值;搜索无结果时优先检查GIS服务网络连接状态、搜索半径配置是否合理。
4. 触发逻辑配置
- 需用户输入后实时触发:将上述两段代码放入
userInputLocation参数的「更改时动作」中 - 需模型启动自动执行:将代码放入Main的「启动」动作中
内容的提问来源于stack exchange,提问作者Ann Francis
相关产品推荐
相关产品推荐

