Formulario: Filtro: Bronx o Manhatan y arson ((( ("nypd"."BORO_NM" = 'BRONX') ) OR ( ("nypd"."BORO_NM" = 'MANHATTAN') )) AND ( ("nypd"."OFNS_DESC" = 'ARSON') )) Campos calculados: Campo: CONTEO Formula: 1 Campo: AÑO Formula: EXTRACT(YEAR FROM CMPLNT_FR_) Campo: MES Formula: EXTRACT(MONTH FROM CMPLNT_FR_) Campo: TIPODIA Formula: CASE WHEN CMPLNT_FR_.getDay() <5 THEN 'Lab' ELSE 'No lab' END CASE Desempleo en ese momento: Requisito tener abierta la tabla a la que se hace referencia o establecida en el Workspace. En este caso su nombre es: data_desempleo Campo: DESEMPLEO Formula: ((SELECT * FROM data_desempleo WHERE nypd.BORO_NM = data_desempleo.BORO AND data_desempleo.AÑO = EXTRACT(YEAR FROM nypd.CMPLNT_FR_) AND data_desempleo.MES = EXTRACT(MONTH FROM nypd.CMPLNT_FR_))[0]).DESEMPLEO Campo: VALOR Formula: CASE WHEN CONTEO < 400 THEN 'LOW' WHEN CONTEO >= 400 AND CONTEO <3000 THEN 'MID' WHEN CONTEO >=3000 THEN 'HIGH' ELSE 'No data' END CASE Filtrados por valores alfanumericos: EXTRACT(MONTH FROM CMPLNT_FR_) = 11 OR EXTRACT(MONTH FROM CMPLNT_FR_) = 12 Filtrados por geometria: ST_Intersects(GEOMETRY, ST_GeomFromText('POLYGON ((985010 207515, 1008383 202121, 1007870 179518, 982441 185169, 985010 207515))')) ST_Intersects(GEOMETRY, ST_Buffer(ST_GeomFromText('POINT (993486.320434 197840.660727)'),30000)) Exportacion Formula: (( ("nypd"."BORO_NM" = 'BRONX') ) AND ( ("nypd"."OFNS_DESC" = 'ARSON') )) Filtros aplicados en la simbologia de mapa de calor por diferencia: EXTRACT(MONTH FROM CMPLNT_FR_) = 11 EXTRACT(MONTH FROM CMPLNT_FR_) = 12 Dashboard Ejemplo 1: Ratios Capa de delitos - Actualiza sobre la Vista - Al cambiar de capa cambia el comportamiento begin swing( set map to application().getActiveDocument().getMapContext(), set bbox to map.getViewPort().getEnvelope().getGeometry(), set layer to map.getLayers().getActives()[0] ); set s to 'ST_intersects(GEOMETRY,ST_GeomFromText('''||bbox.convertTo('wkt') || '''))'; set fss = layer.getFeatureStore().getFeatureSet(s); set attr = layer.getFeatureStore().getDefaultFeatureType().get('LAW_CAT_CD'); set count1 = fss.getSize(); IF attr IS NOT NULL THEN set fss = layer.getFeatureStore().getFeatureSet(s + 'AND LAW_CAT_CD=''MISDEMEANOR'''); set count2 = fss.getSize(); set fss = layer.getFeatureStore().getFeatureSet(s + 'AND LAW_CAT_CD=''FELONY'''); set count3 = fss.getSize(); '
Conteo total: ' || count1 || '
Delito leve: ' || count2 || '
Delito grave: ' || count3 || '
Ratio: ' ||TODOUBLE(count2)/count3 ; ELSE '
Conteo total
' || count1; END IF; except '---' end Ejemplo 2: Distribucion de la poblacion en las parcelas Requisitos: - Capa población valencia Preparacion de los datos: - Campo tipo1: CASE WHEN ST_AREA(GEOMETRY)>8000 THEN '>8000' ELSE '<8000' END - Campo tipo2: categoria trama urbana begin swing( set map to application().getActiveDocument().getMapContext(), set bbox to map.getViewPort().getEnvelope().getGeometry(), set layer to map.getLayers().getActives()[0] ); set s to 'ST_intersects(GEOMETRY,ST_GeomFromText('''||bbox.convertTo('wkt') || '''))'; set fss = layer.getFeatureStore().getFeatures(s); set chart = { chartType: 'boxandwhisker', title: 'Distribucion poblacion', valueField: 'pob_total', field1: 'tipo1', field2: 'tipo2', witdh:300, height:200}; set p = create_chartpanel(chart, fss); p; except '---' end Ejemplo 3: datos boro con seleccion Sobre la tabla de borodata y la ficha de busqueda begin set doc to application().getCurrentProject().getActiveDocument('project.document.table'); set fss = doc.getFeatureStore().getFeatureSelection(); if fss.isEmpty() then set fss = doc.getFeatureStore().getFeatureSet(); end if set chart = { chartType: 'barchart', title: 'Poblacion', valueField: 'POBLACION', field1: 'BORO', field2: 'AÑO', witdh:300, height:200}; set p = create_chartpanel(chart, fss); --p; end