Virtual layer access OGR ODBC problem

Yewondwossen Assefa assefa at DMSOLUTIONS.CA
Tue Oct 10 15:08:10 EDT 2006


Frank Warmerdam wrote:
> Yewondwossen Assefa wrote:
> 
>> Hi There,
>>
>>  I am trying to access an ODBC database using the ogr virtual  layer 
>> access (using shp2img). The layer seems to be defined properly as far 
>> as I know. It looks something like :
>>
>> ...
>> CONNECTION "<OGRVRTDataSource>
>>   <OGRVRTLayer name='AL05AK0001'>
>>   <SrcDataSource>ODBC:@sos_test</SrcDataSource>
>>   <SrcSQL>SELECT * FROM t_ResEau_Station_Data WHERE Site_Number = 
>> 'AL05AK0001'</SrcSQL>
>>   <GeometryType>wkbPoint</GeometryType>
>>   <GeometryType>wkbPoint</GeometryType>
>>   <LayerSRS>WGS84</LayerSRS>
>>   <GeometryField encoding='PointFromColumns' x='Longitude' y='Latitude'/>
>>   </OGRVRTLayer>
>>   </OGRVRTDataSource>"
>>
>> The error message is the following :
>>
>> msOGRFileNextShape(): OGR error. Attempt to use STRING field 
>> `Longitude' with numeric comparison `>'. <br>
>>
>> If I just use the SrcLayer instead of the SrcSQL, It seems to work ok :
>>
>> <SrcDataSource>ODBC:@sos_test</SrcDataSource>
>>  <SrcLayer>t_ResEau_Station_Data</SrcLayer>
>>   <GeometryType>wkbPoint</GeometryType>
>>   <LayerSRS>WGS84</LayerSRS>
>>   <GeometryField encoding='PointFromColumns' x='Longitude' y='Latitude'/>
>>
>>
>>  From what I understand this occures when comparing the x,y values to 
>> the map bbox to see if the element fits in the map. I am using 
>> gdal/ogr from CVS (updated few days ago).
> 
> 
> Assefa,
> 
> The problem seems to relate to the VRT (OVF) driver trying to apply
> spatial constraints to the Latitude and Longitude columns.  I am
> guessing these fields aren't actually numeric?  I'm a bit surprised
> to see that it occurs with SrcSQL, but not with SrcLayer.
> 
> I believe, as a work around, you can set the useSpatialSubquery='FALSE'
> attribute on GeometryField.
> 
> eg.
> <GeometryField encoding='PointFromColumns' useSpatialSubquery='FALSE'
>                x='Longitude' y='Latitude'/>
> 
> Best regards,

The useSpatialSubquery='FALSE' seems to do the trick, although I need to 
do more tests.
  Not sure if the fields are numeric:

   * if I do an ogrinfo the Latitude/Longitude is reported as being String
   * if I do access the db using php and echo the field types, I get 
Latitude DECIMAL and Longitude DECIMAL

  I will report if there are other issues.

  Thanks.


-- 
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst

Email: assefa at dmsolutions.ca
http://www.dmsolutions.ca/

Phone: (613) 565-5056 (ext 14)
Fax:   (613) 565-0925
----------------------------------------------------------------



More information about the mapserver-users mailing list