YULIN Arcgis 无标签 2024年12月05日 03:40:00 625 超图SuperMap+openlayer+Vue3实现SQL查询 ```javascript // 通用 SQL 查询方法 export const querySQL = async (sql: string) => { const mapStore = useMapStore(); const visibleLayers = getVisibleImageLayers(); if (visibleLayers.length === 0) { console.log('没有可查询的图层'); mapStore.clearFeatures(); return; } try { const queries = visibleLayers.map(async (layer) => { const layerName = layer.get('source')?.name; const layerUrl = layer.get('source')?._url; const layerService = new LayerInfoService(layerUrl); const layersInfoRes = await layerService.getLayersInfo(); const subLayerName = layersInfoRes.result.subLayers.layers[0].name; if (!layerUrl || !subLayerName) { console.error(`图层 ${layer.get('title')} 缺少 URL 或 layerName`); return {layerTitle: layer.get('title'), features: []}; } const queryParams = new QueryBySQLParameters({ queryParams: { name: subLayerName, attributeFilter: sql, // 使用 SQL 查询条件 } }) const queryService = new QueryService(layerUrl); const result = await queryService.queryBySQL(queryParams); console.log('result', result) return { layerName, subLayerName, url: layerUrl, features: result?.result?.recordsets[0]?.features || [], }; }); const results = await Promise.all(queries); const formattedResults = results.map(({layerName, subLayerName, url, features}, index) => ({ layerName: '测试', subLayerName, url, features, isExpand: features.length > 0 && results.findIndex((r) => r.features.length > 0) === index, })); mapStore.setGeometryFeatures(formattedResults); console.log('SQL 查询结果:', formattedResults); } catch (error) { console.error('SQL 查询失败:', error); mapStore.clearFeatures(); } }; ``` 在supermap for openlayer中实现sql查询图层数据相对容易。new QueryService(layerUrl).queryBySQL(queryParams)即可直接进行SQL查询,唯一需要注意的是QueryBySQLParameters.name这里指的是sublayerName,这一点在文档中没有说明容易造成混淆和屡屡请求失败却找不到问题。 在属性过滤中的SetLayersInfoParameters.layersInfo中也有一个name,这里的name却是总图层服务的name。超图的说明文档不明确这一点巨坑! 在设置请求参数的name的时候不要在iserver中手动复制,在网页中显示的名称不准确。需要调用`await layerService.getLayersInfo()`方法通过sdk来获取图层的属性。如果是用图层标题那么就是`layersInfoRes.result.name`,如果是用子图层那么就需要继续往下找`layersInfoRes.result.subLayers.layers[0].name`。 分享到QQ好友 Last 超图SuperMap+openlayer+Vue3实现几何查询空间查询 Next 没有了