Upload
mysqlconference
View
534
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
Wide Open Spaces: MySQL as a Web Mapping Service
Backend Don Beesing
Alion Science and Technology USJFCOM Experimentation
Modeling and Simulation
April 22, 2009
Overview Going to show MySQL in one aspect of GIS World Security Restrictions Feel free to ask questions
Problem Experiment based environment How to share geospatial information Many different government organizations Disparate systems on each site Fallback systems to use
Solution WMS (Web Mapping Service) OpenGIS Standard Http request returns images Can be a queryable service
Constraints Typical commercial setup Timing & dollar issues Unofficial open source policy Our idea MySQL & MapServer
Diagram of Implementation
HTTPDServer
MapServer CGI
Users with access to WMS Publishing
Users without access to WMS
Publishing
COP COP/WMS Server
WMS Feed WMS Feed
HTTP Feed
MySQL Server
Point and click GUI
MySQL • Already a key component of lab • Proof of concept • Stubbornness of lab manager
MySQL Implementation • Schema setup – geometry type • Parent/child tables for updates • Roads not taken – Shapefile import
MapServer • Open source • Standards compliant • OGR connector to link w/MySQL • Standards version issues • Reliance on linked WFS
MapServer Format Example Meta Data Header
WEB METADATA "wms_title" "J9 Noble Resolve WMS Server" "wms_onlineresource" "https://yoursite.com/mapserv?map=nr.map&" "wms_srs" "EPSG:4269 EPSG:4326" "wfs_title" "J9 Noble Resolve WFS Server" "wfs_onlineresource" "https://yoursite.com/mapserv?map=nr.map&" "wfs_srs" "EPSG:4326" END END
Format Example Layer Info
LAYER CONNECTIONTYPE OGR CONNECTION "MYSQL:noble_resolve_08,user=test,password=test,host=127.0.0.1,port=3306" DATA "SELECT geom,id,max(update_id) as `update_ref`,object_title,IF(u.description IS NULL, g.description, u.description) as `description`, IF(u.attachments IS NULL, SUBSTRING_INDEX(SUBSTRING(g.attachments,2),',',1), SUBSTRING_INDEX(SUBSTRING(u.attachments,2),',',1)) as `Attachment` FROM geoint g LEFT JOIN geoint_updates u ON id=record_id WHERE object_type IN ('POINT','MULTIPOINT') AND incident_type='fire' GROUP BY id, update_id;" NAME "fire_points" METADATA ##wms metadata "wms_title" "fire_points" "wms_author" "USJFCOM J9" "wms_srs" "EPSG:4269 EPSG:4326" "wms_include_items" "all"
##wfs metadata "wfs_title" "fire_points" "gml_featureid" "id" "gml_include_items" "all" "gml_geometries" "standard" "gml_standard_type" "point"
Format Example Layer Info (cont) END TYPE POINT STATUS ON DUMP TRUE TOLERANCE 3 TRANSPARENCY 90 TEMPLATE "test.php" PROJECTION "init=epsg:4326" END CLASS NAME "fire_points" SYMBOL graphics/flames.gif END END
Giesken
James
J9 Control
Screenshot Demo
Screenshot Demo
How did MySQL grade out? Pros Cons Incompletes
Unresolved Issues – Steps Forward • Speed of Google Maps • Grouping of layers • Standards Assessment • MySQL GIS function usage expansion
Thanks • Would like to thank Steve Judy who was instrumental
in the front end design and design of some of the subtables used for this project
• Also would like to thank Chris Kannan of NGA who I bounced a lot of these ideas off of and who put me in contact with people who had used MapServer before
References • http://mapserver.org • http://www.gdal.org/ogr • http://www.opengeospatial.org • http://www.jfcom.mil/about/experiment.html
jo