查询分析(要素服务/图层)
- URL:https://<layerID-url>/queryAnalytic
- 引入版本:GeoScene Online:March, 2020 | GeoScene Enterprise:3.0
说明
queryAnalytic API 公开了标准的 SQL 窗口函数,这些函数根据称为窗口分区的一组行计算聚合值和排序值。窗口函数应用于对行进行分区和排序后的行。此操作在查询结果集中定义一个窗口或用户指定的行集,可用于计算聚合值,如移动平均值、累计聚合或运行总计。
3.1 中的新增内容
- 在 3.1 版本中,引用企业级地理数据库数据的非托管要素服务支持 queryAnalytic,并由 GeoScene Pro 进行发布,包括线性回归。支持 queryAnalytic 的服务在 advancedQueryCapabilities 下的 supportsQueryAnalytic 属性为 true。
- GeoScene Enterprise 中的关系数据存储的托管要素服务在 GeoScene Enterprise 3.0 中开始支持 queryAnalytic,但在 3.1 中增加了对线性回归的支持。
- 以下是 3.1 中包含的高级 queryAnalytic 功能列表。若要查看服务支持哪些高级功能,请检查 advancedQueryAnalyticCapabilities 图层属性。如果未列出高级功能,则可能不支持该功能。
- supportsLinearRegression:为 true,如果 queryAnalytic 支持线性回归 ("analyticType": "LinRegR2")
- supportsAsync:为 true,如果 queryAnalytic 支持异步处理 (async 参数)。请注意,从 3.1 版本开始,Enterprise 要素服务不支持 async=true。
- supportsPercentileAnalytic:为 true,如果 queryAnalytic 操作支持百分位数 (analyticType="PERCENTILE_CONT" 或 analyticType="PERCENTILE_DISC")。
请求参数
参数 | 详细说明 |
---|---|
where (可选) | 定义源行的查询过滤器的 WHERE 子句。有关 WHERE 子句的详细信息,请参阅下面的 Where 和 AnalyticWhere 部分。 示例
|
analyticWhere | 查询过滤器的 WHERE 子句,该子句可应用于应用源 where 子句和所有其他参数的结果集。有关 WHERE 子句的详细信息,请参阅下面的 Where 和 AnalyticWhere 部分。 示例
|
geometry (可选) | 要应用为空间过滤器的几何。几何的结构与 GeoScene REST API 返回的 JSON 几何对象的结构相同。除 JSON 结构之外,还可以使用简单的逗号分隔语法指定包络和点几何。有关几何对象的 JSON 结构的更多信息,请参阅几何对象参考。 语法示例
示例
|
geometryType | 由 geometry 参数指定的几何类型。几何类型可以是包络、点、线或或多边形。默认几何类型为包络。 值:esriGeometryPoint | esriGeometryMultipoint | esriGeometryPolyline | esriGeometryPolygon | esriGeometryEnvelope |
inSR | 输入几何的空间参考。可以将空间参考指定为熟知 ID 或空间参考 JSON 对象。如果未指定 inSR,则几何假定位于地图的空间参考中。 |
outSR | 返回几何的空间参考。可以将空间参考指定为熟知 ID 或空间参考 JSON 对象。如果未指定 outSR,则在地图的空间参考中返回几何。 |
spatialRel | 执行查询时要应用于输入几何的空间关系。支持的空间关系包括相交、包含、包络相交、位于等。默认的空间关系为相交 (esriSpatialRelIntersects)。 值:esriSpatialRelIntersects | esriSpatialRelContains | esriSpatialRelCrosses | esriSpatialRelEnvelopIntersects | esriSpatialRelIndexIntersects | esriSpatialRelOverlaps | esriSpatialRelTouches | esriSpatialRelWithin |
outFields | 要包含在返回结果集中的字段列表。此列表是以逗号分隔的字段名称列表。您也可以指定通配符 "*" 作为此参数的值。在这种情况下,查询结果将包含所有字段值。 示例
|
returnGeometry | 如果为 true,则结果包括与每个返回要素相关联的几何。默认值为 true。 值:true | false |
outAnalytics | 要计算的一个或多个基于字段或表达式分析的定义。此参数的语法是一组分析定义。分析定义可指定分析的类型,要在其上计算的字段或表达式,以及生成的输出字段名称。有关 outAnalytics 语法属性的更多信息,请参阅以下 outAnalytics 概述部分。 从 3.1 开始,outAnalytics 参数还支持计算线性回归的语法。线性回归可描述绘制数据值时的最佳拟合线。要获取线性回归,outAnalytics 参数采用 "analyticType": "LinReg2",以及 onAnalyticField 参数中的两个字段列表。两个字段中的第一个字段表示沿 x 轴的值,而第二个字段表示沿 y 轴的值。您不能将 "analyticType": "LinRegR2" 与同一调用中的其他 analyticTypes 组合在一起。 与其他 analyticTypes 不同,线性回归的结果包括三个值,它们描述了如何绘制最佳拟合线。这些包括:
因为线性回归 ("analyticType": "LinRegR2") 总是返回具有三个值的结果,有些参数是不适用的,如 outSR 或 analyticWhere。 ![]() 对于运行在 SAP HANA 上的服务,windowFrame type 属性的 "RANGE" 值不受支持。 语法
示例
线性回归示例
线性回归属性示例
|
orderByFields | 需要在其上排序要素/记录的一个或多个字段名称。分别使用 ASC 或 DESC 在每个字段之后进行升序或降序来控制排序。如果未指定 <ORDER>,则 orderByFields 默认为 ASC (升序)。orderByFields 仅在那些指示 supportsAdvancedQueries 为 true 的图层/表上受支持。 ![]() 如果 supportsOrderByOnlyLayerFields 为 true,则只有图层字段数组中的字段可以与 orderByFields 参数一起使用。例如,如果 supportsOrderByOnlyOnLayerFields 为 true,则不能使用 outStatistics 中的 outStatisticfieldName。 语法
示例
|
resultType | resultType 参数可用于控制查询操作返回的要素数量。当客户端在查询要素时使用虚拟切片方案时,将使用 title 值,该方法类似于切片地图服务图层中的切片。standard 值用于 nontiled 查询,其中客户端将仅发送一个完整范围查询。此参数的支持在 supportsQueryWithResultType 属性的图层元数据上公布。有关 resultType 参数及其如何与最大记录计数交互的其他信息,请参阅结果类型和最大记录计数。 值:none | standard | tile |
cacheHint | 指示是否应缓存查询结果。只有当图层将 supportsQueryWithCacheHint 指定为 true 时,才支持此参数。cacheHint 的默认值为 false。 值:true | false |
resultRecordCount | 此选项可用于最多获取指定的 resultRecordCount 的查询结果。如果指定了 resultOffset 但未指定此参数,则地图服务会将其默认为 maxRecordCount。此参数的最大值是图层的 maxRecordCount 属性的值。为此参数输入的最小值不能低于 1。如果 supportsPagination 为 true,此参数才适用。
|
quantizationParameters | 用于将几何投影到虚拟格网上的 JSON 对象,可能表示屏幕上的像素。JSON 对象的属性包括 extent、mode、originPosition 和 tolerance。有关更多信息,请参阅下面的 quantizationParameters JSON 属性部分。 ![]() 只有当图层的 supportsCoordinatesQuantization 属性为 true 时,才支持此参数。
|
async | 指定操作是同步运行 (false) 还是异步运行 (true)。 值:true | false |
sqlFormat | sqlFormat 参数可以是使用 SQL-92 标准的 standard,也可使用基础数据存储的本机 SQL 将其指定为 native。 值:none | standard | native |
dataFormat | 响应中返回的更改的格式。 值:json | pbf |
async | 指定操作是同步运行 (false) 还是异步运行 (true)。 ![]() GeoScene Enterprise 要素服务不支持异步运行此操作。 值:true | false |
f | 响应格式。默认响应格式为 html。 值:html | json | pjson | pbf |
Where 和 analyticWhere 子句
可以使用 where 和 analyticWhere 子句控制源行和输出结果。queryAnalytic API 中的 Where 子句可用于过滤计算分析类型结果时使用的源数据。analyticWhere 子句可用于过滤从 queryAnalytic 返回的结果。示例用例包括过滤以移除重复数据或返回带有 Row_Number 的顶部行。任何字段,包括输出中的别名,包括 outputAnalyticField,都可以在 analyticWhere 子句中使用。
quantizationParameters JSON 属性
下面列出了 quantizationParameters JSON 对象中包含的属性。
属性 | 说明 |
---|---|
extent | 定义量化网格边界的范围。如果为查询指定了其空间参考,则其 spatialReference 与输入几何空间参考相匹配。否则,范围将在图层的空间参考中。 |
mode | view 值指定了应优化几何坐标以查看和显示数据edit 指定了应返回全分辨率几何,这可以支持无损编辑。 ![]() 仅当 supportsQuantizationEditMode 图层属性为 true 时,才可以使用编辑值。 值:view | edit |
originPosition | 相对于此属性值定义的原点位置将返回整数坐标。默认值是 upperLeft。 值:upperLeft | lowerLeft |
tolerance | tolerance 是一个像素的大小,使用 outSpatialReference 的单位。此数字用于通过构建分辨率与容差相匹配的格网将坐标转换为整数。然后将每个坐标捕捉到格网上的一个像素。移除捕捉到相同像素的连续坐标,以减小整体响应大小。 容差的单位由 outSpatialReference 定义。如果未指定 outSpatialReference,则假定容差使用图层空间参考的单位。 如果将 mode 设置为 edit,则容差始终设置为空间参考的全分辨率容差。 |
outAnalytics 概述
QueryAnalytic 操作可在查询结果集中定义一个窗口 (用户指定的行集),以计算聚合值,如移动平均值、累计聚合和运行总计。调用操作时传递的 outAnalytics 参数可为将要计算的一个或多个基于字段或表达式的分析提供定义。此信息作为分析定义数组传递,该分析定义指定了分析类型、要在其上计算的字段或表达式,以及生成的输出字段名称。以下各节分解了 outAnalytics 的语法,并提供有一些示例,说明如何自定义它以衡量收入增长、运行总数和过滤重复数据。
语法
[
{
"analyticType": "<COUNT | SUM | MIN | MAX | AVG | STDDEV | VAR | FIRST_VALUE, LAST_VALUE, LAG, LEAD, PERCENTILE_CONT,PERCENTILE_DISC, PERCENT_RANK, RANK, NTILE, DENSE_RANK, EXPRESSION>",
"onAnalyticField": "Field1",
"outAnalyticFieldName": "Out_Field_Name1",
"analyticParameters”: {
"orderBy": "<orderBy expression",
"value": <double value>, // percentile value
"partitionBy": "<field name or expression>",
"offset": <integer>, // used by LAG/LEAD
"windowsFrame": {
"type": "ROWS" | "RANGE",
"extent": {
"extentType": "PRECEDING" | "BOUNDARY",
"PRECEDING": {
"type": <"UNBOUNDED"|"NUMERIC_CONSTANT"|"CURRENT_ROW">
"value": <numeric constant value>
},
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING", "NUMERIC_PRECEDING", "CURRENT_ROW",
"startValue": <numeric constant value>,
"end": <"UNBOUNDED_FOLLOWING"|"NUMERIC_FOLLOWING"|"CURRENT_ROW">,
"endValue": <numeric constant value>
}
}
}
}
}
]
以下部分将更详细地描述上面列出的 outAnalytics 属性的各个方面:
- analyticType:SQL 窗口函数
- partitionBy:分区
- windowsFrame:了解 winodwsFrame
- extent:windowsFrame 范围
有关 outAnalytics 的示例方案,请参阅下面的 outAnalytics 示例部分。
SQL 窗口函数
窗口函数可跨与当前行相关的一组行(SQL 分区或窗口)执行计算。与常规聚合函数不同,使用窗口函数不会返回单个输出行。这些行保留各自的标识,每次计算均作为新字段值追加。而且,窗口函数可以访问的不仅仅是查询结果的当前行。
QueryAnalytic 目前支持下列窗口函数:
- 聚合函数
- 分析函数
- 排序函数
这些函数的值通过 outAnalytics 的 analyticType 属性传递。
聚合函数
聚合函数是确定性函数,可对一组值执行计算以返回单个值。聚合函数可在具有可选性 HAVING 子句的 select 列表中使用,而 GROUP BY 子句也可用于计算行类别上的聚合。支持的聚合函数有:
- MIN
- MAX
- SUM
- COUNT
- AVG
- STDDEV
- VAR
语法
[
{
"analyticType": "MAX",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "Max_Value",
"analyticParameters": {
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"MAX","onAnalyticField":"POP1990","analyticParameters"{"partitionBy":"state_name"},"outAnalyticFieldName":"Max_Value"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
分析函数
分析函数可根据一组行或窗口分区计算聚合值。与聚合函数不同,分析函数可以为每个组返回单行或多行。支持的分析函数有:
- CUME_DIST
- FIRST_VALUE
- LAST_VALUE
- LEAD
- LAG
- PERCENTILE_DISC
- PERCENTILE_CONT
- PERCENT_RANK
CUME_DIST
CUME_DIST 函数可计算值在一组值中的累积分布(使用 partitionBy 子句进行定义)。CUME_DIST 可计算指定值在一组值中的相对位置。例如,组中给定行的累积分布等于其值小于或等于 r 值的行数除以组中的总行数。CUME_DIST 返回的值范围大于 0 且小于或等于 1。
语法
[
{
"analyticType": "CUME_DIST",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "CumDistance",
"analyticParameters": {
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"CUME_DIST","onAnalyticField":"POP1990","outAnalyticFieldName":"CumDistance","analyticParameters":{"partitionBy":"state_name"}}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json
FIRST_VALUE
FIRST_VALUE 函数可返回有序值集中的第一个值。
语法
[
{
"analyticType": "FIRST_VALUE",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "FirstValue",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"FIRST_VALUE","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name"},"outAnalyticFieldName":"FirstValue"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json
LAST_VALUE
LAST_VALUE 函数可返回由 partitionBy 子句定义的有序值集中的最后一个值。
[
{
"analyticType": "LAST_VALUE",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "LastValue",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"LAST_VALUE","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","paritionBy":"state_name"},"outAnalyticFieldName":"LastValue"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
LEAD
LEAD 函数可从同一结果集中的后续行访问数据,而不使用自连接。LEAD 提供了对当前行之后的给定物理 offset 处的行的访问。偏移值在 analyticParameters JSON 对象中定义。
语法
[
{
"analyticType": "LEAD",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "Lead_Value",
"analyticParameters": {
"orderBy": "POP1990 desc",
"partitionBy": "state_name",
"offset": 2
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"LEAD","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name","offset":2},"outAnalyticFieldName":"LEAD_Value"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
LAG
LAG 函数可从同一结果集中的前一行访问数据,而不使用自连接。LAG 提供了对位于当前行之前的给定物理 offset 处的行的访问。偏移值在 analyticParameters JSON 对象中定义。注意,对于组中的第一行或者对于超出该组范围的前几行,每个分区组中的第一行均返回空 LAG 值。
语法
[
{
"analyticType": "LAG",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "Lag_Value",
"analyticParameters": {
"orderBy": "POP1990 desc",
"partitionBy": "state_name",
"offset": 2
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"LAG","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name","offset":2},"outAnalyticFieldName":"LAG_VALUE"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
PERCENTILE_CONT
PERCENTILE_CONT 分析函数可根据列值的连续分布计算百分位数,类似于使用百分位数查找中位数。如果元素数为偶数,则 PERCENTILE_CONT 将通过相加两个中间数并除以 2 来计算。如果元素数为奇数,则 PERCENTILE_CONT 将通过选择中间数来计算。

如果该值不在列表中,则函数将根据指定的百分位数值进行插值以计算百分位数。
语法
[
{
"analyticType": "PERCENTILE_CONT",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "PERCENTILE_CVALUE",
"analyticParameters": {
"orderBy": "POP1990 desc",
"partitionBy": "state_name",
"value": 0.50
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"PERCENTILE_CONT","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name","value":0.5},"outAnalyticFieldName":"PERCENTILE_CVALUE"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
PERCENTILE_DISC
PERCENTILE_DISC 分析函数可为整个结果中的排序值或由 partition by 子句定义的不同分区中的排序值来计算特定的百分位数。对于给定的百分位数值 P,PERCENTILE_DISC 可对 ORDER BY 子句中的表达式值进行排序,并返回大于或等于 P 的最小值。
语法
[
{
"analyticType": "PERCENTILE_DISC",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "PERCENTILE_DVALUE",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name",
"value": 0.50
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"PERCENTILE_DISC","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"POP1990","value":0.50},"outAnalyticFieldName":"PERCENTILE_DVALUE"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
PERCENT_RANK
PERCENT_RANK 分析函数可计算由 partition by 子句定义的一组行中行的相对排名。使用 PERCENT_RANK 计算值在查询结果或分区中的相对位置。
语法
[
{
"analyticType": "PERCENT_RANK",
"onAnalyticField": "POP1990",
"outAnalyticFieldName": "Percent_Rank",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"PERCENT_RANK","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name"},"outAnalyticFieldName":"Percent_Rank"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
排名函数
排名函数可为分区中的每一行返回一个排名值。根据所使用的函数,某些行可能会收到与其他行相同的值。以下显示了单个分区内不同排名函数(基于值列)之间的差异:
Id | 值 | RANK | DENSE_RANK | Row_Number |
---|---|---|---|---|
1 | 1 | 1 | 1 | 1 |
2 | 2 | 2 | 2 | 2 |
3 | 2 | 2 | 2 | 3 |
4 | 5 | 4 | 3 | 4 |
5 | 8 | 5 | 4 | 5 |
支持的排名函数有:
- RANK
- NTILE
- DENSE_RANK
- ROW_NUMBER
RANK
返回结果集分区内每一行的排名。行的排名是 1 加上行前面的排名数。RANK 返回排序分区内的排名。重复数分配的排名相同,且会跳过下一个排名。例如,如果有 3 个项目排名为 2,则列出的下一个排名将是 5。
语法
[
{
"analyticType": "RANK",
"outAnalyticFieldName": "Rank_Value",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"RANK","onAnalyticField":"POP1990","outAnalyticFieldName":"Rank_Value","analyticParameters": {"orderBy":"POP1990","partitionBy":"state_name"}}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
DENSE_RANK
此函数可返回结果集分区中每一行的排名,且排名值中没有空隙。特定行的排名是 1 加上该特定行之前的不同排名值的数目。DENSE_RANK 可返回排序分区内的排名,但排名是连续的。如果有多个项目的排名,则不跳过这些排名。
语法
[
{
"analyticType": "DENSE_RANK",
"outAnalyticFieldName": "DenseRank_Value",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"DENSE_RANK","onAnalyticField":"POP1990","analyticParameters":{"partitionBy":"state_name","orderBy":"POP1990"},"outAnalyticFieldName":"DenseRank_Value"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
NTILE
此函数可将有序分区中的行分配到指定数量的组中。对组进行编号,从一开始。对于每一行,NTILE 将返回该行所属组的编号。
语法
[
{
"analyticType": "NTILE",
"outAnalyticFieldName": "DenseRank_Value",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name",
"nTileExpression": 4
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/arcgis/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"NTILE","analyticParameters":{"partitionBy":"state_name","orderBy":"POP1990","nTileExpression":4},"outAnalyticFieldName":"NTile_Value"}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
ROW_NUMBER
ROW_NUMBER 函数可用于为 partitionBy 子句中的行提供连续编号。它将为第一行赋值 1,并增加后续行的数量。根据 orderBy 参数对行进行排序。
语法
[
{
"analyticType": "ROW_NUMBER",
"outAnalyticFieldName": "Row_Number",
"analyticParameters": {
"orderBy": "POP1990",
"partitionBy": "state_name"
}
}
]
示例
https://services.arcgis.com/lidGgNLxw9LL0SbI/ArcGIS/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType":"ROW_NUMBER","outAnalyticFieldName":"Row_Number","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name"}}]&geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json&f=html&token=
分区 (partitionBy)
分区非常强大,有许多潜在的用途,例如在不同的行组上计算相同的度量。还可将 partitionBy 子句添加到窗口规范中,以便单独查看不同的行组。partitionBy 子句可将查询结果集划分为多个分区,且 SQL 窗口函数应用于每个分区。partitionBy 子句通常引用对结果进行分区的列,也可以是引用任何所选列(而不是别名)的值表达式(列表达式或函数)。
了解 windowsFrame
QueryAnalytic 的每个分析类型都支持 windowsFrame 属性。windowsFrame 属性可定义分区内当前行周围的行,在这些行上计算分析函数或类型。此类型的窗口框架允许物理 (ROWS) 和逻辑 (RANGE) 窗口框架类型。
语法
{
...
"windowsFrame": {
"type": "ROWS" | "RANGE",
"extent": {
"extentType": "PRECEDING" | "BOUNDARY",
//If extentType is PRECEDING
"PRECEDING": {
"type": < "UNBOUNDED"| "NUMERIC_CONSTANT"| "CURRENT_ROW">,
"value": <numeric constant value>
}
//If extentType is BOUNDARY
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING" | "NUMERIC_PRECEDING" | "CURRENT_ROW",
"startValue": <numeric constant value>,
"end": < "UNBOUNDED_FOLLOWING" | "NUMERIC_FOLLOWING" | "CURRENT_ROW",
"endValue": <numeric constant value>
}
}
}
}
默认 windowsFrame
如果未在 analyticParameter 对象中定义 windowsFrame,并且如果在分区中定义了 orderBy,则使用默认的 windowsFrame。默认的框架类型是 RANGE (逻辑),且每个当前行的窗口由前面的所有行定义。每个窗口框架中的顺序由 orderBy 子句定义。默认 windowsFrame 配置如下面的代码示例所示。
{
…
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "CURRENT_ROW"
}
}
}
…
}
windowsFrame 类型
ROWS
基于 ROWS 的 windowsFrame 类型是根据当前行的物理偏移量来计算窗口框架的。例如,以下窗口框架在当前窗口周围定义了一个大小为 3(最多为 3)的窗口框架。
{
…
"windowsFrame": {
"type": "ROWS",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"startValue": 3,
"endValue": 3
}
}
}
…
}
RANGE

对于运行在 SAP HANA 上的服务,windowFrame type 属性的 "RANGE" 值不受支持。
基于 RANGE 的 windowsFrame 类型可根据当前行周围的逻辑行范围 (基于行的 orderBy 键值) 计算窗口框架。可将所提供的范围值添加到键值或从键值中减去,以定义窗口框架的开始或结束范围边界。
windowsFrame 范围
windowsFrame 范围可定义当前行周围的窗口框架行。这可以是 PRECEDING 或 BOUNDARY。
PRECEDING
此参数定义了窗口框架的开始行。当前行将是窗口框架的结束行。PRECEDING 类型可以是 UNBOUNDED、NUMERIC_CONSTANT 或 CURRENT_ROW。
UNBOUNDED
UNBOUNDED 在分区的第一行启动窗口。UNBOUNDED 只能指定为窗口的起点。
{
...
"winodwsFrame": {
"type": "ROWS",
"extent": {
"extentType": "PRECEDING",
"type": "UNBOUNDED",
}
}
...
}
NUMERIC_CONSTANT (仅 ROWS)
NUMERIC_CONSTANT 是一个值或数值表达式,指示当前行之前的行数或值数。RANGE 窗口类型不允许使用此规范。
{
...
"windowsFrame": {
"type": "ROWS",
"extent": {
"extentType": "PRECEDING",
"type": "NUMERIC_CONSTANT",
"value": 5
}
}
}
CURRENT_ROW
当与 ROWS 一起使用时,指定窗口在当前行开始或结束,当与 RANGE 一起使用时,指定当前值。CURRENT_ROW 既可以指定为起点,也可以指定为终点。
{
...
"windowsFrame": {
"type": "ROWS",
"extent": {
"extentType": "PRECEDING",
"type": "CURRENT_ROW"
}
}
}
Boundary
与 ROWS 或 RANGE 一起使用,以指定窗口框的下(开始)和上(结束)边界点。start 属性可定义边界起点,end 可定义边界终点。上限不能小于下限。对于窗口框的 start 和 end,可以为 NUMERIC_CONSTANT 指定 startValue 和 endValue。
start
可接受的枚举是 UNBOUNDED_PRECEDING、NUMERIC_PRECEDING 和 CURRENT_ROW。仅在 NUMERIC_PRECEDING 中需要 startValue,用于指示在计算分析函数时,使用当前行之前的行数。
end
可接受的枚举是 UNBOUNDED_FOLLOWING、NUMERIC_FOLLOWING、CURRENT_ROW。仅在 NUMERIC_FOLLOWING 中需要 endValue,用于指示下列行数是计算分析函数时使用的当前行。
Boundary 示例
第一个示例演示了一个 BOUNDARY 范围类型,其中 start 值为 UNBOUNDED_PRECEDING,end 值为 UNBOUNDED_FOLLOWING:
{
"windowsFrame": {
"type": "ROWS",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "UNBOUNDED_FOLLOWING"
}
}
}
}
第二个示例演示了 BOUNDARY,其中 start 值为 UNBOUNDED_PRECEDING,end 值为 CURRENT_ROW:
{
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "CURRENT_ROW"
}
}
}
}
最后一个示例演示了一个 BOUNDARY 范围类型,其中 start 值为 NUMERIC_PRECEDING,end 值为 NUMERIC_FOLLOWING:对于本示例,窗口框包含 10 行,其中范围反映了在当前行之前,startValue 为 5 行,在当前行之后,endValue 为 4 行:
{
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "NUMERIC_PRECEDING",
"startValue": 5,
"end": "NUMERIC_FOLLOWING",
"endValue": 4
}
}
}
}
outAnalytic 示例
SQL 窗口函数可用于业务分析,如收入增长、运行总量、过滤重复数据或返回顶部行。
收入增长
与前一个月 (m0) 相比,m1 月份的收入增长计算如下:
100*(m1-m0)/m0
LAG SQL 窗口函数可用于返回上个月的销售额,并将其作为每个月销售额之外的新列返回。可计算以上表达式并作为新列返回。
示例
[
{
"analyticType": "LAG",
"onAnalyticField": "MonthlySales",
"outAnalyticFieldName": "PreviousMonthlySales",
"analyticParameters": {
"partitionBy": "ProductCatagory",
"orderBy": "Month"
}
}
]
运行总数
SQL 窗口函数可以计算一段时间内的运行总数。这是当前元素和以前所有元素的总和。例如,下面演示了运行的月总收入在下表列出的数据集中的外观。
Id | CustomerID | Month | Revenue | Running_Total |
---|---|---|---|---|
1 | A | 2018-01-01 | 100 | 100 |
2 | A | 2018-02-01 | 1200 | 1300 |
3 | A | 2018-03-01 | 1700 | 3000 |
[
{
"analyticType": "SUM",
"onAnalyticField": "Revenue",
"outAnalyticFieldName": "Running_Total",
"analyticParameters": {
"orderBy": "Month",
"partitionBy": "CustomerId",
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "CURRENT_ROW"
}
}
}
}
}
]
重复数据或最高行
另一个常见的用法是,过滤出重复数据或发现由 partitionBy 子句定义的重复数据。

在以下示例中,不需要定义 onAnalyticFieldName 属性。以下示例演示了如何指定
analyticWhere = (Row_Number = 1)或需要从查询返回的最高行。
Id | CutomerId | Month | Revenue | Row_Number |
---|---|---|---|---|
1 | A | 2018-01-01 | 100 | 1 |
2 | A | 2018-02-01 | 1200 | 2 |
3 | B | 2018-03-01 | 1700 | 1 |
[
{
"analyticType": "ROW_NUMBER",
"outAnalyticFieldName": "Row_Number",
"analyticParameters": {
"orderBy": "Month",
"partitionBy": "CustomerId",
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "CURRENT_ROW"
}
}
}
}
}
]
+ analyticWhere = (Row_Number = 1)
组中的最高行 (TopFilterQuery API)
SQL 窗口函数还可以返回由 partitionBy 子句定义的组中的顶部行。

