[mapserver-dev] Possible to use PostGIS as a TILEINDEX to shapefiles?

Daniel Morissette dmorissette at mapgears.com
Thu Apr 28 16:20:08 EDT 2011


I thought we could have used a separate layer of type TILEINDEX to 
achive this but I guess I was wrong. I found the following exchange 
between you and Frank where the conclusion was that OGR does not 
currently support tileindex coming from a separate layer:

http://osgeo-org.1803224.n2.nabble.com/Using-OGR-with-a-TILEINDEX-layer-td5800729.html

Sorry for the misleading infos.

Daniel


On 11-04-28 01:44 PM, Brent Fraser wrote:
> Daniel,
>
> I hadn't considered that; thanks for the pointer. But still no success...
>
> I set up my LAYER definition as:
>
> LAYER
> NAME 'Landfast'
> TYPE LINE
> STATUS DEFAULT
>
> CONNECTIONTYPE OGR
> TILEINDEX "PG:dbname='PN2010_0911' host='thinkcentre1' port='5432'
> user='PN2010_0911' password='PN2010_0911'"
> DATA "select imageid, location_landfast, wkb_geometry from images"
> TILEITEM "location_landfast"
>
> Running shp2img v6.0 beta4 results in:
>
> msDrawMap(): Image handling error. Failed to draw layer named
> 'Landfast'. <br>
> msOGRFileOpen(): OGR error. ExecuteSQL(select imageid,
> location_landfast, wkb_geometry from images) failed.
> SELECT from table images failed, no such table/featureclass. <br>
>
> ======================================
>
> ogrinfo has no problem getting at the index:
> G:\>ogrinfo -sql "select imageid, location_landfast, wkb_geometry from
> images" PG:"host='thinkcentre1' dbname='PN2010_0911' user='PN2010_0911'
> password='PN2010_0911'"
> INFO: Open of `PG:host='thinkcentre1' dbname='PN2010_0911'
> user='PN2010_0911' password='PN2010_0911''
> using driver `PostgreSQL' successful.
>
> Layer name: sql_statement
> Geometry: Unknown (any)
> Feature Count: 3
> Extent: (-24.392027, 74.808823) - (-9.363171, 78.164185)
> Layer SRS WKT:
> (unknown)
> Geometry Column = wkb_geometry
> imageid: Integer (0.0)
> location_landfast: String (250.0)
> OGRFeature(sql_statement):0
> imageid (Integer) = 3
> location_landfast (String) =
> G:\GeoData\PN2010-0911\ice_edge\p230r005_20010703.shp
> POLYGON ((-20.789359999999999 77.004463200000004,-15.1615524
> 76.001411399999995,-18.995115299999998 74.808822599999999,-24.3920269
> 75.729690599999998,-20.789359999999999 77.004463200000004))
>
> OGRFeature(sql_statement):1
> imageid (Integer) = 2
> location_landfast (String) =
> G:\GeoData\PN2010-0911\ice_edge\p230r005_20010703.shp
> POLYGON ((-19.2442856 77.004463200000004,-13.616478
> 76.001411399999995,-17.4500408 74.808822599999999,-22.846952399999999
> 75.729690599999998,-19.2442856 77.004463200000004))
>
> OGRFeature(sql_statement):2
> imageid (Integer) = 1
> location_landfast (String) =
> G:\GeoData\PN2010-0911\ice_edge\p230r005_20010703.shp
> POLYGON ((-15.1506767 78.164184599999999,-9.3631706
> 77.072578399999998,-13.8204384 75.943901100000005,-19.4379616
> 76.942634600000005,-15.1506767 78.164184599999999))
>
> Before I get too deep into a debug session, do you have an working
> example of a LAYER definition?
>
> Best Regards,
> Brent Fraser
>
>
> On 4/28/2011 9:51 AM, Daniel Morissette wrote:
>> I meant use CONNECTIONTYPE OGR for both the tileindex (OGR pointing to
>> your postgis tileindex table) and the shapefiles (connectiontype OGR
>> to read the shapefiles). This would not go through mapshape.c but
>> instead mapogr.cpp:
>>
>> http://mapserver.org/input/vector/ogr.html#tileindex-with-ogr
>>
>>
>> On 11-04-28 10:34 AM, Brent Fraser wrote:
>>> Daniel,
>>>
>>> Using OGR results in tlp->connectiontype==MS_OGR and fails as well.
>>>
>>> The main problem (I think) is that the code after line 1901 in
>>> mapshape.c does a call to msDBFGetItemIndex in preparation for getting
>>> the value stored in the "location" column. It needs to be replaced with
>>> the code from mapraster.c, line 468:
>>>
>>> /* get the tileitem index */
>>> for(i=0; i<tlp->numitems; i++) {
>>> if(strcasecmp(tlp->items[i], layer->tileitem) == 0) {
>>> tileitemindex = i;
>>> break;
>>> }
>>> }
>>>
>>> and there could be a few other changes as well. I'll have to do some
>>> hacking...
>>>
>>> Best Regards,
>>> Brent Fraser
>>>
>>>
>>> On 4/27/2011 9:02 PM, Daniel Morissette wrote:
>>>> Unfortunately too late for 6.0 as you had already figured out. However
>>>> you could use OGR connections for your PostGIS tileindex and to read
>>>> your shapefiles with the current version.
>>>>
>>>> Daniel
>>>>
>>>>
>>>> On 11-04-27 08:42 PM, Brent Fraser wrote:
>>>>> I've used a PostGIS layer as a TILEINDEX to raster files, but it
>>>>> doesn't
>>>>> seem to work for pointing to shapefiles.
>>>>>
>>>>> And looking at mapshape.c at line 1901 it checks:
>>>>>
>>>>> tlp = (GET_LAYER(layer->map, tSHP->tilelayerindex));
>>>>>
>>>>> if(tlp->connectiontype != MS_SHAPEFILE) {
>>>>> msSetError(MS_SDEERR, "Tileindex layer must be a shapefile.",
>>>>> "msTiledSHPOpenFile()");
>>>>> return(MS_FAILURE);
>>>>> }
>>>>>
>>>>>
>>>>> mapraster.c has some logic around line 410 that seems more generic.
>>>>>
>>>>> I wonder if it would be possible to fix this for 6.0, or is it too
>>>>> late
>>>>> now that rc1 is out?
>>>>>
>>>>
>>>>
>>>
>>> _______________________________________________
>>> mapserver-dev mailing list
>>> mapserver-dev at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>>
>>
>


-- 
Daniel Morissette
http://www.mapgears.com/
Provider of Professional MapServer Support since 2000



More information about the mapserver-dev mailing list