.. _virtual_vector: ***************************************************************************** Virtual Spatial Data ***************************************************************************** .. contents:: Table of Contents :depth: 2 :backlinks: top This is an OGR extension to MapServer. It allows you to connect to databases that do not explicitly hold spatial data, as well as flat text files. Your data must have an X and a Y column, and the data may be accessed through an ODBC connection or a direct pointer to a text file. The original `VirtualSpatialData`_ wiki page may contain additional information. .. _`VirtualSpatialData`: http://trac.osgeo.org/mapserver/wiki/VirtualSpatialData Types of Databases ---------------------- The VirtualSpatialData OGR extension has been tested with the following databases and should, in theory, support all ODBC data sources. * Oracle * MySQL * SQL Server * Access * PostgreSQL Types of Flat Files ---------------------- Comma, tab or custom delimited text/flat files work with VirtualSpatialData. Steps for Display ----------------- 1. Create the Datasource Name (DSN) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Specific notes about creating a DSN on Windows and Linux can be found by searching the MapServer reference documents site * On some Windows systems you must create a SYSTEM DSN. 2. Test your Connection ~~~~~~~~~~~~~~~~~~~~~~~ Test your connection with ogrinfo. The syntax for this command is: :: > ogrinfo ODBC:user/pass@DSN table Windows users may not be required to specify a user/password, so the syntax would be: :: > ogrinfo ODBC:@DSN table Example: Accessing a comma separated text file through ODBC using ogrinfo The following is a snippet of the flat text file coal_dep.txt containing lat/long points: :: unknown,na,id,id2,mark,coalkey,coalkey2,long,lat 0.000,0.000,1,1,7,87,87,76.90238,51.07161 0.000,0.000,2,2,7,110,110,78.53851,50.69403 0.000,0.000,3,3,3,112,112,83.22586,71.24420 0.000,0.000,4,4,6,114,114,80.79896,73.41175 If the DSN name is Data_txt, the ogrinfo command to see a list of applicable files in the directory is: :: > ogrinfo ODBC:jeff/test@Data_txt INFO: Open of `ODBC:jeff/test@Data_txt' using driver `ODBC' successful. 1: coal_dep.csv 2: coal_dep.txt 3: coal_dep_nf.txt 4: coal_dep_trim.txt 5: Copy of coal_dep.txt 6: deposit.csv 7: maruia.asc 8: oahuGISbathy.csv 9: oahuGISbathy.txt 10: on_pts.txt 11: on_pts_utm.txt 12: test.txt 13: utm_test.txt Username and password may be optional, so the following may also be valid: :: > ogrinfo ODBC:@Data_txt Therefore, the command to see more information about one of the specific layers is: :: > ogrinfo ODBC:@Data_txt coal_dep.txt INFO: Open of `ODBC:@Data_txt' using driver `ODBC' successful. Layer name: coal_dep.txt Geometry: Unknown (any) Feature Count: 266 Layer SRS WKT: (unknown) UNKNOWN: String (255.0) NA: String (255.0) ID: String (255.0) ID2: String (255.0) MARK: String (255.0) COALKEY: String (255.0) COALKEY2: String (255.0) LONG: String (255.0) LAT: String (255.0) OGRFeature(coal_dep.txt):0 UNKNOWN (String) = 0.000 .... 3. Create a Virtual Data File ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is a file with an ovf extension and looks like the following: :: ODBC:user/pass@DSN tablename wkbPoint WGS84 More information on ovf files can be found at: http://www.gdal.org/ogr/drv_vrt.html Example ovf file for coal_dep.txt: :: ODBC:Data_txt coal_dep.txt wkbPoint 4. Test Virtual Data File with ogrinfo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Use ogrinfo to test your new ovf file, such as: :: > ogrinfo coal.ovf coal-test ERROR 4: Update access not supported for VRT datasources. Had to open data source read-only. INFO: Open of `myfile.ovf' using driver `VRT' successful. Layer name: coal_dep.txt Geometry: Unknown (any) Feature Count: 266 Layer SRS WKT: (unknown) UNKNOWN: String (255.0) NA: String (255.0) ID: String (255.0) ID2: String (255.0) MARK: String (255.0) ... 5. Mapfile Layer ~~~~~~~~~~~~~~~~ Using an ovf file your layer may look like: :: LAYER CONNECTION "coal.ovf" CONNECTIONTYPE OGR DATA "coal-test" METADATA "wms_srs" "4326" "wms_title" "coal-test" END NAME "coal-test" SIZEUNITS PIXELS STATUS ON TOLERANCE 0 TOLERANCEUNITS PIXELS TYPE POINT UNITS METERS CLASS STYLE COLOR 255 0 0 MAXSIZE 100 MINSIZE 1 SIZE 6 SYMBOL "star" END END END Or you may specify the ovf contents inline such as: :: LAYER CONNECTION " ODBC:@Data_txt coal_dep.txt wkbPoint " CONNECTIONTYPE OGR DATA "coal-test" METADATA "wms_srs" "4326" "wms_title" "coal-test" END NAME "coal-test" SIZEUNITS PIXELS STATUS ON TOLERANCE 0 TOLERANCEUNITS PIXELS TYPE POINT UNITS METERS CLASS STYLE COLOR 255 0 0 MAXSIZE 100 MINSIZE 1 SIZE 6 SYMBOL "star" END END END 6. Test your Mapfile ~~~~~~~~~~~~~~~~~~~~ The first thing you should try is to use the :ref:`shp2img` utility: :: shp2img -m mymapfile.map -o test.png Once you successfully created a map image, then try your application. Note Windows users may come across a problem where shp2img works but their application throws an error similar to this: :: Warning: [MapServer Error]: msOGRFileOpen(): Open failed for OGR connection `coal.ovf'. Unable to initialize ODBC connection to DSN for jeff/test@Data_txt, [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in D:\ms4w\Apache\htdocs\quickmap.php on line 40 If that happens you should make sure you have created a System DSN.