在以下示例中,不需要定义 onAnalyticFieldName 属性。以下示例演示了如何指定
analyticWhere = (Row_Number <= {topRowCount})或需要从查询返回的最高行。
Id | CustomerId | Month | Revenue | Row_Number |
---|---|---|---|---|
1 | A | 2018-01-01 | 100 | 1 |
2 | A | 2018-02-01 | 1200 | 2 |
3 | B | 2018-03-01 | 1700 | 1 |
[
{
"analyticType": "ROW_NUMBER",
"outAnalyticFieldName": "Row_Number",
"analyticParameters": {
"orderBy": "Month",
"partitionBy": "CustomerId",
"windowsFrame": {
"type": "RANGE",
"extent": {
"extentType": "BOUNDARY",
"BOUNDARY": {
"start": "UNBOUNDED_PRECEDING",
"end": "CURRENT_ROW"
}
}
}
}
}
]
+ analyticWhere = (Row_Number <= 2) // Top 2 rows for each customer
用法示例
以下为 queryAnaltic 的示例请求:
https://orgServices.arcgis.com/ligGgNLxw9LL0SbI/ArcGIS/rest/services/counties/FeatureServer/0/queryAnalytic?where=1=1&analyticWhere=&outAnalytics=[{"analyticType": "FIRST_VALUE","onAnalyticField":"POP1990","analyticParameters":{"orderBy":"POP1990","partitionBy":"state_name"},"outAnalyticFieldName":"FirstValue"}]geometry=&geometryType=esriGeometryEnvelope&inSR=&spatialRel=esriSpatialRelIntersects&returnGeometry=true&resultType=none&outSR=&outFields=*&orderByFields=&cacheHint=false&quantizationParameters=&resultOffset=&resultRecordCount=&async=false&sqlFormat=none&dataFormat=json
JSON 响应示例
{
"objectIdFieldName": "FID",
"uniqueIdField": {
"name": "FID",
"isSystemMaintained": true
},
"globalIdFieldName": "GlobalID",
"geometryProperties": {
"shapeAreaFieldName": "Shape__Area",
"shapeLengthFieldName": "Shape__Length",
"units": "esriMeters"
},
"geometryType": "esriGeometryPolygon",
"spatialReference": {
"wkid": 102100,
"latestWkid": 3857
},
"fields": [
{
"name": "FID",
"type": "esriFieldTypeOID",
"alias": "FID",
"sqlType": "sqlTypeInteger",
"domain": null,
"defaultValue": null
},
{
"name": "NAME",
"type": "esriFieldTypeString",
"alias": "NAME",
"sqlType": "sqlTypeNVarchar",
"length": 32,
"domain": null,
"defaultValue": null
},
{
"name": "STATE_NAME",
"type": "esriFieldTypeString",
"alias": "STATE_NAME",
"sqlType": "sqlTypeNVarchar",
"length": 25,
"domain": null,
"defaultValue": null
},
{
"name": "STATE_FIPS",
"type": "esriFieldTypeString",
"alias": "STATE_FIPS",
"sqlType": "sqlTypeNVarchar",
"length": 2,
"domain": null,
"defaultValue": null
},
{
"name": "CNTY_FIPS",
"type": "esriFieldTypeString",
"alias": "CNTY_FIPS",
"sqlType": "sqlTypeNVarchar",
"length": 3,
"domain": null,
"defaultValue": null
},
{
"name": "FIPS",
"type": "esriFieldTypeString",
"alias": "FIPS",
"sqlType": "sqlTypeNVarchar",
"length": 5,
"domain": null,
"defaultValue": null
},
{
"name": "AREA",
"type": "esriFieldTypeDouble",
"alias": "AREA",
"sqlType": "sqlTypeFloat",
"domain": null,
"defaultValue": null
},
{
"name": "POP1990",
"type": "esriFieldTypeInteger",
"alias": "POP1990",
"sqlType": "sqlTypeInteger",
"domain": null,
"defaultValue": null
},
{
"name": "POP1996",
"type": "esriFieldTypeInteger",
"alias": "POP1996",
"sqlType": "sqlTypeInteger",
"domain": null,
"defaultValue": null
},
{
"name": "jn_fips",
"type": "esriFieldTypeInteger",
"alias": "jn_fips",
"sqlType": "sqlTypeInteger",
"domain": null,
"defaultValue": null
},
{
"name": "two_words1",
"type": "esriFieldTypeSmallInteger",
"alias": "two_words1",
"sqlType": "sqlTypeSmallInt",
"domain": null,
"defaultValue": null
},
{
"name": "Shape__Area",
"type": "esriFieldTypeDouble",
"alias": "Shape__Area",
"sqlType": "sqlTypeFloat",
"domain": null,
"defaultValue": null
},
{
"name": "Shape__Length",
"type": "esriFieldTypeDouble",
"alias": "Shape__Length",
"sqlType": "sqlTypeFloat",
"domain": null,
"defaultValue": null
},
{
"name": "GlobalID",
"type": "esriFieldTypeGlobalID",
"alias": "GlobalID",
"sqlType": "sqlTypeOther",
"length": 38,
"domain": null
},
{
"name": "FirstValue",
"type": "esriFieldTypeDouble",
"alias": "FirstValue",
"sqlType": "sqlTypeFloat",
"domain": null,
"defaultValue": null
}
],
"features": [
{
"attributes": {
"FID": 442,
"NAME": "Greene",
"STATE_NAME": "Alabama",
"STATE_FIPS": "01",
"CNTY_FIPS": "063",
"FIPS": "01063",
"AREA": 659.9269,
"POP1990": 10153,
"POP1996": 10092,
"jn_fips": 1063,
"two_words1": 0,
"Shape__Area": 2507773320.62891,
"Shape__Length": 340036.603117597,
"GlobalID": "a3ea8ef3-9905-4cd2-8b1d-75fecb31a2d9",
"FirstValue": 10153
},
"geometry": {
"rings": [
[
[-9764049.22989504, 3897523.70250823],
[-9763864.06631694, 3894438.48945744],
[-9766276.99053855, 3892428.71212731],
[-9767799.82407139, 3892396.3223483],
[-9767221.43802462, 3890754.83131371],
[-9768266.1043061, 3890229.99318935],
[-9767124.6168976, 3889423.78951268],
[-9767040.53634006, 3887429.02830046],
[-9768713.70506447, 3885769.01860212],
[-9770108.29965551, 3886035.64389694],
[-9769974.10797145, 3883436.99767052],
[-9772012.49143589, 3881722.93461246],
[-9773701.80090174, 3882477.52857487],
[-9775113.38033727, 3881778.07515039],
[-9775205.95550766, 3880029.35470343],
[-9777062.57857561, 3878190.90895415],
[-9777358.98876912, 3875178.50887073],
[-9776117.27113135, 3869847.64828906],
[-9778666.08329576, 3866515.14897504],
[-9781177.52566792, 3865291.91356823],
[-9781564.8129192, 3863972.3413004],
[-9779270.79412184, 3863209.33310761],
[-9776996.31380011, 3864797.97590721],
[-9776030.63472855, 3864479.3120523],
[-9774628.40329035, 3861380.03194152],
[-9776037.427146, 3860681.83064417],
[-9776580.14411079, 3857436.68163262],
[-9773900.5342823, 3857991.84481689],
[-9771429.85275421, 3850356.83939523],
[-9768208.37196789, 3850780.01261086],
[-9767134.82298093, 3849796.4388701],
[-9768565.08450671, 3847895.62214826],
[-9770061.59264512, 3848946.62228151],
[-9774326.04275803, 3847819.0114348],
[-9773041.86525493, 3845086.58230843],
[-9768682.28769288, 3844826.90519043],
[-9767047.33061801, 3841485.79143055],
[-9769523.96129528, 3838642.48001034],
[-9770639.12570542, 3840588.19457995],
[-9771973.41379732, 3840491.9447599],
[-9773099.61559469, 3835156.55646918],
[-9775207.63985946, 3832426.56865673],
[-9775999.21062473, 3835568.65225435],
[-9778906.44943175, 3835559.60664198],
[-9780211.8632698, 3833596.60388316],
[-9781700.72856744, 3835065.94780331],
[-9781768.67123516, 3838135.66264735],
[-9783704.27642361, 3841839.73913676],
[-9781375.42870597, 3843365.52773188],
[-9779962.15592591, 3840993.47048838],
[-9777946.70958588, 3841921.85422786],
[-9779835.60377046, 3844783.6286969],
[-9783536.95588581, 3844545.69536802],
[-9789748.90370197, 3846395.099872],
[-9791783.03863994, 3844320.40351661],
[-9797574.60437877, 3842185.09914856],
[-9802606.91925062, 3841961.3072789],
[-9804774.41679476, 3846870.14446497],
[-9802439.58605706, 3848942.27517538],
[-9802335.96116884, 3851771.43111383],
[-9800413.05390631, 3854513.46617654],
[-9801860.32498427, 3855077.59446579],
[-9806490.91885508, 3853761.17907],
[-9808839.3379389, 3854940.35400314],
[-9809124.71504293, 3856149.41807425],
[-9805269.56455638, 3858322.60682667],
[-9805853.05849125, 3859897.9947183],
[-9808208.27570117, 3860715.80886088],
[-9808189.62193144, 3866080.92444893],
[-9807754.76526926, 3866737.52793849],
[-9804972.32073288, 3865973.33764677],
[-9803714.47060567, 3868848.99967786],
[-9808445.30075647, 3869341.07519663],
[-9809851.83876014, 3872859.86341018],
[-9812775.26588512, 3872418.70597003],
[-9816165.84256448, 3873310.67680069],
[-9813393.61759618, 3875926.78916415],
[-9816394.36623128, 3878744.74230837],
[-9817536.78055787, 3884011.87141582],
[-9819112.31420268, 3884455.5100707],
[-9818042.16856902, 3887097.893599],
[-9815976.56562917, 3886828.19960253],
[-9816416.55667736, 3890216.59677064],
[-9813925.43177276, 3889880.02232767],
[-9814904.75995186, 3893820.1043432],
[-9814653.39071702, 3898650.83994008],
[-9812562.3193402, 3900072.06611394],
[-9811803.87014154, 3901935.74228992],
[-9805470.32365415, 3901662.1140983],
[-9804157.25985914, 3903879.70625472],
[-9800345.39685187, 3902068.87337528],
[-9799749.18772968, 3905143.43466553],
[-9792027.05160937, 3907682.98718314],
[-9787982.58180082, 3912517.90479856],
[-9777972.39153986, 3916342.29416258],
[-9777111.89298178, 3899452.36311752],
[-9764257.32422908, 3899401.65970443],
[-9764049.22989504, 3897523.70250823]
]
]
}
},
{
"attributes": {
"FID": 446,
"NAME": "Coosa",
"STATE_NAME": "Alabama",
"STATE_FIPS": "01",
"CNTY_FIPS": "037",
"FIPS": "01037",
"AREA": 666.3588,
"POP1990": 11063,
"POP1996": 11791,
"jn_fips": 1037,
"two_words1": 0,
"Shape__Area": 2520852185.77734,
"Shape__Length": 203686.263201499,
"GlobalID": "c533613f-2f98-43b2-871d-edf7cf74a08e",
"FirstValue": 10153
},
"geometry": {
"rings": [
[
[-9631532.18343972, 3899605.87647187],
[-9630150.38206438, 3908575.5154854],
[-9627906.48075554, 3910078.5564355],
[-9592768.29156714, 3909944.6938199],
[-9573916.71438689, 3909878.33623713],
[-9573813.93501112, 3907696.10241929],
[-9574080.26961663, 3862756.5105688],
[-9608634.22963641, 3862997.78466094],
[-9608494.10605832, 3865345.45156415],
[-9610924.01648295, 3865365.66172563],
[-9610569.83595776, 3863243.19162301],
[-9615247.90126861, 3863215.94152222],
[-9619335.70817791, 3866364.18779654],
[-9619762.07956094, 3868188.16489295],
[-9621939.74335928, 3868499.35281072],
[-9624811.32276536, 3871788.97800395],
[-9623870.30427517, 3876466.5498932],
[-9624436.81056764, 3877752.13721224],
[-9627716.90644057, 3879788.24217529],
[-9628756.50103403, 3883444.18854529],
[-9631314.68437103, 3887208.54146748],
[-9631021.70303554, 3892637.8854341],
[-9632177.65271742, 3896542.4126698],
[-9631532.18343972, 3899605.87647187]
]
]
}
},
...
],
"exceededTransferLimit": true
}