FIeld 'SHAPE.AREA' and 'SHAPE.LEN' of SDE For Oracle,Field 'SHAPE_Area' and 'SHAPE_Length' of gdb(geodatabase). The fields of GDB can be OK when QueryTask do query then outStatistics of query be setted.
1 require([ 2 "esri/tasks/query", "esri/tasks/StatisticDefinition", ... 3 ], function(Query, StatisticDefinition, ... ) { 4 var query = new Query(); 5 var statisticDefinition = new StatisticDefinition(); 6 statisticDefinition.statisticType = "sum"; 7 statisticDefinition.onStatisticField = "SHAPE_Area";//SHAPE.AREA failed, 8 statisticDefinition.outStatisticFieldName = "TotalArea"; 9 10 query.outStatistics = [statisticDefinition]; 11 ... 12 });
那么問題來了,每種關系數據庫類型的幾何針對面積和長度,我們做個分析:
類型 |
GDB(文件Geodatabase) |
Oracle |
PostgreSQL |
SqlServer |
面積 |
SHAPE_Area |
SHAPE.AREA |
Shape_Area |
SHAPE.STArea() |
長度 |
SHAPE_Length |
SHAPE.LEN |
Shape_Length |
SHAPE.STLength() |
幾何 |
Geometry |
ST_GEOMETRY/ SDO_GEOMETRY |
簡化Geometry(如box等) |
Geometry/ Geography |
針對ORACLE的圖形計算面積長度字段采用SQL語法形式,用於普通SQL查詢可以實現,如:【SHAPE.AREA>1000】;
GIS的API開發都會有針對SDE調用Oracle/SQLServer/PostgreSQL的SQL語句情況,筆者在Flex/JS開發時針對Query的outStatistics設置StatisticDefinition時,碰到給字段onStatisticField添加值時無法查詢,查看最新API,下圖:
JS的3系API為3.17,針對ArcGIS Server10.3部署服務,無【advancedQueryCapabilities】選項,而ArcGIS Online則有;4系API4.0目前與3系是2個不同序列,暫未詳細研究,可能ArcGIS Server Portal支持。。
目前對此解決方法提議:對query的outStatistics不設置SHAPE.AREA字段,先做其他統計,需要面積的再做一次QueryTask條件查詢。