[Cartoweb-users] Error in HowToDisplayOnTheMapAPointFromADatabaseQuery

Alexandre Saunier alexandre.saunier at camptocamp.com
Thu Jun 29 07:45:49 EDT 2006


Hello Alessandro!

in fact you don't need to re-write the whole outlining process ! ;)

Simply write a client plugin that extends ClientOutline and make it 
update the outline request. It could look like:

<?php

// plugin is named, say, "vehiclePosition"

class ClientVehiclePosition extends ClientOutline {

     /**
      * @see PluginManager::replacePlugin()
      */
     public function replacePlugin() {
         return 'outline';
     }

     /**
      * @see ClientOutline::buildRequest()
      */
     public function buildRequest() {
         $vehiclePositions = $this->getVehiclePositions();
         $shapes = array();
         if ($vehiclePositions) {
             foreach ($vehiclePositions as $pos) {
                 $shape = new StyledShape;
                 $shape->shape = new Point($pos->x, $pos->y);
                 $shapes[] = $shape;
             }
         }
         $this->outlineState->shapes = $shapes;
         return parent::buildRequest();
     }

     protected function getVehiclePositions() {
         // here comes your code dealing with SQL queries...
     }
}
?>

Don't forget to :
- activate outline and vehiclePosition in loadPlugins (client.ini)
- activate outline and mapOverlay in the server-side conf file 
(loadPlugins etc.)
- if not already available, add a "point outline" layer in your mapfile 
(for instance cartoweb_point_outline) with the outlining settings
You may have to edit the server-side outline.ini.

Hope this helps.

AS

