[mapserver-users] tinyows

Alexandre Dubé adube at mapgears.com
Fri Nov 9 05:50:08 PST 2012


Hi,

   Yeah, playing with WFS in OpenLayers and TinyOWS can be tricky. I've 
had similar problem to yours in the past and I'm on Linux platforms, so 
I don't think it's related to Windows.

   Jukka gave good advices, but I wouldn't give up trying using TinyOWS 
yet.  Here's some more advices.

   First, I'd recommend that you create a small OpenLayers demo map with 
less tools possible only to test your layer.  Then, choose EPSG:32740 as 
your demo projection.  Worry about reprojection later.

   Double-check each configuration elements :

<tinyows online_resource="localhost/cgi-bin/tinyows.exe"
----> use a full url : http://localhost/cgi-bin/tinyows

        schema_dir="C:\ms4w\apps\tinyows\schema\">
<pg host="localhost" user="postgres" password="postgres" 
dbname="watergis" port="5432"/>
<metadata name="TinyOWS Server"
           title="TinyOWS Server - WFS-T Frida Service" />
<contact name="TinyOWS Server"
          site="http://www.tinyows.org/"
          email="tinyows-users at lists.maptools.org" />
<layer retrievable="1"
        writable="1"

        ns_prefix="water"
----> use a word you would use for all your layers.  The tinyows demo 
config proposes "tows".  Make sure it's also used in your 
OpenLayers.Protocol.WFS configuration

        ns_uri="http://localhost/"
        name="pipeline_segment"
        title="pipeline_segment"
        table= "pipeline_segment"
        srid="32740"
        schema="water"/>
</tinyows>



wfs = new OpenLayers.Layer.Vector("Editable Features", {
         strategies: [new OpenLayers.Strategy.BBOX(), saveStrategy],
         projection: new OpenLayers.Projection("EPSG:31467"),
         // use 32740 instead

         protocol: new OpenLayers.Protocol.WFS({
               version: "1.1.0",
               // ----> try with 1.0.0 too

               srsName: "EPSG:32740",
               url: "http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe",
               // Use the exact same url host has you have setup as your 
layer ns_uri

               featureNS :  "tows",
               // the featureNS has to be equal to the 'ns_uri' you 
defined in your config, so "http://localhost/"

               featureType: "pipeline_segment",
               geometryName: "geometry",
               schema: 
"http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe?service=wfs&request=DescribeFeatureType&version=1.1.0&typename=water:pipeline_segment"
               // I usually don't define the schema property at all 
assuming that the config 'schema_dir' is properly set (you should make 
sure its value is ok)

         })
});


For comparison, here's a tows config and OL layer definition that worked 
for me.

### TinyOWS config
<tinyows 
online_resource="http://labs.mapgears.com/weather-sites-tinyows-1.0.0.fcgi"
      schema_dir="/usr/local/share/tinyows/schema/">
   <pg host="127.0.0.1"
       user="*********"
       password="*******"
       dbname="*********"
       port="****"/>
   <metadata name="TinyOWS Server"
         title="TinyOWS Server - labs.mapgears.com" />
   <contact name="TinyOWS Server"
            site="http://labs.mapgears.com/"
           email="adube at mapgears.com" />
   <layer retrievable="1"
      writable="0"
      ns_prefix="tows"
      ns_uri="http://labs.mapgears.com/"
      name="root" >
     <layer name="sites" title="Sites" />
     <layer name="sites_view" title="Sites (view)" />
     <layer name="alerts" title="Alerts" />
   </layer>
</tinyows>

### The apache config used to bind TinyOWS to this config using a 
different url
FastCgiServer /usr/lib/cgi-bin/tinyows-1.0.0-weather-sites.fcgi 
-initial-env 
TINYOWS_CONFIG_FILE=/opt/labs/weather-sites/etc/tinyows/config.xml
ScriptAlias "/weather-sites-tinyows-1.0.0.fcgi" 
"/usr/lib/cgi-bin/tinyows-1.0.0-weather-sites.fcgi"

### The OpenLayers.Layer object using the OpenLayers.Protocol.WFS
var layer = new OpenLayers.Layer.Vector("Sites", {
     strategies: [new OpenLayers.Strategy.BBOX()],
     projection: new OpenLayers.Projection("EPSG:4326"),
     protocol: new OpenLayers.Protocol.WFS({
         version: "1.0.0",
         srsName: "EPSG:4326",
         url: 'http://labs.mapgears.com/weather-sites-tinyows-1.0.0.fcgi',
         featureNS :  'http://labs.mapgears.com/',
         featureType: "sites_view",
         outputFormat: "application/json",
         readFormat: new OpenLayers.Format.GeoJSON(),
         geometryName: "pos"
     })
});


