• Resolved alm06130

    (@alm06130)


    I had a request to add circular zones to maps.
    To fullfill this request, I had to modify osm.php and osm-openlayers.php, to add parameters and subroutines. I think it would be nice to have hooks which permit to add fonctionnalities.

    modifications I have done
    in osm.php
    attributes of shortcodes

    ,
      /// discs
        /// discs parameters
        'disc_center_list'         => '',          // in decimal degrees
        'disc_radius_list'         => '',          // in meters
        'disc_center_opacity_list' => '0.5',       // float 0->1
        'disc_center_color_list'   => 'red',       // html name or #rvb or #rrvvbb
        'disc_border_width_list'   => '3',         // integer
        'disc_border_color_list'   => 'blue',      // html name or #rvb or #rrvvbb
        'disc_border_opacity_list'  => '0.5',      // float 0->1
        'disc_fill_color_list'      => 'lightblue',// html name or #rvb or #rrvvbb
        'disc_fill_opacity_list'    => '0.5'       // float 0->1
      /// end discs

    modifying $output for discs:

    /// add the disc(s)
    
        /// discs parameters
        ///'disc_center_list'         => '',
        ///'disc_radius_list'         => '',
        ///'disc_center_opacity_list' => '0.5',
        ///'disc_center_color_list'   => 'red',
        ///'disc_border_width_list'   => '3',
        ///'disc_border_color_list'   => 'blue',
        ///'disc_border_opacity_list'  => '0.5',
        ///'disc_fill_color_list'      => 'lightblue',
        ///'disc_fill_opacity_list'    => '0.5'
        /// end discs
    
        if ($disc_center_list != ''){
          $centerListArray        = explode( ',', $disc_center_list );
          $radiusListArray        = explode( ',', $disc_radius_list );
          $centerOpacityListArray = explode( ',', $disc_center_opacity_list);
          $centerColorListArray   = explode( ',', $disc_center_color_list );
          $borderWidthListArray   = explode( ',', $disc_border_width_list );
          $borderColorListArray   = explode( ',', $disc_border_color_list );
          $borderOpacityListArray = explode( ',', $disc_border_opacity_list);
          $fillColorListArray     = explode( ',', $disc_fill_color_list );
          $fillOpacityListArray   = explode( ',', $disc_fill_opacity_list);
          $this->traceText(DEBUG_INFO, "(NumOfdiscs: ".sizeof($centerListArray)." NumOfradius: ".sizeof($radiusListArray).")!");
    
          if (sizeof($centerListArray) == sizeof($radiusListArray) && !empty($centerListArray) && !empty($radiusListArray)   ) {
            $output .= Osm_OpenLayers::addDiscs($centerListArray,$radiusListArray,$centerOpacityListArray,$centerColorListArray,
                                    $borderWidthListArray,$borderColorListArray,$borderOpacityListArray,$fillColorListArray,$fillOpacityListArray);
          } else {
            $this->traceText(DEBUG_ERROR, "Discs parameters error");
          }
        }
    
        /// end discs

    osm-openlayers.php

    /// discs
       function addDiscs($centerListArray,$radiusListArray,$centerOpacityListArray,$centerColorListArray,
                         $borderWidthListArray,$borderColorListArray,$borderOpacityListArray,$fillColorListArray,$fillOpacityListArray) {
    
       $layer='
       var discLayer = new OpenLayers.Layer.Vector("Disc Layer");';
    
       $layer.='
       addDisc = function (lon, lat, radius, centeropac, centercol, strw, strcol, stropac, fillcol, fillopac) {
       var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
    
        var discStyle    = { strokeColor: strcol,
                             strokeOpacity: stropac,
                             strokeWidth: strw,
                             fillColor: fillcol,
                             fillOpacity: fillopac
                           };
        var centerStyle  = { strokeColor: centercol,
                             strokeOpacity: centeropac,
                             strokeWidth: strw,
                             fillColor: centercol,
                             fillOpacity: centeropac
                           };
    
        var disc = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                                 new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat),
                                                 radius,
                                                 200 // nombre de faces
                     );
        var center = OpenLayers.Geometry.Polygon.createRegularPolygon(
                                                 new OpenLayers.Geometry.Point(lonLat.lon, lonLat.lat),
                                                 1, // taille dans lunite de la carte
                                                 5  // nombre de faces
                     );
    
        var featureDisc   = new OpenLayers.Feature.Vector(disc,null,discStyle);
        var featureCenter = new OpenLayers.Feature.Vector(center,null,centerStyle);
        discLayer.addFeatures([featureDisc,featureCenter]);
       };
       ';
    
       for($i=0;$i<sizeof($centerListArray);$i++){
        // $centerListArray[$i] = lon lat -> lon,lat
        // only center and radius must be defined for each disc to be shown, else use first/default value (ie [0])
        $layer .= 'addDisc('.implode(",",explode( " ", trim($centerListArray[$i]) )).', '.$radiusListArray[$i].', '.
                          ((isset($centerOpacityListArray[$i]))? $centerOpacityListArray[$i] : $centerOpacityListArray[0]).', "'.
                          ((isset($centerColorListArray[$i]))?   $centerColorListArray[$i]   : $centerColorListArray[0]).'", '.
                          ((isset($borderWidthListArray[$i]))?   $borderWidthListArray[$i]   : $borderWidthListArray[0]).', "'.
                          ((isset($borderColorListArray[$i]))?   $borderColorListArray[$i]   : $borderColorListArray[0]).'", '.
                          ((isset($borderOpacityListArray[$i]))? $borderOpacityListArray[$i] : $borderOpacityListArray[0]).', "'.
                          ((isset($fillColorListArray[$i]))?     $fillColorListArray[$i]     : $fillColorListArray[0]).'", '.
                          ((isset($fillOpacityListArray[$i]))?   $fillOpacityListArray[$i]   : $fillOpacityListArray[0]).');
       ';
    
       }
       $layer.='
        map.addLayer(discLayer);';
    
        //$Layer='';
        return $layer;
       }
    
       /// end discs

    hope that can help
    alain

    http://wordpress.org/extend/plugins/osm/

Viewing 1 replies (of 1 total)
Viewing 1 replies (of 1 total)
  • The topic ‘suggestions: add hooks and/or circles/discs display’ is closed to new replies.