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

'; 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
'.$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
'.$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
'.$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
'.$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
'.$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
'; 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
'.$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
'.$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; }