UWWTPs->UWWTP);
*/
}
function xgeo_debug(){
//$node = node_load(1350);
//$node = node_load(1277);
//xgeo_get_xsandre($data->nid, "field_position_geo");
/*
$ref = array('SysTraitementEauxUsees','StationHydro','StationMesureEauxSurface');
$gml = xgeo_getGML(2926, 'field_bv_geo');
$intersectRef_values = wps_oieau_intersectRef_getRefGeo($gml, $ref);
$intersectRef = xgeo_map_cdSandre($intersectRef_values, $ref);
dsm($intersectRef);
*/
//xgeo_getAssolement($data->nid, $gml);
/*
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_bv_geo', 'bv', 'n.vid = bv.revision_id');
$request->leftJoin('field_data_field_rpg', 'rpg', 'n.vid = rpg.revision_id');
$request->leftJoin('field_data_field_pesticides', 'p', 'n.vid = p.revision_id');
$request->leftJoin('field_data_field_nb_ana_pest_quant', 'q', 'n.vid = q.revision_id');
$request->leftJoin('field_data_field_superficie', 's', 'n.vid = s.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->condition('p.field_pesticides_value', 1);
$request->condition('q.field_nb_ana_pest_quant_value', 1, '>');
$request->isNotNull('bv.field_bv_geo_geometry');
$request->isNull('rpg.field_rpg_value');
$request->orderBy('s.field_superficie_value', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
dsm($data);
*/
//xgeo_get_length(2092, 'field_amont');
return 'debug';
}
//Form related functions
function xgeo_import_form() {
//Displays a form with a submit button to start the import (Batch)
$form = array();
$form['text'] = array(
'#markup' =>
'
Permet d\'importer et/ou de mettre à jour les informations via un Batch.');
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Import'),
);
return $form;
}
function xgeo_import_form_submit($form, $form_state) {
//$operations[] = array('xgeo_batch_zh_init', array()); //Init zone hydro
//$operations[] = array('xgeo_batch_zh_wps_clc', array()); //Retrieves data for zone hydro from WPS
//$operations[] = array('xgeo_batch_zh_wps_rpg', array()); //Retrieves data for zone hydro from WPS
//$operations[] = array('xgeo_batch_zh_wps_xref', array()); //Retrieves data for zone hydro from WPS
//$operations[] = array('xgeo_batch_zh_stats', array()); //calculation on linked data of ZH
//$operations[] = array('xgeo_batch_stq_init', array()); //Init stq
//Need restart foreach ones
//$operations[] = array('xgeo_batch_stq_wps_amont_carthage', array()); //Init stq
//$operations[] = array('xgeo_batch_stq_amont_longueur', array()); //Calcul de la longueur du linéaire amont
//$operations[] = array('xgeo_batch_stq_bv_zh', array()); //Calcul du BV
//$operations[] = array('xgeo_batch_stq_bv_surf', array()); //Calcul de la superficie du BV
//$operations[] = array('xgeo_batch_stq_wps_clc', array()); //Retrieves data for stq from WPS
//$operations[] = array('xgeo_batch_stq_wps_rpg', array()); //Retrieves data for stq from WPS
//$operations[] = array('xgeo_batch_stq_wps_xref_zh', array()); //Retrieves data for stq from WPS
$operations[] = array('xgeo_batch_stq_stats', array()); //calculation on linked data of ZH
if(!empty($operations)){
$batch = array(
'operations' => $operations,
'finished' => 'xgeo_import_batch_finished',
'title' => t('Processing Batch'),
'init_message' => t('Batch is starting.'),
'progress_message' => t('Processed @current out of @total.'),
'error_message' => t('XGeo Import Batch has encountered an error.'),
'file' => drupal_get_path('module', 'xgeo') . '/inc/xgeo.debug.inc',
);
batch_set($batch); //Starting the Batch
batch_process('admin/config/xgeo'); //Path where the user is redirected when the Batch is done
}
}
//======= WPS STQ ESU
function xgeo_batch_stq_init(&$context) {
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['init']) {
$data = xgeo_getSTQ_ESU('05', 4326, 2154);
$context['sandbox']['max'] = count($data);
$context['results']['data']['stq'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['init'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'creating Stations
';
while($i<25 && $j<$context['sandbox']['max']){
$stq = $context['results']['data']['stq'][$j+$i];
//Creation du noeud stq
$node = xgeo_set_stq($stq);
$message.= '- '.l($node->title, 'node/'.$node->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
';
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_wps_amont_carthage(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['amont_carthage']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_amont', 'a', 'n.vid = a.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->isNull('a.field_amont_geometry');
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['amont_carthage'] = 1;
}
$i = $context['sandbox']['progress'];
if($data = $context['results']['data']['node'][$i]){
$out = xgeo_getAmont($data->nid, 'field_position_geo');
if($out){$msg = "Ok";}
else{$msg = "Echec";}
}
$context['sandbox']['progress']++;
$context['message'] = 'Processing Amont WPS: '.l($data->title, 'node/'.$data->nid) .' : '.$msg.' - '. $context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_bv_zh(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['bv_zh']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_amont', 'a', 'n.vid = a.revision_id');
$request->leftJoin('field_data_field_bv_geo', 'bv', 'n.vid = bv.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
//DEBUG
//$request->condition('n.nid', 3570, '!=');
//Pour faire le calcul il faut un parcourt amont
$request->isNotNull('a.field_amont_geometry');
//Et que le BV n'a pas encore été calculé
$request->isNull('bv.field_bv_geo_geometry');
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['bv_zh'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'creating BV with Amont and Zone Hydro
';
while($i<5 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
//watchdog("xgeo_batch_stq_bv_zh", $i.': nid = '.$data->nid);
xgeo_getBV($data->nid, 'field_amont');
//watchdog("xgeo_batch_stq_bv_zh", $i.': nid = '.$data->nid. ' -> OK');
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_bv_surf(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['bv_surf']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_bv_geo', 'bv', 'n.vid = bv.revision_id');
$request->leftJoin('field_data_field_superficie', 's', 'n.vid = s.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->isNotNull('bv.field_bv_geo_geometry');
$request->isNull('s.field_superficie_value');
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['bv_surf'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Calculate area of BV
';
while($i<25 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
xgeo_get_area($data->nid, 'field_bv_geo');
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_amont_longueur(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['bv_surf']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_amont', 'a', 'n.vid = a.revision_id');
//$request->leftJoin('field_data_field_superficie', 's', 'n.vid = s.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->isNotNull('a.field_amont_geometry');
//$request->isNull('s.field_superficie_value');
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['bv_surf'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Calculate length of amont
';
while($i < 10 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
xgeo_get_length($data->nid, 'field_amont');
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_wps_clc(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['clc']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_bv_geo', 'bv', 'n.vid = bv.revision_id');
$request->leftJoin('field_data_field_clc', 'clc', 'n.vid = clc.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->isNotNull('bv.field_bv_geo_geometry');
$request->isNull('clc.field_clc_value');
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$clc_V = array('clc_2012','clc_2006','clc_2000');
$op = array();
foreach($data as $row){
foreach($clc_V as $clc){
$d = clone $row;
$d->clc = $clc;
$op[] = $d;
unset($d);
}
}
$context['sandbox']['max'] = count($op);
$context['results']['data']['node'] = $op;
unset($data, $op);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i = $context['sandbox']['progress'];
if($data = $context['results']['data']['node'][$i]){
$gml = xgeo_getGML($data->nid, 'field_bv_geo');
xgeo_getOSCLC($data->nid, $gml, array($data->clc));
}
$context['sandbox']['progress']++;
$context['message'] = 'Processing CLC WPS ('.$data->clc.'): '.l($data->title, 'node/'.$data->nid).' - '.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_wps_rpg(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['rpg']) {
//On se focalise d'abord sur les stations pesticides avec des analyses quantifiée (en commencant pas les plus petites)
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->leftJoin('field_data_field_bv_geo', 'bv', 'n.vid = bv.revision_id');
//$request->leftJoin('field_data_field_rpg', 'rpg', 'n.vid = rpg.revision_id');
$request->leftJoin('field_data_field_pesticides', 'p', 'n.vid = p.revision_id');
$request->leftJoin('field_data_field_nb_ana_pest_quant', 'q', 'n.vid = q.revision_id');
$request->leftJoin('field_data_field_superficie', 's', 'n.vid = s.revision_id');
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->condition('p.field_pesticides_value', 1);
$request->condition('q.field_nb_ana_pest_quant_value', 1, '>');
$request->isNotNull('bv.field_bv_geo_geometry');
//$request->isNull('rpg.field_rpg_value');
$request->orderBy('s.field_superficie_value', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
//$rpg_V = array('rpg_2012','rpg_2011','rpg_2010');
$rpg_V = array('rpg_2011','rpg_2010');
$op = array();
foreach($data as $row){
foreach($rpg_V as $rpg){
$d = clone $row;
$d->rpg = $rpg;
$op[] = $d;
unset($d);
}
}
$context['sandbox']['max'] = count($op);
$context['results']['data']['node'] = $op;
unset($data, $op);
$context['sandbox']['progress']=0;
$context['sandbox']['rpg'] = 1;
}
$i = $context['sandbox']['progress'];
if($data = $context['results']['data']['node'][$i]){
$gml = xgeo_getGML($data->nid, 'field_bv_geo');
xgeo_getAssolement($data->nid, $gml, array($data->rpg));
}
$context['sandbox']['progress']++;
$context['message'] = 'Processing RPG WPS ('.$data->rpg.'): '.l($data->title, 'node/'.$data->nid).' - '.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
//Permet de faire le lien entre la station et la zone hydro directe et le departement (pas de chainage)
function xgeo_batch_stq_wps_xref_zh(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['bv_surf']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['bv_surf'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Find related entities
';
while($i<3 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
//xgeo_get_xsandre($data->nid, "field_position_geo");
xgeo_get_xsandre($data->nid, "field_bv_geo");
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_stq_stats(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['rpg']) {
$request = db_select('node', 'n');
$request->fields('n', array('nid', 'title'));
$request->condition('n.type', 'stq');
$request->condition('n.status', 1);
$request->orderBy('nid', 'ASC');
$r = $request->execute();
$data= $r->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Process stats on STQ base on related entities
';
while($i<5 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
if($node = node_load($data->nid)){
$wrapper = entity_metadata_wrapper('node', $node);
//Type d'OS dominant sur le BV
$clc = $wrapper->field_clc->value();
$up = false;
if(!empty($clc)){
$type_os=array();
//On ne travaille que sur la dernière version de CLC
if($clc[0]->field_agricultural_areas['und'][0]['value'] >= 33){
$type_os[]="agricultural_areas";
}
if($clc[0]->field_forest_semi_natural_areas['und'][0]['value'] >= 33){
$type_os[]="forest_semi_natural_areas";
}
if($clc[0]->field_artificial_surfaces['und'][0]['value'] >= 20){
$type_os[]="artificial_surfaces";
}
if($clc[0]->field_proportion_wetlands['und'][0]['value'] >= 7){
$type_os[]="wetlands";
}
if($clc[0]->field_proportion_water_bodies['und'][0]['value'] >= 7){
$type_os[]="water_bodies";
}
$wrapper->field_type_os->set($type_os);
$up = true;
}
//charge générées sur le BV
$steu = $wrapper->field_steu->value();
if(!empty($steu)){
$charge = 0;
foreach($steu as $s){
$charge+=$s->field_steu_charge_max['und'][0]['value'];
}
$wrapper->field_charge_steu_bv->set($charge);
$up = true;
//field_charge_steu_bv
}
if($up) $wrapper->save();
}
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
//======= WPS zones hydro
function xgeo_batch_zh_init(&$context) {
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['init']) {
//F = Adour Garonne
$zhydro = xgeo_getZH('F', 4326);
$context['sandbox']['max'] = count($zhydro);
$context['results']['data']['zhydro'] = $zhydro;
unset($zhydro);
$context['sandbox']['progress']=0;
$context['sandbox']['init'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'creating Zone Hydro
';
while($i<25 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['zhydro'][$j+$i];
if($data->label == ''){
$data->label =$data->code;
}
if($data->code!=''){
$node = xgeo_get_node('zone_hydro', $data->code, $data->label);
xgeo_getInfoGeo($node->nid, $data);
$message.= '- '.l($node->title, 'node/'.$node->nid).'
';
}
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
';
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_zh_wps_clc(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['clc']) {
$data = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'zone_hydro')
->condition('n.status', 1)
->orderBy('nid', 'ASC')
->execute()
->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i = $context['sandbox']['progress'];
if($data = $context['results']['data']['node'][$i]){
$gml = xgeo_getGML($data->nid, 'field_geo');
xgeo_getOSCLC($data->nid, $gml);
}
$context['sandbox']['progress']++;
$context['message'] = 'Processing CLC WPS: '.l($data->title, 'node/'.$data->nid);
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_zh_wps_xref(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['rpg']) {
$data = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'zone_hydro')
->condition('n.status', 1)
->orderBy('nid', 'ASC')
->execute()
->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Find ZH related entities
';
while($i<3 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
xgeo_get_xsandre($data->nid, 'field_geo');
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_zh_stats(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['rpg']) {
$data = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'zone_hydro')
->condition('n.status', 1)
->orderBy('nid', 'ASC')
->execute()
->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i=0;
$j=$context['sandbox']['progress'];
$message = 'Process stats on ZH base on related entities
';
while($i<10 && $j<$context['sandbox']['max']){
$data = $context['results']['data']['node'][$j+$i];
if($node = node_load($data->nid)){
$wrapper = entity_metadata_wrapper('node', $node);
//Type d'OS dominant sur le BV
$clc = $wrapper->field_clc->value();
$up = false;
if(!empty($clc)){
$type_os=array();
//On ne travaille que sur la dernière version de CLC
if($clc[0]->field_agricultural_areas['und'][0]['value'] >= 33){
$type_os[]="agricultural_areas";
}
if($clc[0]->field_forest_semi_natural_areas['und'][0]['value'] >= 33){
$type_os[]="forest_semi_natural_areas";
}
if($clc[0]->field_artificial_surfaces['und'][0]['value'] >= 20){
$type_os[]="artificial_surfaces";
}
if($clc[0]->field_proportion_wetlands['und'][0]['value'] >= 10){
$type_os[]="wetlands";
}
if($clc[0]->field_proportion_water_bodies['und'][0]['value'] >= 10){
$type_os[]="water_bodies";
}
$wrapper->field_type_os->set($type_os);
$up = true;
}
//charge générées sur le BV
$steu = $wrapper->field_steu->value();
if(!empty($steu)){
$charge = 0;
foreach($steu as $s){
$charge+=$s->field_steu_charge_max['und'][0]['value'];
}
$wrapper->field_charge_steu_bv->set($charge);
$up = true;
//field_charge_steu_bv
}
if($up) $wrapper->save();
}
$message.= '- '.l($data->title, 'node/'.$data->nid).'
';
$i++;
$context['sandbox']['progress']++;
}
$context['message'] = $message.'
'.$context['sandbox']['progress'].'/'.$context['sandbox']['max'];
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_batch_zh_wps_rpg(&$context){
if (!isset($context['sandbox']['progress']) && !$context['sandbox']['rpg']) {
$data = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('n.type', 'zone_hydro')
->condition('n.status', 1)
->orderBy('nid', 'ASC')
->execute()
->fetchAll();
$context['sandbox']['max'] = count($data);
$context['results']['data']['node'] = $data;
unset($data);
$context['sandbox']['progress']=0;
$context['sandbox']['clc'] = 1;
}
$i = $context['sandbox']['progress'];
if($data = $context['results']['data']['node'][$i]){
$gml = xgeo_getGML($data->nid, 'field_geo');
xgeo_getAssolement($data->nid, $gml);
}
$context['sandbox']['progress']++;
$context['message'] = 'Processing RPG WPS: '.l($data->title, 'node/'.$data->nid);
if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
$context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
}
}
function xgeo_import_batch_finished($success, $results, $operations) {
if ($success) {
// Here we do something meaningful with the results.
// $message = t('@count items successfully processed:', array('@count' => count($results['log'])));
// $message .= theme('item_list', $results); // D6 syntax
// $message .= theme('item_list', array('items' => $results['log']));
// drupal_set_message($message);
}
else {
// An error occurred.
// $operations contains the operations that remained unprocessed.
// $error_operation = reset($operations);
// $message = t('An error occurred while processing %error_operation with arguments: @arguments', array('%error_operation' => $error_operation[0], '@arguments' => print_r($error_operation[1], TRUE)));
// drupal_set_message($message, 'error');
}
}
//Function de creation/maj d'une zone hydro
function xgeo_set_zh($data){
$services = array('rpg_2012','rpg_2011','rpg_2010','clc_2012','clc_2006','clc_2000');
$node = xgeo_get_node('zone_hydro', $data->code, $data->label);
//On ajoute les infos géo
xgeo_getInfoGeo($node->nid, $data);
//Calcul de l'occupation des sols avec CLC
xgeo_getOSCLC($node->nid, $data->gml, $services);
//Calcul de l'assolement avec le RPG
xgeo_getAssolement($node->nid, $data->gml, $services);
}
//Function de creation/maj d'une Station de Mesure en Eau sup
function xgeo_set_stq($data){
//Si on a pas de libellé alors on affecte le code Sandre
if($data->label =='' ||strtolower($data->label) =='inconnu') $data->label = $data->code;
//Creation /maj du noeud
$node = xgeo_get_node('stq', $data->code, $data->label);
if($data->wkt){
$node->field_position_geo['und'][0]=array(
'geom'=>$data->wkt,
'geo_type'=>'point'
);
node_save($node);
}
return $node;
}
//Integration des informations geographiques
function xgeo_getInfoGeo($nid, $data){
$node = node_load($nid, NULL, true);
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_superficie->set($data->area);
//périmetre
$wrapper->field_geo->set(
array(
array(
'wkt'=>$data->ewkt,
'srid'=>'4326'
)
)
);
$wrapper->save();
}
//Calcul de l'occupation des sols avec Corine Land Cover
function xgeo_getOSCLC($nid, $gml, $services=array('clc_2012', 'clc_2006', 'clc_2000')){
$node = node_load($nid, NULL, true);
$wrapper = entity_metadata_wrapper('node', $node);
if(isset($wrapper->field_clc)){
//====================== CLC 2012
if(in_array('clc_2012', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'clc_2012');
$ana_clc_2012 = wps_oieau_CLC_getAnalyse($result['output']);
$layers = $result['output']->layers;
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2012.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Corine Land Cover 2012)';
//Set data
$raw_collection = $wrapper->field_clc->value();
if(isset($raw_collection[0])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[0]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_clc_version->set('Corine Land Cover 2012');
$fc_wrapper->field_artificial_surfaces->set($ana_clc_2012['coverage']['Surfaces artificialisées']);
$fc_wrapper->field_agricultural_areas->set($ana_clc_2012['coverage']['Zones agricoles']);
$fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2012['coverage']['Forêt et zones semi-naturelles']);
$fc_wrapper->field_proportion_wetlands->set($ana_clc_2012['coverage']['Zones humides']);
$fc_wrapper->field_proportion_water_bodies->set($ana_clc_2012['coverage']["Masses d'eau"]);
$fc_wrapper->field_clc_illustration->set($file);
$fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2012['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_clc_data->set(serialize($ana_clc_2012));
$fc_wrapper->save();
}
unset($ana_clc_2012);
}
//====================== CLC 2006
if(in_array('clc_2006', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'clc_2006');
$ana_clc_2006 = wps_oieau_CLC_getAnalyse($result['output']);
$layers = $result['output']->layers;
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2006.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Corine Land Cover 2006)';
$raw_collection = $wrapper->field_clc->value();
if(isset($raw_collection[1])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[1]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_clc_version->set('Corine Land Cover 2006');
$fc_wrapper->field_artificial_surfaces->set($ana_clc_2006['coverage']['Surfaces artificialisées']);
$fc_wrapper->field_agricultural_areas->set($ana_clc_2006['coverage']['Zones agricoles']);
$fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2006['coverage']['Forêt et zones semi-naturelles']);
$fc_wrapper->field_proportion_wetlands->set($ana_clc_2006['coverage']['Zones humides']);
$fc_wrapper->field_proportion_water_bodies->set($ana_clc_2006['coverage']["Masses d'eau"]);
$fc_wrapper->field_clc_illustration->set($file);
$fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2006['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_clc_data->set(serialize($ana_clc_2006));
$fc_wrapper->save();
}
unset($ana_clc_2006);
}
//====================== CLC 2000
if(in_array('clc_2000', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'clc_2000');
$ana_clc_2000 = wps_oieau_CLC_getAnalyse($result['output']);
$layers = $result['output']->layers;
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://clc/'.$node->nid.'_clc_2000.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Corine Land Cover 2000)';
$raw_collection = $wrapper->field_clc->value();
if(isset($raw_collection[2])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[2]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_clc'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_clc_version->set('Corine Land Cover 2000');
$fc_wrapper->field_artificial_surfaces->set($ana_clc_2000['coverage']['Surfaces artificialisées']);
$fc_wrapper->field_agricultural_areas->set($ana_clc_2000['coverage']['Zones agricoles']);
$fc_wrapper->field_forest_semi_natural_areas->set($ana_clc_2000['coverage']['Forêt et zones semi-naturelles']);
$fc_wrapper->field_proportion_wetlands->set($ana_clc_2000['coverage']['Zones humides']);
$fc_wrapper->field_proportion_water_bodies->set($ana_clc_2000['coverage']["Masses d'eau"]);
$fc_wrapper->field_clc_illustration->set($file);
$fc_wrapper->field_clc_commentaire->set(array('value'=>$ana_clc_2000['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_clc_data->set(serialize($ana_clc_2000));
$fc_wrapper->save();
}
unset($ana_clc_2000);
}
}
}
//Calcul de l'occupation des sols avec le RPG de niveau 1 en utilisant le WPS OIEau
function xgeo_getAssolement($nid, $gml, $services=array('rpg_2012', 'rpg_2011', 'rpg_2010')){
$node = node_load($nid, NULL, true);
$wrapper = entity_metadata_wrapper('node', $node);
if(isset($wrapper->field_rpg)){
//====================== RPG 2012
if(in_array('rpg_2012', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'rpg_2012');
$ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2012);
if(!empty($ana_rpg)){
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2012.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2012)';
//Set data
$raw_collection = $wrapper->field_rpg->value();
if(isset($raw_collection[0])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[0]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2012');
$fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Grandes cultures']['coverage_cult_rate']);
$fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']);
$fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']);
$fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']);
$fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']);
$fc_wrapper->field_rpg_illustration->set($file);
$fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_rpg_data->set(serialize($ana_rpg));
$fc_wrapper->save();
if(!empty($ana_rpg['orientations_p'])){
if(isset($ana_rpg['orientations_p']['Prairies et fourrages'])){
//On remplace "Prairies et fourrages" par "Élevage"
$ana_rpg['orientations_p']['Élevage'] = $ana_rpg['orientations_p']['Prairies et fourrages'];
unset($ana_rpg['orientations_p']['Prairies et fourrages']);
}
$orientations = array_keys($ana_rpg['orientations_p']);
//dsm($orientations);
$wrapper->field_orientations_agri->set($orientations);
}
}
unset($ana_rpg);
}
}
//====================== RPG 2011
if(in_array('rpg_2011', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'rpg_2011');
$ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2011);
if(!empty($ana_rpg)){
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2011.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2011)';
//Set data
$raw_collection = $wrapper->field_rpg->value();
if(isset($raw_collection[1])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[1]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2011');
$fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Grandes cultures']['coverage_cult_rate']);
$fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']);
$fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']);
$fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']);
$fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']);
$fc_wrapper->field_rpg_illustration->set($file);
$fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_rpg_data->set(serialize($ana_rpg));
$fc_wrapper->save();
}
unset($ana_rpg);
}
}
//====================== RPG 2010
if(in_array('rpg_2010', $services)){
$result = wps_oieau_coverage_getCoverage($gml, 'rpg_2010');
$ana_rpg = wps_oieau_RPG_getOrientationAgri($result['output'], 2010);
if(!empty($ana_rpg)){
$img = file_get_contents( $result['png']->png);
$file = file_save_data($img, 'public://rpg/'.$node->nid.'_rpg_2010.png', FILE_EXISTS_REPLACE);
$file = (array)$file;
$file['title'] = 'Occupation des sols (Registre Parcellaire Graphique de niveau 1 version 2010)';
//Set data
$raw_collection = $wrapper->field_rpg->value();
if(isset($raw_collection[2])){
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection[2]);
}
else{
$fc_item = entity_create('field_collection_item', array('field_name' => 'field_rpg'));
$fc_item->setHostEntity('node', $node);
$fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc_item);
}
if($fc_wrapper){
$fc_wrapper->field_rpg_version->set('Registre Parcellaire Graphique 2010');
$fc_wrapper->field_rpg_gc->set($ana_rpg['orientations']['Grandes cultures']['coverage_cult_rate']);
$fc_wrapper->field_rpg_pf->set($ana_rpg['orientations']['Prairies et fourrages']['coverage_cult_rate']);
$fc_wrapper->field_rpg_arbo->set($ana_rpg['orientations']['Arboriculture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_viti->set($ana_rpg['orientations']['Viticulture']['coverage_cult_rate']);
$fc_wrapper->field_rpg_marai->set($ana_rpg['orientations']['Maraichage']['coverage_cult_rate']);
$fc_wrapper->field_rpg_autre->set($ana_rpg['orientations']['Autre']['coverage_cult_rate']);
$fc_wrapper->field_rpg_inc->set($ana_rpg['orientations']['Inconnue']['coverage_cult_rate']);
$fc_wrapper->field_rpg_illustration->set($file);
$fc_wrapper->field_rpg_commentaire->set(array('value'=>$ana_rpg['analyse'], 'format'=>'full_html'));
$fc_wrapper->field_rpg_data->set(serialize($ana_rpg));
$fc_wrapper->save();
}
unset($ana_rpg);
}
}
$wrapper->save();
}
else{
drupal_set_message("Le champ file_rpg n'existe pas pour le noeud ".$nid, 'error');
}
}
//calcul du parcourt amont carthage pour un point defini dans un geofield (wkt)
function xgeo_getAmont($nid, $field){
if($node = node_load($nid, null, true)){
//SI on a un wkt
if(isset($node->{$field}['und'])){
$gml = xgeo_convertWKTToGML($node->field_position_geo['und'][0]['geom'], 4326, 2154);
//Calcul du parcourt amont
if($gml && $node){
$geom = wps_brgm_carthage_pamont($gml, 'bdcarthage_2013', 2154);
//SI le service BRGM répond
if(!empty($geom)){
$r =db_query(
'SELECT ST_AsEWKT(ST_Transform(ST_SetSRID(ST_GeomFromGeoJSON(:json),2154), 4326)) as ewkt;',
array(
':json'=>json_encode($geom)
)
);
$ewkt = $r->fetchField();
if($ewkt){
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_amont->set(
array(
array(
'wkt'=>$ewkt,
'srid'=>'4326'
)
)
);
//On sauvegarde les informations acquises
$wrapper->save();
$node = node_load($nid, null, true);
return $node;
}
else{
drupal_set_message("Fail to convert WPS Amont answer in EWKT geometry for ".$node->title." [".$nid."]", 'error');
return false;
}
}
else{
drupal_set_message("Fail in WPS Amont process for ".$node->title." [".$nid."]", 'error');
return false;
}
}
else{
drupal_set_message("Fail to get GML for ".$node->title." [".$nid."]", 'error');
return false;
}
}
else{
drupal_set_message("Fail to get WKT for ".$node->title." [".$nid."]", 'error');
return false;
}
}
drupal_set_message("Fail to load node ".$nid, 'error');
return false;
}
function xgeo_getBV($nid, $field){
if($node = node_load($nid, null, true)){
db_set_active('sandre_dev');
$r =db_query(
'
WITH geo as (
SELECT (
ST_Dump(
ST_MakeValid(
ST_Union(
ARRAY(
WITH geo AS (
SELECT :geom ::geometry as geom
) SELECT ST_Transform(zh.geom, 4326)
FROM {"ZoneHydro"} zh, geo
WHERE zh.geom && geo.geom
AND ST_Intersects(zh.geom, geo.geom)
)
)
)
)
).geom as geom
)
SELECT ST_AsEWKT(ST_MakePolygon(ST_ExteriorRing(geo.geom))) as ewkt
FROM geo;
',
array(
':geom'=>$node->{$field}['und'][0]['geometry']
)
);
db_set_active('default');
$bv_ewkt = $r->fetchField();
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_bv_geo->set(
array(
array(
'wkt'=>$bv_ewkt,
'srid'=>'4326'
)
)
);
//On sauvegarde les informations acquises
$wrapper->save();
}
//drupal_set_message("Fail to load node ".$nid, 'error');
//return false;
}
//Permet de calculer la superficie en ha d'un polygone stocké dans un champ de type postgis
function xgeo_get_area($nid, $field){
if($node = node_load($nid, null, true)){
$r =db_query(
'SELECT round((ST_Area(:geom::geography)/10000)::numeric, 1) as area',
array(
':geom'=>$node->{$field}['und'][0]['geometry']
)
);
if($surf = $r->fetchField()){
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_superficie->set($surf);
$wrapper->save();
}
}
}
//Permet de calculer la logueur en km d'une multiligne stockée dans un champ de type postgis
function xgeo_get_length($nid, $field){
if($node = node_load($nid, null, true)){
$r =db_query(
'SELECT round((ST_Length(:geom ::geography)/1000)::numeric, 1) as lenght',
array(
':geom'=>$node->{$field}['und'][0]['geometry']
)
);
if($long = $r->fetchField()){
$wrapper = entity_metadata_wrapper('node', $node);
$wrapper->field_longueur->set($long);
$wrapper->save();
}
}
}
//Retourne la liste des zones hydros d'un bassin selon la projection demandée. Les données sont dans la base de dev du Sandre
//F = Adour Garonne
function xgeo_getZH($cdBassin, $proj=4326){
db_set_active('sandre_dev');
//On va chercher la définition des zones hydrographiques qui se trouvent dans le bassin AEAG
$result = db_query(
'
SELECT zh."CdZoneHydro" as code, zh."LbZoneHydro" as label, ST_AsGML(ST_Transform(ST_MakeValid(zh.geom), :proj)) as gml, ST_AsEWKT(ST_Transform(ST_MakeValid(zh.geom), :proj)) as ewkt, round((ST_Area(zh.geom::geography)/10000)::numeric, 1) as area
FROM {"ZoneHydro"} zh, {"BassinDCE_2016"} b
WHERE b."CdBassinDCE"= :bassin
AND zh."StZoneHydro" = :statut
AND b.geom && zh.geom
AND ST_Intersects(b.geom, zh.geom)
ORDER BY zh."CdZoneHydro"
',
array(
':statut'=>'Validé',
':proj'=>$proj,
':bassin'=>$cdBassin
)
);
db_set_active('default');
$data = array();
foreach ($result as $line) {
$data[] = $line;
}
return $data;
}
function xgeo_getSTQ_ESU($cdBassin, $proj_wkt=4326, $proj_gml=4326){
db_set_active('sandre');
$result = db_query('
SELECT "CdStationMesureEauxSurface" as code,
"LbStationMesureEauxSurface" as label,
"CdEntiteHydrographique",
"CdTronconHydrographique",
"PkPointTronconEntiteHydroPrincipale",
"NatureStationMesureEauxSurface",
"TypEthStationMesureEauxSurface",
ST_AsText(ST_Transform(geom, :proj_wkt)) as wkt,
ST_AsGML(ST_Transform(geom, :proj_gml)) as gml
FROM stq."StationMesureEauxSurface" stq
WHERE "StStationMesure" = :statut
AND "Agence" = :bassin
ORDER BY "CdStationMesureEauxSurface"
',
array(
':statut'=>'Validé',
':proj_wkt'=>$proj_wkt,
':proj_gml'=>$proj_gml,
':bassin'=>$cdBassin
)
);
db_set_active('default');
$data = array();
foreach ($result as $line) {
if($line->code!='') $data[] = $line;
}
return $data;
}