[OpenLayers-Users] Questions on using Protocol.HTTP and custom XML to load/edit features

Stephen Woodbridge woodbri at swoodbridge.com
Fri Mar 12 00:37:46 EST 2010


Stephen Woodbridge wrote:
> Eric Lemoine wrote:
>> On Monday, March 8, 2010, Stephen Woodbridge <woodbri at swoodbridge.com> wrote:
>>> OK, to partially answer some of my own questions ... inline below.
>>>
>>> Stephen Woodbridge wrote:
>>>> Hi all,
>>>>
>>>> I am trying to implement a vector layer that will allow editing point
>>>> data. The data is accessed via a PHP script that serves some arbitrary
>>>> XML. The layer looks like this so far:
>>>>
>>>>              vector = new OpenLayers.Layer.Vector("POI", {
>>>>                  maxResolution: 360.0/16777216/2, // zoom 15
>>>>                  styleMap: styleMap,
>>>>                  protocol: new OpenLayers.Protocol.HTTP({
>>>>                      url: "poi-server.php",
>>>>                      params: {
>>>>                          m: 'r',
>>>>                          srs: 'EPSG:4326'
>>>>                      },
>>>>                      format: new OpenLayers.Format.XML()
>>>>                  }),
>>>>                  strategies: [
>>>>                      new OpenLayers.Strategy.BBOX({ratio: 1}),
>>>>                      new OpenLayers.Strategy.Save({
>>>>                          auto: true//,
>>>>                          //save: function() { alert("Save called."); }
>>>>                      }),
>>>>                  ]
>>>>              });
>>>>
>>>> This seems like it almost works. But has the following problems, so
>>>> maybe I'm just taking the wrong approach all together. Here is a live
>>>> example:
>>>>
>>>> http://imaptools.com:8080/tilecache/test.html?zoom=17&lat=33.89595&lon=35.49935&layers=BT
>>>>
>>>> Issue:
>>>>
>>>> 1) the feature request does not seem to load on page load, but fires if
>>>> you pan the map slightly
>>>>
>>>> 2) when the features load, I get an error on line 128 of
>>>> OpenLayers/Format/XML.js because test.indexOf() is not a method. This is
>>>> because text is type Document not string?
>>> This appears to be because I need to write my own class like
>>> OpenLayers.Format.MyXML that parses the XML document the PHP returns and
>>>   returns an array of features. Working on writing this.
>>>
>>>> 3) I assume the the XML parser will parse the response into an
>>>> appropriate tree object, then I need to add some code that reads the
>>>> tree and constructs feature objects that I then add to the layer. So is
>>>> the problem above because the text object passed to read IS my tree and
>>>> I need to pass a my own read() function to some code to do that? Where
>>>> do I do that?
>>> See 2) above.
>>>
>>>> 4) If I add a point using the toolbar add point button, I get
>>>>
>>>> Security error"  code: "1000
>>>> http://imaptools.com:8080/ol28/lib/OpenLayers/Format/XML.js
>>>> Line 198
>>>>
>>>> data = serializer.serializeToString(node);
>>>>
>>>> What is this error and why am I getting it? I assumed that a default
>>>> serializer exists, I probably need to add my own it write the expected
>>>> XML the the PHP needs. Where would I add this and what are the exected
>>>> inputs and outputs?
>>> I'm hoping this is probably related to the above. will report back after
>>> I get my XML parser working.
>>>
>>>> 5) I eventually need to issue the Ajax requests by sending XML documents
>>>> to the server instead of issuing GET requests. So to do this I assume I
>>>> need to a) write code to serialize some params into a document, then b)
>>>> get HTTP protocol to send the document. How do I do this? The PHP code
>>>> is only temporary for testing and developing in my environment.
>>>>
>>>> I learned a lot today, just by reading lots of OL code but I still have
>>>> a ways to go.
>>>>
>>>> I would appreciate and help and guidance.
>>> Any thoughts on 1) or 5)? Just a pointer would be helpful :)
>> Hi Steve.
>>
>> For 1) what version of OL are you using? I thought this issue was
>> fixed a while back. A test case demonstrating the problem would be
>> useful.
> 
> Hi Eric,
> 
> I'm using OpenLayers 2.8. Did you have a chance to verify when this was 
> fixed? Do I need to write a bug for this? I looked through the open bugs 
> but did not see anything that fit this issue.

I just found a simple work around to this problem. At the end of my 
init() I added:

             // work around a bug loading features
             vector.setVisibility(false);
             vector.setVisibility(true);

Which seems to force the loading of the features on the vector layer.
Annoying, but a simple fix.

I also checked this on trunk and I get the same behavior. It is also 
possible that I have done something stupid in my layer definition that 
might be causing this, but if I did its not obvious to me as I have 
looked over my code a few times.

-Steve

> Thanks,
>    -Steve
> 
> 
>> For 5) the HTTP protocol has a readWithPost option that allows sending
>> read requests with POST instead of GET. But I don't think it'll work
>> in your case because you it will post encoded params, and you won't be
>> able to provide it with your XML document. So I think you need to
>> implement your own protocol, possibly by extending/overriding
>> Protocol.HTTP.
>>
>> Cheers,
>>
> 
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users




More information about the Users mailing list