Finally, here's a trick I use when debuggin POST requests.  I use the 
wget command to quickly launch requests and see their result using the 
--post-data argument to send the GML GetFeature request.

wget "http://localhost/cgi-bin/tinyows" 
--post-data='<your_wfs_getfeature_xml_goes_here>' 
--header="Content-Type: application/xml; charset=UTF-8" -O /tmp/ttt.txt


HTH,

Alexandre


On 12-11-09 05:04 AM, Rahkonen Jukka wrote:
> Hi,
>
> Forum is right but obviously there are not many people doing WFS-T with OpenLayers against TinyOWS installed on Windows. If you are totally jammed I would recommend you to leave TinyOWS aside for a while and try to make your OpenLayers application to work with Geoserver WFS-T. I believe you will have success with it.
>
> -Jukka Rahkonen-
>
>
>
>> -----Alkuperäinen viesti-----
>> Lähettäjä: aho [mailto:forum.email.a at googlemail.com]
>> Lähetetty: 9. marraskuuta 2012 11:27
>> Vastaanottaja: sdikiy at volz.ua
>> Kopio: Rahkonen Jukka; mapserver-users at lists.osgeo.org
>> Aihe: Re: [mapserver-users] tinyows
>>
>> Hi again,
>>
>> I am still searching and not finding something. I setup everything again with
>> the WFS-T tutorial. Now I am getting the following error message:
>>
>> [Thu Nov 08 16:32:21 2012] [ERROR] local list type: A type, derived by list or
>> union, must have the simple ur-type definition as base type, not
>> '{http://www.opengis.net/gml}doubleOrNullList'.
>>
>> Am I right with this forum? Because actually nobody replies.
>>
>>
>>
>>
>> Am 11/6/2012 1:30 PM, schrieb aho:
>>> Hey,
>>>
>>> I still havn´t found the problem with the tinyows - but at the moment
>>> there is no error message when i am loading the wfs. Also fiddler
>>> doesn´t list the tinyows.exe anymore. But my proxy is correct - I can
>>> load it via uDig and ArcMap. QGIS has a problem, but there is not a
>>> single error in the tinyows log file - just events and sqls are
>>> listed, that looks quite good. With Open layers there is nothing
>>> logged - it seems like the request is not send.
>>>
>>> Is there any limitation for the version? I downloaded the latest
>>> (2.12) one, but on the tinyows page is version 2.09 listed?!
>>>
>>> Kind regards
>>>
>>> Am 11/2/2012 3:29 PM, schrieb Serge Dikiy:
>>>> Hi,
>>>>
>>>>
>> http://translate.google.com/translate?sl=ru&tl=en&js=n&prev=_t&hl=en&
>>>> ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fgis-
>> lab.info%2Fforum%2Fviewto
>>>> pic.php%3Ff%3D41%26t%3D10329
>>>>
>>>>
>>>> BR
>>>>
>>>> On Fri, Nov 2, 2012 at 4:15 PM, aho <forum.email.a at googlemail.com>
>>>> wrote:
>>>>> Hi Jukka,
>>>>>
>>>>> ok, I solved the problem with the requests. The following returns
>>>>> from
>>>>> tinyOWS:
>>>>>
>>>>> <?xml version='1.0' encoding='UTF-8'?> <ows:ExceptionReport
>>>>>    xmlns='http://www.opengis.net/ows'
>>>>>    xmlns:ows='http://www.opengis.net/ows'
>>>>>    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
>>>>>    xsi:schemaLocation='http://www.opengis.net/ows
>>>>> http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd'
>>>>>    version='1.1.0' language='en'>
>>>>>    <ows:Exception exceptionCode='InvalidParameterValue'
>>>>> locator='request'>
>>>>>     <ows:ExceptionText>XML request isn't valid</ows:ExceptionText>
>>>>>    </ows:Exception>
>>>>> </ows:ExceptionReport>
>>>>>
>>>>> Here is the errorlog:
>>>>>
>>>>> Fri Nov 02 15:11:46 2012] [EVENT] == FCGI START == [Fri Nov 02
>>>>> 15:11:46 2012] [QUERY] <wfs:GetFeature
>>>>> xmlns:wfs="http://www.opengis.net/wfs" service="WFS"
>> version="1.0.0"
>>>>> xsi:schemaLocation="http://www.opengis.net/wfs
>>>>> http://schemas.opengis.net/wfs/1.0.0/WFS-transaction.xsd water
>>>>> http://127.0.0.1:8000/redir/cgi-
>> bin/tinyows.exe?service=wfs&request=GetFeature&version=1.0.
>> 0&typename=water:armature"
>>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-
>> instance"><wfs:Query
>>>>> typeName="feature:armature" xmlns:feature="water"><ogc:Filter
>>>>>
>> xmlns:ogc="http://www.opengis.net/ogc"><ogc:BBOX><ogc:PropertyName
>>> g
>>>>> eometry</ogc:PropertyName><gml:Box
>>>>>
>>>>> xmlns:gml="http://www.opengis.net/gml"
>>>>> srsName="EPSG:32740"><gml:coordinates
>>>>> decimal="." cs="," ts=" ">-2866.3885602952,-1910.9257068634
>>>>>
>> 2866.3885602952,1910.9257068634</gml:coordinates></gml:Box></ogc:BBO
>>>>> X></ogc:Filter></wfs:Query></wfs:GetFeature>
>>>>>
>>>>> [Fri Nov 02 15:11:46 2012] [ERROR] Element
>>>>> '{http://www.w3.org/2001/XMLSchema}import': Failed to locate a
>>>>> schema at location
>>>>> 'localhost/cgi-
>> bin/tinyows.exe?service=WFS&request=DescribeFeatureType&version=1.0.
>> 0'.
>>>>> Skipping the import.
>>>>>
>>>>> [Fri Nov 02 15:11:46 2012] [ERROR] Element
>>>>> '{http://www.opengis.net/wfs}GetFeature': No matching global
>>>>> declaration available for the validation root.
>>>>>
>>>>> [Fri Nov 02 15:11:46 2012] [ERROR] XML request isn't valid [Fri Nov
>>>>> 02 15:11:46 2012] [EVENT] == FCGI SHUTDOWN == [Fri Nov 02 15:11:46
>>>>> 2012] [EVENT] == TINYOWS SHUTDOWN ==
>>>>>
>>>>> Has it something to do with the schema? I found a post with
>>>>> something similar
>>>>> (http://osgeo-org.1560.n6.nabble.com/TinyOWS-wrong-call-in-
>> OpenLayer
>>>>> s-InvalidParameterValue-XML-request-isn-t-valid-td5009059.html)
>>>>>
>>>>> and replaced all my old tinyows files and copied the ones from the
>>>>> ms4w homepage.
>>>>>
>>>>> Do you have some more ideas?
>>>>>
>>>>> Am 11/2/2012 10:56 AM, schrieb Rahkonen Jukka:
>>>>>
>>>>> Hi,
>>>>>
>>>>> Yes, it seems to be OpenLayers question then. However, do still
>>>>> capture the requests because without them you cannot understand
>> what
>>>>> happens really.  My guess is that something in wrong in how
>>>>> EPSG:31467 and EPSG:32740 are used and OpenLayers is requesting data
>>>>> from a place where there are no data.
>>>>>
>>>>> -Jukka-
>>>>>
>>>>> aho wrote:
>>>>>
>>>>>
>>>>> Hi Jukka,
>>>>>
>>>>> thanks a lot for your answer and the good tips! I tried all of the
>>>>> links
>>>>>
>>>>> and they are working. Also I checked it in QGIS and there I can load
>>>>> it too.
>>>>>
>>>>> So I guess it will be better to write again to the openlayers
>>>>> mailinglist?!
>>>>>
>>>>> Am 11/2/2012 10:21 AM, schrieb Rahkonen Jukka:
>>>>>
>>>>> Hi,
>>>>>
>>>>> You must capture the traffic between OpenLayers and TinyOWS. I am
>>>>> using myself Fiddler2 proxy but I suppose that Firebug can show you
>>>>> what OpenLayers is sending and high enough TinyOWS logging level
>>>>> will also gather requests into tinyows log. The software is not
>>>>> important but you just have to get the requests so you can resend
>>>>> them with a browser or some other tool that yuo can control and see
>>>>> what happens. You can also include the requests in your further
>>>>> mails. Then the question will be "OpenLayers is sending this and
>>>>> TinyOWS is sending back that, what's wrong?" and it will be much
>>>>> easier to answer.
>>>>>
>>>>> As always with WFS, start with these requests with a browser before
>>>>> doing anything with OpenLayers:
>>>>> http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe?service=wfs&request=
>>>>> GetCapabilities&version=1.1.0
>>>>>
>>>>>
>>>>> http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe?service=wfs&request=
>>>>>
>> DescribeFeatureType&version=1.1.0&typename=water:pipeline_segment
>>>>>
>>>>> http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe?service=wfs&request=
>>>>>
>> GetFeature&version=1.1.0&typename=water:pipeline_segment&maxFeatu
>> res
>>>>> =10
>>>>>
>>>>>
>>>>> If all those requests work you know that TinyOWS works with those
>>>>> basic requests and if OpenLayers application does not get data the
>>>>> reason in probably in the application code.
>>>>>
>>>>>
>>>>> -Jukka Rahkonen-
>>>>>
>>>>> aho wrote:
>>>>>
>>>>> hello!
>>>>> I have a problem with the configuration of tinyows. I have the
>>>>> following
>>>>>
>>>>> settings in my xml file:
>>>>>
>>>>> <tinyows online_resource="localhost/cgi-bin/tinyows.exe"
>>>>>
>>>>>            schema_dir="C:\ms4w\apps\tinyows\schema\">
>>>>> <pg host="localhost" user="postgres" password="postgres"
>>>>> dbname="watergis" port="5432"/>
>>>>> <metadata name="TinyOWS Server"
>>>>>               title="TinyOWS Server - WFS-T Frida Service" />
>>>>> <contact name="TinyOWS Server"
>>>>>              site="http://www.tinyows.org/"
>>>>>              email="tinyows-users at lists.maptools.org" /> <layer
>>>>> retrievable="1"
>>>>>            writable="1"
>>>>>            ns_prefix="water"
>>>>>            ns_uri="http://localhost/"
>>>>>            name="pipeline_segment"
>>>>>            title="pipeline_segment"
>>>>>            table= "pipeline_segment"
>>>>>            srid="32740"
>>>>>            schema="water"/>
>>>>> </tinyows>
>>>>>
>>>>>     >if I enter tinyows --check I get the following back:
>>>>>
>>>>> C:\ms4w\Apache\cgi-bin>tinyows --check
>>>>>
>>>>> TinyOWS version:   1.0.0rc3
>>>>> FCGI support:      Yes
>>>>> Config File Path:  C:\ms4w\apps\tinyows\tinyows.xml (TinyOWS XML)
>>>>> PostGIS Version:   2.0.0
>>>>> PostGIS dsn:       host=localhost user=postgres password=postgres
>>>>> dbname=watergi
>>>>> s port=5432
>>>>> Output Encoding:   UTF-8
>>>>> Database Encoding: UTF8
>>>>> Schema dir:        C:\ms4w\apps\tinyows\schema\
>>>>> Display bbox:      Yes
>>>>> Estimated extent:  No
>>>>> Check schema:      Yes
>>>>> Check valid geoms: Yes
>>>>> Available layers:
>>>>>      - water.pipeline_segment (32740) -> water.pipeline_segment [RW]
>>>>>
>>>>>
>>>>> which looks acutally quite good. But when i am trying to include
>>>>> that
>>>>>
>>>>> into my openlayer map - I always get 0 features back! Here the code
>>>>> for
>>>>> openlayers:
>>>>>
>>>>> wfs = new OpenLayers.Layer.Vector("Editable Features", {
>>>>>             strategies: [new OpenLayers.Strategy.BBOX(), saveStrategy],
>>>>>             projection: new OpenLayers.Projection("EPSG:31467"),
>>>>>             protocol: new OpenLayers.Protocol.WFS({
>>>>>                   version: "1.1.0",
>>>>>                   srsName: "EPSG:32740",
>>>>>                   url:
>>>>> "http://127.0.0.1:8000/redir/cgi-bin/tinyows.exe",
>>>>>                   featureNS :  "tows",
>>>>>                   featureType: "pipeline_segment",
>>>>>                   geometryName: "geometry",
>>>>>                   schema:
>>>>> "http://127.0.0.1:8000/redir/cgi-
>> bin/tinyows.exe?service=wfs&request=DescribeFeatureType&version=1.1.0
>> &typename=water:pipeline_segment"
>>>>>             })
>>>>> });
>>>>>
>>>>> Someone an idea?
>>>>> _______________________________________________
>>>>> mapserver-users mailing list
>>>>> mapserver-users at lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>>>>>
>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> mapserver-users mailing list
>>>>> mapserver-users at lists.osgeo.org
>>>>> http://lists.osgeo.org/mailman/listinfo/mapserver-users
>>>>>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users


-- 
Alexandre Dubé
Mapgears
www.mapgears.com




More information about the MapServer-users mailing list