我的 MapServer 包含一个从参数化 Web 服务获取 GeoJSON 特征的层。这些要素是通过聚合点生成的多边形,每个要素都有一个属性,指示聚合的点的数量。我在地图文件中有不同的类,根据点数以不同的颜色显示每个要素。
但是,根据参数值,Web 服务可能会返回没有任何功能的响应,因此也没有属性,这会导致以下 MapServer 错误:
msOGRLayerInitItemInfo():OGR 错误。字段名称无效:COLLECTION_POINTS 层中的 num_points
这是从参数化 Web 服务获取 GeoJSON 特征的相应图层的地图文件:
LAYER
NAME "COLLECTION_POINTS"
TYPE POLYGON
CONNECTIONTYPE OGR
VALIDATION
"col" "^[0-9]+$"
END
CONNECTION "http://myservice/%col%/agg_points"
DATA "agg_points"
# [snip metadata and projection stuff]
CLASS
NAME "<= 100 pts"
EXPRESSION ([num_points] < 101)
STYLE
COLOR "#D88A01"
OUTLINECOLOR "#D88A01"
END
END
CLASS
NAME "<= 500 pts"
EXPRESSION ([num_points] < 501)
STYLE
COLOR "#EA8015"
OUTLINECOLOR "#EA8015"
END
END
CLASS
NAME "> 500 pts"
EXPRESSION ([num_points] > 500)
STYLE
COLOR "#BC2110"
OUTLINECOLOR "#BC2110"
END
END
END
有没有办法避免 MapServer 错误?例如,在类表达式中使用某个属性之前是否可以检查该属性是否存在?或者我应该更好地调整我的客户端来处理 MapServer HTML 错误响应?
在
LAYER
内尝试使用:
PROCESSING "EMPTY=IGNORE"
或
PROCESSING "EMPTY=REPLACE default_data_source"
使用第二种解决方案,您应该将 default_data_source 定义为非空默认层,当您的请求失败时将加载该默认层。