3

UMN Mapserver 6.1.2 and Openlayers 2.13 are running on the same local host. At the moment, I merely try to display restaurants and cafes of a local region as points/symbols on a map. Later, I would like to display corresponding information (like address, phonenumber etc.) in a popup. That's why I'd like to use a wfs-Layer. Until now, there seems to be a valid mapserver-response, but nothing shows up on the map.

The map file looks like:

MAP
  NAME "WFS_server"
  STATUS ON
  EXTENT 1156474.1137249 7145329.3937763 1242083.5853923 7248519.3819469 # EPSG:900913
  UNITS meters
  IMAGECOLOR 255 255 255

  PROJECTION
    "init=epsg:900913"
  END

  #
  # Start of web interface definition
  #
  WEB
    IMAGEPATH "/var/www/tmp/"
    IMAGEURL "/tmp/"
    METADATA
      "wfs_title"          "WFS Demo"                                                       
      "wfs_onlineresource" "http://localhost/cgi-bin/mapserv?map=/var/www/kroh/map/wfs.map" 
      "wfs_srs"            "EPSG:900913 EPSG:4326"                                                  
      "wfs_abstract"       "Restaurants und Cafes"                                  
      "wfs_enable_request" "*"                                                              
    END # metadata
  END # web

  ##############################
  # Start of layer definitions
  ##############################

  #-------------------------------
  # Restaurants und Cafes
  #-------------------------------
  LAYER
    NAME "restaurant"
    EXTENT 1156474.1137249 7145329.3937763 1242083.5853923 7248519.3819469
    STATUS ON
    DUMP TRUE
    METADATA
     "wfs_title"         "restaurant"  
     "wfs_srs"           "EPSG:900913" 
     "gml_include_items" "all"         
     "gml_featureid"     "osm_id"      
     "wfs_enable_request" "*"
    END # metadata
    TYPE POINT
    CONNECTIONTYPE postgis
    CONNECTION "host=127.0.0.1 port=5432 dbname=kr-oh user=xxxxx password=yyyyyy"
    DATA "way from ( SELECT * FROM planet_osm_point WHERE amenity='restaurant' OR amenity='cafe') as temp using unique osm_id using srid=900913"
    PROJECTION
     "init=epsg:900913"
    END # projection
  END #layer

END #mapfile

The correspondig javascript is:

var map;
var extent = new OpenLayers.Bounds(1156474.1137249,7145329.3937763,1242083.5853923,7248519.3819469).transform(new OpenLayers.Projection("EPSG:900913"));

function init() {

var map = new OpenLayers.Map('map', {
    restrictedExtent: extent,
    units : 'm',
    projection : new OpenLayers.Projection("EPSG:900913"),
    displayProjection : new OpenLayers.Projection("EPSG:900913")
});
var tileLayer = new OpenLayers.Layer.OSM('BackgroundLayer', 'tiles/${z}/${x}/${y}.png', {
    isBaseLayer : true, 
    displayInLayerSwitcher: false,
});

var restaurants = new OpenLayers.Layer.Vector("restaurants", {
    isBaseLayer: false,
    strategies : [new OpenLayers.Strategy.Fixed()],
    styleMap: new OpenLayers.StyleMap({ "default": rest}), 
    protocol : new OpenLayers.Protocol.WFS({
                    url : "http://localhost/cgi-bin/mapserv?map=/var/www/kroh/map/wfs.map",
                    featureType : "restaurant",
                    featurePrefix : 'ms',
                    version : "1.1.0",
                    geometryName : "msGeometry"
    })  
});

console.log(extent);
map.addLayers([tileLayer, restaurants]);

map.zoomToExtent(extent);
}

I am confused about the geometryName-property: Indeed, there is a ms:msGeometry-tag in the gml-response (see below). But the name of the geometry-column of my database table (planet-osm-point) is "way". Anyway, tried both without success.

Firebug shows me a server-response that seems to be valid (it is quite long, so i will post only the important part):