Alessandro Simplicio wrote:
> Hi, list. I try development the sample by
> 
> 
>   <http://www.cartoweb.org/cwiki/HowToDisplayOnTheMapAPointFromADatabaseQuery?action=fullsearch&value=linkto%3A%22HowToDisplayOnTheMapAPointFromADatabaseQuery%22&context=180>HowToDisplayOnTheMapAPointFromADatabaseQuery
>   on www.cartoweb.org <http://www.cartoweb.org/>, but my page gives the
>   next error:
> 
> Fatal error: Class 'ShapeStyle' not found in 
> /var/geo/www/cartoweb3/plugins/YourPluingName/client/ClientYourPluingName.php 
> on line 75
> 
> I put my archives in
> 
> /cartoweb3/plugins/YourPluingNa
> me/client/ClientYourPluingName.php
> /cartoweb3/plugins/YourPluingName/common/YourPluingName.php
> /cartoweb3/plugins/YourPluingName/common/YourPluingName.wsdl.inc
> /cartoweb3/plugins/YourPluingName/server/ServerYourPluingName.php
> 
> **************************************************************************************
> 
> My ClientYourPluingName.php is
> 
> 
> <?php
> class ClientYourPluingName extends ClientPlugin
>         implements ServerCaller  // 20060609 tirei e funcionou Pascoal 
> pus de nova pra fazer a query
> {
> 
>    private $vehiculeCoords;
> 
>    public function initialize()
>    {
>         $this->vehiculeCoords = array();
>         // get coord from db
>         $db = $this->getDb();
> 
>         $sql = "SELECT x, y FROM s_ocr_geo_rel WHERE gid = 5062"; 
> //ocorrrencia no bairro guaira rua alagoas - Pascoal
> //        $sql = 'SELECT * FROM "your_table_with_values" WHERE 
> any_condition_you_want'; //linha original
> 
>         $result = $db->query($sql);
>         if (DB::isError($result))
>         {
>             throw new CartoclientException($result->getMessage());
>         }
>         $row = NULL;
>         while ($result->fetchInto($row, DB_FETCHMODE_ASSOC))
>         {
>             $this->vehiculeCoords['x'] = $row['x'];
>             $this->vehiculeCoords['y'] = $row['y'];
> //            print $this->vehiculeCoords['x']."<br>";
> //            print $this->vehiculeCoords['y'];
> 
> //            $this->vehiculeCoordsY['y'] = 
> $row['name_of_the_y_coord_column'];            // linha original
>         }
>     }
> 
>     private function getDb()
>     {
> 
>         if (is_null($this->db))
>         {
> 
> 
>         $dsn = "pgsql://demo:demo@localhost/demo_plugins";
>         //    $dsn = $this->getConfig()->databaseDsn;
>            // print "dsn= ".$dsn."<br>";
> 
>             if (!$dsn)
>             {
>                 throw new CartoclientException('Search database DSN not 
> found');
>             }
> 
>             $this->db = DB::connect($dsn);
> 
>             //check for db connection error, throw exception if needed
>             Utils::checkDbError($dsn," ");     // erro aqui - faltavam 
> parametros do checkdberror ($db e $msg) - pascoal
> 
>         }
>         return $this->db;
>     }
> 
>     /**
>      * @see ServerCaller::buildRequest()
>      */
>     public function buildRequest()
>     {
> 
>         // we call for a new shape only if we have a x and y
>         if ($this->vehiculeCoords['x'] != '' and 
> $this->vehiculeCoords['y'] != '')
>         {
> 
>             $newElement = new 
> Point($this->vehiculeCoords['x'],$this->vehiculeCoords['y']);
>             //tinha um erro aqui - pascoal   - original - $newElement = 
> new Point($this->vehiculeCoords['x'], $this->$this->vehiculeCoords['y']);
> 
>             $styledShape = new StyledShape();
>             $styledShape->shape = $newElement;
> 
>             $shapeStyle = new ShapeStyle();
> 
>             $shapeStyle->symbol = 2;
> //            $shapeStyle->symbol = $this->type;           
>            
>             $shapeStyle->size = 20;
>             $shapeStyle->color->setFromRGB(51, 0, 204);
>             $shapeStyle->outlineColor->setFromRGB(0, 0, 0);
> 
>             $styledShape->shapeStyle = $shapeStyle;
> 
>             $YourPluingNameRequest = new YourPluingNameRequest();
>             $YourPluingNameRequest->shapes = array($styledShape);
> 
>             return $YourPluingNameRequest;
>         }
>     }
> 
> 
>     /**
>      * @see ServerCaller::initializeResult()
>      */
>     public function initializeResult($YourPluingNameResult)
>     {
>     }
> 
> 
>     /**
>      * @see ServerCaller::handleResult()
>      */
>     public function handleResult($YourPluingNameResult)
>     {
>     }
> }?>
> *
> *
> **************************************************************************************
> 
> My YourPluingName.php is
> 
> <?php
> 
> class YourPluingNameRequest extends CwSerializable
> {
> 
>       /**
>        * Styled shapes to be drawn
>        * @var array
>        */
>    public $shapes;
> 
>       /**
>        * @see CwSerializable::unserialize()
>        */
>    public function unserialize($struct)
>    {
>         $this->shapes = self::unserializeObjectMap($struct, 
> 'shapes','StyledShape');
>    }
> }
>     /**
>      * Result
>      * @package Plugins
>      */
>     class YourPluingNameResult
>     {
>     }
>     ?>
> 
> **************************************************************************************
> 
> My YourPluingName.wsdl.inc is
> 
>       <!-- outline -->
> 
>       <complexType name="Color">
>         <all>
>           <element name="r" type="xsd:int"/>
>           <element name="g" type="xsd:int"/>
>           <element name="b" type="xsd:int"/>
>         </all>
>       </complexType>
> 
>       <complexType name="ShapeStyle">
>         <all>
>           <element name="symbol" type="xsd:int"/>
>           <element name="size" type="xsd:int"/>
>           <element name="color" type="types:Color"/>
>           <element name="outlineColor" type="types:Color"/>
>           <element name="backgroundColor" type="types:Color"/>
>           <element name="transparency" type="xsd:int"/>
>         </all>
>       </complexType>
>      
>       <complexType name="LabelStyle">
>         <all>
>           <element name="font" type="xsd:int"/>
>           <element name="size" type="xsd:int"/>
>           <element name="color" type="types:Color"/>
>           <element name="outlineColor" type="types:Color"/>
>           <element name="backgroundColor" type="types:Color"/>
>         </all>
>       </complexType>
> 
>       <complexType name="StyledShape">
>         <all>
>           <element name="shapeStyle" type="types:ShapeStyle"/>
>           <element name="labelStyle" type="types:LabelStyle"/>
>           <element name="shape" type="types:Shape"/>
>           <element name="label" type="xsd:string"/>
>         </all>
>       </complexType>
> 
>       <complexType name="ArrayOfStyledShape">
>         <complexContent>
>           <restriction base="enc11:Array">
>             <attribute ref="enc11:arrayType" 
> wsdl:arrayType="types:StyledShape[]"/>
>           </restriction>
>         </complexContent>
>       </complexType>
> 
>       <complexType name="OutlineRequest">
>         <all>
>           <element name="className" type="xsd:string"/>
>           <element name="shapes" type="types:ArrayOfStyledShape"/>
>           <element name="maskMode" type="xsd:boolean"/>
>         </all>
>       </complexType>
> 
>       <complexType name="OutlineResult">
>         <all>
>           <element name="className" type="xsd:string"/>
>           <element name="area" type="xsd:double"/>
>         </all>
>       </complexType>
> 
> 
> **************************************************************************************
> 
> My ServerYourPluingName.php is
> 
> <?php
> class ServerYourPluingName extends ClientResponderAdapter
> {
> 
>     /**
>      * @var Logger
>      */
>     private $log;
> 
>     /**
>      * @var objet
>      */
>     private $shapes;
> 
> 
>     /**
>      * Constructor
>      */
>     function __construct()
>     {
>         parent::__construct();
>         $this->log =& LoggerManager::getLogger(__CLASS__);
>     }
> 
> 
>     /**
>      * @see ClientResponder::initializeRequest()
>      */
>     function initializeRequest($requ)
>     {
>         if ($requ) $this->shapes = $requ->shapes;
>     }
> 
> 
>     /**
>      * Result is set in initializeRequest but Outline must be called
>      * in handlePreDrawing
>      * @see ClientResponder::handlePreDrawing()
>      */
>     function handlePreDrawing($requ)
>     {
>         if ($requ)
>         {
>             $pluginManager = $this->serverContext->getPluginManager();
>             if (empty($pluginManager->outline))
>                 throw new CartoserverException("outline plugin not 
> loaded, "."and needed to draw the new element");
>             $pluginManager->outline->draw($this->shapes);
>         }
>     }
> }?>
> 
> ***************************************************************************************
> 
> What's wrong?
> 
> Thank you
> 
> Alessandro Simplício - Brazil


More information about the Cartoweb-users mailing list