[mapserver-users] RE:mapserver + MS SQL

Ben Madin ben at remoteinformation.com.au
Thu Sep 25 21:16:46 PDT 2008


G'day all,

I have a similar problem to this, but slightly more basic, and  
slightly more outdated!

I have a MS SQL table with investigations in, and the latitude and  
longitude of said investigations. I wanted to be able to make a map,  
using OGR / ODBC to connect to MS SQL, and display the points classed  
by the level of investigation.

I created the OGR connection :

<OGRVRTDataSource>
     <OGRVRTLayer name='mmapdata'>
         <SrcDataSource>ODBC:mmap/private at mmap</SrcDataSource>
         <SrcSQL>select rep.id, rep.latitude as latitude,  
rep.longitude as longitude, upper(left(rlu1.lookupfull,1)) 
+substring(rlu1.lookupfull,2,len(rlu1.lookupfull)) as response from  
reports rep  join results res1 on (res1.reportid = rep.id and  
res1.resulttypeid = 17 and res1.del=0) join resultlookup rlu1 on  
(rlu1.resulttypesid = 17 and rlu1.id = res1.resultvalue)  where  
projectid = 30</SrcSQL>
         <GeometryType>wkbPoint</GeometryType>
         <GeometryField encoding='PointFromColumns' x='longitude'  
y='latitude'/>
     </OGRVRTLayer>
</OGRVRTDataSource>

and tested it :

C:\Documents and Settings\Administrator>C:\ms4w\tools\gdal-ogr\ogrinfo  
C:\ms4w\Apache\htdocs\mmap\mapserver\xot1.ovf -ro -al
INFO: Open of `C:\ms4w\Apache\htdocs\mmap\mapserver\xot1.ovf'
using driver `VRT' successful.

Layer name: mmapdata
Geometry: Point
Feature Count: 1978
Extent: (0.000000, -43.173000) - (153.570000, 0.000000)
Layer SRS WKT:
(unknown)
id: Integer (10.0)
latitude: String (7.0)
longitude: String (7.0)
response: String (256.0)
OGRFeature(mmapdata):0
   id (Integer) = 8887
   latitude (String) = -34.922
   longitude (String) = 138.599
   response (String) = Specimens sent to the Laboratory
   POINT (138.59899999999999 -34.921999999999997 0)

OGRFeature(mmapdata):1
   id (Integer) = 10128
   latitude (String) = -18.280
   longitude (String) = 143.530
   response (String) = Specimens sent to the Laboratory
   POINT (143.53 -18.28 0)

OGRFeature(mmapdata):2
   id (Integer) = 10129
   latitude (String) = -16.920
   longitude (String) = 145.770
   response (String) = Investigation
   POINT (145.77000000000001 -16.920000000000002 0)


So far, so good.

Then I built it into a map file :

MAP
   EXTENT 110 -45 160 -8
   FONTSET "/ms4w/Apache/htdocs/mmap/mapserver//fonts/fontset.txt"
   IMAGECOLOR 203 230 255
   IMAGETYPE gif
   SYMBOLSET "/ms4w/Apache/htdocs/mmap/mapserver//symbols/colour.sym"
   SHAPEPATH "C:\ms4w\Apache\htdocs\mmap\mapserver"
   SIZE 600 600
   STATUS ON
   UNITS DD
   NAME "basemap"

   OUTPUTFORMAT
     NAME "gif"
     MIMETYPE "image/gif"
     DRIVER "gd/gif"
     EXTENSION "gif"
     IMAGEMODE "PC256"
     TRANSPARENT FALSE
   END

   LEGEND
     IMAGECOLOR 255 255 255
     KEYSIZE 20 8
     KEYSPACING 5 4
     LABEL
       ANGLE 0.000000
       ANTIALIAS TRUE
       FONT "lucida"
       MAXSIZE 256
       MINSIZE 4
       SIZE 7
       TYPE TRUETYPE
       BUFFER 2
       COLOR 0 0 0
       FORCE FALSE
       MINDISTANCE -1
       MINFEATURESIZE -1
       OFFSET 0 0
       OUTLINECOLOR 255 255 250
       PARTIALS TRUE
       POSITION UR
       SHADOWCOLOR 250 250 250
       SHADOWSIZE 2 2
     END
     POSITION LL
     STATUS EMBED
     TRANSPARENT TRUE
   END


   LAYER
     DATA "ausregion"
     GROUP "Australia"
       METADATA
       END
     NAME "ausregionlayer"
     SIZEUNITS DD
     STATUS DEFAULT
     TOLERANCEUNITS PIXELS
     TYPE POLYGON
     UNITS METERS
     CLASS
       METADATA
       END
       STYLE
         ANGLE 360
         COLOR 245 245 220
         SYMBOL 0
       END
     END
   END


   LAYER
     CONNECTION "<OGRVRTDataSource>
     <OGRVRTLayer name='mmapdata'>
         <SrcDataSource>ODBC:mmap/password at mmap</SrcDataSource>
         <SrcSQL>select rep.latitude as latitude, rep.longitude as  
longitude, upper(left(rlu1.lookupfull,1))+substring(rlu1.lookupfull, 
2,len(rlu1.lookupfull)) as response from reports rep  join results  
res1 on (res1.reportid = rep.id and res1.resulttypeid = 17 and  
res1.del=0) join resultlookup rlu1 on (rlu1.resulttypesid = 17 and  
rlu1.id = res1.resultvalue)  where projectid = 30</SrcSQL>
         <GeometryType>wkbPoint</GeometryType>
         <GeometryField encoding='PointFromColumns' x='longitude'  
y='latitude'/>
     </OGRVRTLayer>
</OGRVRTDataSource>"
     CONNECTIONTYPE OGR
     DATA "mmapdata"
CLASSITEM response
       METADATA
       END
     NAME ".xot1"
     SIZEUNITS PIXELS
     STATUS DEFAULT
     TOLERANCEUNITS PIXELS
     TYPE POINT
     UNITS METERS
     CLASS
       NAME "Field investigation"
       EXPRESSION "investigation"
       LABEL
         SIZE MEDIUM
         TYPE BITMAP
         BUFFER 0
         COLOR 0 0 0
         FORCE FALSE
         MINDISTANCE -1
         MINFEATURESIZE -1
         OFFSET 0 0
         PARTIALS FALSE
         POSITION AUTO
       END
       METADATA
       END
       STYLE
         ANGLE 360
         COLOR 166 206 227
         SIZE 10
         SYMBOL 1
       END
     END

etc

and try :

C:\Documents and Settings\Administrator>c:\ms4w\tools\mapserv 
\shp2img.exe -m C:\ms4w\Apache\htdocs\nahis\mapserver\tmp 
\NAHISdf7c8a22c2b16b33730aa228fac405bb.map
  -l .xot1 -o C:\test.gif
scalefactor = 12

and I get the map with the borders etc, but no points (the legend show  
up OK). Even if I remove the classitem and expressions, I still don't  
get any points.

My two questions therefore are :

1. How can I find if I am truly getting no points at all, or they are  
not displaying.

2. How do I set up expressions to specify that the third column in my  
sql  statement (response) is the classitem and to class based on it.

The catch here is that to maintain compatibility with the rest of the  
system, I am using ms4w 1.5.5

cheers

Ben






-- 

Ben Madin
REMOTE INFORMATION

t : +61 8 9192 5455
f : +61 8 9192 5535
m : 0448 887 220
Broome   WA   6725

ben at remoteinformation.com.au



							Out here, it pays to know...





More information about the MapServer-users mailing list