You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Microsoft Atlas Rest API中实现基于半径的患者标记筛选?

解决方案:用Azure Maps(Microsoft Atlas)空间查询API高效实现半径筛选

针对你遇到的数千条数据计算距离开销高的问题,核心思路是把地理空间筛选的压力交给Azure Maps服务端,而非在客户端或自定义API中自行计算。具体步骤如下:

  • 给数据源添加地理空间索引
    不管你用Azure Cosmos DB、Azure SQL还是Atlas自带的Data Service存储患者位置,务必给坐标列创建地理空间索引——这是高效空间查询的基础,能避免全表扫描。比如在Azure SQL中,给Location(geography类型)列创建索引:

    CREATE SPATIAL INDEX IX_Patient_Location ON Patients (Location)
    
  • 调用Azure Maps空间查询API执行半径筛选
    直接借助Atlas原生API返回指定半径内的患者,无需自行计算距离:

    1. 若患者数据以POI(兴趣点)形式存储,使用Search Nearby API:
      GET https://atlas.microsoft.com/search/nearby/json?api-version=1.0&lat={医生当前纬度}&lon={医生当前经度}&radius={设置的筛选半径(单位:米)}&type=POI&subscription-key={你的Atlas密钥}
      
    2. 若患者数据托管在Atlas的Data Service中,使用Get Features API并添加空间过滤条件:
      GET https://atlas.microsoft.com/feature/data/{你的数据集ID}/features/json?api-version=1.0&filter=geo_distance(geometry, geography'POINT({医生经度} {医生纬度})') <= {筛选半径(米)}&subscription-key={你的Atlas密钥}
      

    这类API会在服务端完成空间计算,仅返回符合条件的患者数据,大幅降低数据传输量与客户端开销。

  • 简化客户端地图渲染
    获取API返回结果后,直接在Atlas地图上生成标记即可,示例JavaScript代码:

    // 初始化地图
    const map = new atlas.Map('mapContainer', {
        subscriptionKey: '你的Atlas密钥',
        center: [医生经度, 医生纬度],
        zoom: 12
    });
    
    // 渲染筛选后的患者标记
    function renderPatientMarkers(patientList) {
        const dataSource = new atlas.source.DataSource();
        map.sources.add(dataSource);
    
        patientList.forEach(p => {
            dataSource.add(new atlas.data.Point([p.longitude, p.latitude]));
        });
    
        // 添加标记层
        map.layers.add(new atlas.layer.SymbolLayer(dataSource));
    }
    
  • 额外性能优化建议

    • 分页获取:若数据量极大,使用pageSize参数分批拉取,避免单次请求返回过多数据导致卡顿。
    • 缓存结果:若医生短时间内位置与筛选半径未变,缓存API返回值,减少重复请求。

内容的提问来源于stack exchange,提问作者Devbrat Kar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:57:21