[Chameleon] MapTips future

Paul Spencer pspencer at dmsolutions.ca
Tue Aug 30 10:19:00 EDT 2005


looks like the interface for getShape for postgis layers doesn't work 
quite the same way as for shapefiles.

I would recommend writing a small php script that just focusses on the 
essential part of this and solving the problem there, then designing an 
appropriate work-around in Chameleon.

<?php

dl('php_mapscript.'.PHP_SHLIB_SUFFIX);
$oMap = ms_newMapObj( 'chameleon.map' );
$oLayer = $oMap->getLayerByName( "myPostgisLayer" );
$oLayer->open();
$oShape = $oLayer->getShape( -1, 0 );
echo "<pre>";
print_r($oShape);
echo "</pre>";
?>

at this point, you will need to experiment with getting the first shape 
from postgis via the layer object ... you may want to take this to the 
mapserver-users list (or even the postgis list) if you can't figure it out.

Cheers

Paul

Pierre Racine wrote:
> Thanks for this quick answer Paul. I appreciate.
> 
> My layer definition looks like this:
> 
>    LAYER
>        NAME pointslayer
>        CONNECTIONTYPE postgis
>        CONNECTION "bla,bla, bla"
>        DATA "geompoint from (SELECT geompoint,evorder,locname,days,oid 
> FROM a2_eventpoint(3,3)) AS new_table USING UNIQUE oid USING SRID=4269"
>        STATUS DEFAULT
>        TYPE polygon
>        TRANSPARENCY 50
> 
>        PROJECTION
>            "init=epsg:4269"
>        END
> 
>        CLASS
>            STYLE
>                #OUTLINECOLOR 50 50 50
>                COLOR  255 0 0
>                COLORRANGE 0 255 0 255 0 0
>                DATARANGE 1 70
>                RANGEITEM "evorder"
>            END
>        END
>       TEMPLATE "ttt_query.html"
>    END
> 
> If I look at (and debug using Zend Studio) the piece of code that gets 
> the availables fields from the DATA in LayerAttributes.php :
> 
> function GetLayerAttributes( $oLayer )
> {
>    $aszAttributes = array();
> 
>    if (//$oLayer->type == MS_LAYER_RASTER &&
>        $oLayer->connectiontype == MS_WMS)
>    {
>        //get the layer name from metadata if possible to avoid the problems
>        //with context layers being renamed
>        $szLayerName = $oLayer->getMetaData( "wms_name" );
>        if ($szLayerName == "")
>            $szLayerName = $oLayer->name;
> 
>        // get WFS the connection string
>        //$szWFSConnection = getWFSConnection( $oLayer->connection, 
> $szLayerName );
>        $aszInfo = getWFSConnection( $oLayer->connection, $szLayerName );
>        $szWFSConnection = $aszInfo['wfs'];
> 
>        $szWFSTypeName = "";
>        $sep = '';
>        // loop and build typename
>        foreach( $aszInfo['typename'] as $szTypeName )
>        {
>            $szWFSTypeName .= $sep.$szTypeName;
>            $sep = ',';
>        }
> 
>        // check for false (meaning no associated WFS)
>        if ( $szWFSConnection != "" )
>        {
>            $szWFSConnection = fixWFSURL( $szWFSConnection, 
> $szWFSTypeName );
> 
>            // get the attribute types
>            $aszAttributes['name'] = $oLayer->name;
>            $aszAttributes['index'] = $oLayer->index;
>            $aszAttributes['onlineresource'] = $szWFSConnection;
>            $aszAttributes['minx'] = "";
>            $aszAttributes['miny'] = "";
>            $aszAttributes['maxx'] = "";
>            $aszAttributes['maxy'] = "";
>            $aszAttributes['fields'] = getAttributeTypes( $szWFSConnection.
>                        'request=describefeaturetype', $szLayerName );
>        }
>    }
>    elseif ($oLayer->type == MS_LAYER_POINT ||
>        $oLayer->type == MS_LAYER_LINE ||
>        $oLayer->type == MS_LAYER_POLYGON )
>    {
> 
>        // process according to layer type
>        switch( $oLayer->connectiontype )
>        {
>            case MS_WFS:
>                //get the layer name from metadata if possible to avoid 
> the problems
>                //with context layers being renamed
>                $szLayerName = $oLayer->getMetaData( "wms_name" );
>                if ($szLayerName == "")
>                    $szLayerName = $oLayer->name;
> 
>                // record the connection string
>                $szWFSConnection = $oLayer->connection;
> 
>                // check the the WFS online resource contains the 
> necessary params
>                $szWFSConnection = fixWFSURL( $szWFSConnection, 
> $szLayerName );
> 
>                // get the attribute types
>                $aszAttributes['name'] = $oLayer->name;
>                $aszAttributes['index'] = $oLayer->index;
>                $aszAttributes['onlineresource'] = $szWFSConnection;
>                $aszAttributes['minx'] = "";
>                $aszAttributes['miny'] = "";
>                $aszAttributes['maxx'] = "";
>                $aszAttributes['maxy'] = "";
>                $aszAttributes['fields'] = getAttributeTypes( 
> $szWFSConnection.
>                                'request=describefeaturetype', 
> $szLayerName );
> 
> 
>                break;
> 
> 
>            default:
>                // open the layer
>                $oLayer->open();
> 
>                //handle tiled shapefiles correctly, otherwise they don't 
> get
>                //extents or attributes
>                if ($oLayer->connectiontype == MS_TILED_SHAPEFILE ||
>                    $oLayer->tileindex != "")
>                {
>                    //first tile is sufficient, assume that all 
> attributes are the same
>                    //in every tile (which is reasonable)
>                    $nTile = 0;
>                }
>                else
>                {
>                    //use -1 in getShape for non-tiled sources
>                    $nTile = -1;
>                }
>                // read the first line of the datasource to get
>                // name, index, and fields
>                $oShape = $oLayer->getShape($nTile, 0 );
>                $aszAttributes['name'] = $oLayer->name;
>                $aszAttributes['index'] = $oLayer->index;
>                $oRect = $oShape->bounds;
>                $aszAttributes['minx'] = $oRect->minx;
>                $aszAttributes['miny'] = $oRect->miny;
>                $aszAttributes['maxx'] = $oRect->maxx;
>                $aszAttributes['maxy'] = $oRect->maxy;
> 
>                foreach($oShape->values as $key => $value)
>                {
>                    $aszAttributes['fields'][$key] = "string";
>                }
>                break;
>        }
>    }
> 
>    return $aszAttributes;
> }
> 
> It does not handle Postgres. If I give it a try the "Configure MapTips" 
> dialog pop with:
> 
> Warning: array_keys(): The first argument should be an array in 
> D:\ms4w\apps\chameleon\htdocs\widgets\MapTips\MapTipsPopup.phtml on line 83
> 
> Warning: array_keys(): The first argument should be an array in 
> D:\ms4w\apps\chameleon\htdocs\widgets\MapTips\MapTipsPopup.phtml on line 83
> 
> Warning: array_keys(): The first argument should be an array in 
> D:\ms4w\apps\chameleon\htdocs\widgets\MapTips\MapTipsPopup.phtml on line 83
> 
> Warning: array_keys(): The first argument should be an array in 
> D:\ms4w\apps\chameleon\htdocs\widgets\MapTips\MapTipsPopup.phtml on line 83
> 
> ...inside. When the layer is of Postgres type, $oShape is null. My 
> understanding is that a switch has to be implemented in order to extract 
> the availables fields from the DATA declaration.
> 
> Am I on the right way?
> 
> I would be willing to give it a hand if I don't get lost too early...
> 
> Pierre
> 
>> From: Paul Spencer <pspencer at dmsolutions.ca>
>> To: Pierre Racine <racine_pierre at hotmail.com>
>> CC: chameleon at lists.maptools.org
>> Subject: Re: [Chameleon] MapTips future
>> Date: Mon, 29 Aug 2005 08:03:43 -0400
>>
>> Pierre,
>>
>> it should support fields from postgres as is, although I am not sure 
>> if I have tried it specifically with postgres.  Are you including all 
>> the attributes you want in the sql statement?
>>
>> I don't plan to enhance it to support jsapi at this moment, if someone 
>> has a patch I would be willing to apply it.  JSAPI will probably get 
>> an overhaul in 2006.
>>
>> Cheers
>>
>> Paul
>>
>> Pierre Racine wrote:
>>
>>> Hi,
>>>
>>> MapTips is a great, though a bit complex, widget. I have been playing 
>>> with it a bit and I was wondering if:
>>>
>>> 1) it will be expanded to support fields from Postgres? Right now it 
>>> seems to support only Shapefile and WMS.
>>>
>>> 2) support CWCJSAPI so that when we Zoom In/Out/Pan the imagemap gets 
>>> updated properly?
>>>
>>> Is there any plan to do this?
>>>
>>> Thanks,
>>>
>>> Pierre
>>>
>>>
>>> _______________________________________________
>>> Chameleon mailing list
>>> Chameleon at lists.maptools.org
>>> http://lists.maptools.org/mailman/listinfo/chameleon
>>>
>>
>> -- 
>> +-----------------------------------------------------------------+
>> |Paul Spencer                           pspencer at dmsolutions.ca   |
>> +-----------------------------------------------------------------+
>> |Applications & Software Development                              |
>> |DM Solutions Group Inc                 http://www.dmsolutions.ca/|
>> +-----------------------------------------------------------------+
> 
> 
> 
> _______________________________________________
> Chameleon mailing list
> Chameleon at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/chameleon
> 

-- 
+-----------------------------------------------------------------+
|Paul Spencer                           pspencer at dmsolutions.ca   |
+-----------------------------------------------------------------+
|Applications & Software Development                              |
|DM Solutions Group Inc                 http://www.dmsolutions.ca/|
+-----------------------------------------------------------------+


More information about the Chameleon mailing list