<?xml version='1.0' encoding="ISO-8859-1" ?>
<wfs:FeatureCollection
   xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
   xmlns:gml="http://www.opengis.net/gml"
   xmlns:wfs="http://www.opengis.net/wfs"
   xmlns:ogc="http://www.opengis.net/ogc"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://localhost/cgi-bin/mapserv?map=/var/www/kroh/map/wfs.map&amp;SERVICE=WFS&amp;VERSION=1.1.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=ms:restaurant&amp;OUTPUTFORMAT=text/xml;%20subtype=gml/3.1.1  http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
  <gml:boundedBy>
    <gml:Envelope srsName="EPSG:900913">
        <gml:lowerCorner>1160727.706951 7148532.942024</gml:lowerCorner>
        <gml:upperCorner>1234406.148319 7242238.824938</gml:upperCorner>
    </gml:Envelope>
  </gml:boundedBy>
<gml:featureMember>
  <ms:restaurant gml:id="restaurant.600511988">
    <gml:boundedBy>
        <gml:Envelope srsName="EPSG:900913">
            <gml:lowerCorner>1160727.706951 7190240.196885</gml:lowerCorner>
            <gml:upperCorner>1160727.706951 7190240.196885</gml:upperCorner>
        </gml:Envelope>
    </gml:boundedBy>
    <ms:msGeometry>
      <gml:Point srsName="EPSG:900913">
        <gml:pos>1160727.706951 7190240.196885</gml:pos>
      </gml:Point>
    </ms:msGeometry>
    <ms:osm_id>600511988</ms:osm_id>
    <ms:access></ms:access>
    <addr:housename></addr:housename>
    <addr:housenumber>16-18</addr:housenumber>
    <addr:interpolation></addr:interpolation>
    <ms:admin_level></ms:admin_level>
    <ms:aerialway></ms:aerialway>
    <ms:aeroway></ms:aeroway>
    <ms:amenity>restaurant</ms:amenity>
    <ms:area></ms:area>
    <ms:barrier></ms:barrier>
    <ms:bicycle></ms:bicycle>
    <ms:brand></ms:brand>
         [...]

Firebug also reports an error in the network-tab (sorry, it's in german):

XML-Verarbeitungsfehler: Präfix nicht an einen Namespace gebunden Adresse: moz-nullprincipal:{0117c44f-41e1-4ff5-af78-62777d603394} Zeile Nr. 30, Spalte 9:

        <addr:housename></addr:housename>
--------^

I would translate it like: xml-processerror: prefix not bound to a namespace. May be that helps?

Any ideas where are my mistakes or how to go about fixing this? Thanks in advance.

3
  • Welcome to GIS.se :) You're to be commended for providing good detail and context for your problem. I don't have the knowledge to help, but suggest pointing to live version of the app, if at all possible, might better help others help you. Aug 26, 2013 at 19:44
  • What I do is to use WMS instead, it's easier to work with. Also I use GeoJSON format.
    – Gery
    Aug 27, 2013 at 6:15
  • 1
    your problem seems to be that addr is not defined as a namespace prefix (with ms, gml, ogc, etc). I don't know enough about mapserver to be able to say why though.
    – Ian Turton
    Aug 27, 2013 at 10:08

2 Answers 2

3

Thanks to your hints I found the solution elsewere. Maybe it also helps others:

If OSM data is imported into PostGIS with osm2pgsql the resulting attribute names containing colons (addr:streetname etc.) must be renamed. Otherwise WFS server is creating invalid XML. osm2pgsql is converting some tags into attributes, and WFS server is converting attributes into XML elements. "name" in XML element is defined to be of type NCName and NCName does not allow the use of colon character. Therefore addr:housenumber will lead to invalid XML.

Short: Renaming the DB-Columns (e.g addr:housenumber to addr_housenumber) solves the problem.

Many thanks anyway!

0
0

What do you get from postgis from

SELECT * FROM planet_osm_point WHERE amenity='restaurant' OR amenity='cafe'    

If your postgis database has column names with colons in them, they might cause this sort of headaches.

3
  • sorry for my late respose.... @ matt: unfortunatley the app is still running on my local machine...
    – bembix
    Sep 27, 2013 at 10:24
  • @ gery: currently I am using a wms-layer and it works like a charm. I also thought about GeoJSON. But I am still a newbie, and that's why I'd like to learn the database approach
    – bembix
    Sep 27, 2013 at 10:24
  • @ Dave: indeed, there are 3 columns with colons in it (add:housenumber, add:housename and add:interpolation). Seems to be the problem, that ian mentioned (thank you, ian). Any suggestion how I can solve the problem?
    – bembix
    Sep 27, 2013 at 10:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.