Hi Alexandre,

I assume your service create a file on the server side. That's probably not what you want unless you need to store your CSV for later reuse. Your PHP script should output the CSV data instead of writing it to disk: - either you keep your existing script and eventually output the file with the PHP readfile() function (or equivalent) - or you can simply print your data to standard output with basic echo statements.

In both case you may consider using the header function to specify the correct mime-type of the output (e.g. header("Content-type: text/plain"); or something like that).

Hope it helps,
Gilles

Alexandre Dube wrote:
Hi Eric,

My service only creates a file. When I try to read response.responseText, it's empty. I could just read the file on the file system but it seems to me that it's the wrong way of doing it. I would prefer the standard way of returning the content. Can you give me a hint on how to do it ?

    Many thanks,

Alexandre

Eric Lemoine wrote:
Hi. What do you mean when you say your php service does return
anything and just create a file? Do you mean your service just creates
a file on the file system? Really it should send the text in the
response, so that you can most probably replace OpenLayers.Format.GML
with OpenLayers.Format.Text and i'll just work. I'm hoping i've
understood your question correctly. Eric

2008/8/15, Alexandre Dube <[EMAIL PROTECTED]>:
Hi all,

    In my application, I dynamically build a <select> element with
cities as options using a GetFeature request and reading from GML format
to generate it.

    It works perfectly but is kinda slow because of the size of the GML
format.  A dev and friend of mine suggested that I should generate my
own text file using phpMapScript.  It was quite easy to do and works
perfectly.  It generates a file which uses the same format as the
OpenLayers.Format.Text ( tab separated values, coordinates and title as
city name ).

    Now I want to replace the GML format by Text format but don't really
understand how this must be done.

    I tried this :
        OpenLayers.loadURL("/bdga/csvCityBuilder.php", '', this, setCities);
    and the file is created...  but my php file is not a standard
request.  It doesn't return anything, it only creates a file.

    I could load the generated file with standard javascript function,
but I was wondering if there is already something in OpenLayers I could
use, like the following ( which obviously isn't working ).  Maybe I'm
missing something.
        oText = new OpenLayers.Format.Text();
        oFeatures = oText.read(response.responseText);

    Bellow is the GML version of it which works fine.  Any help would be
appreciated.

// a GetFeature on layer BDGA_HABIT_P_POINT to get all cities and their
// coordinates.  See setCites function for more info.
sUrl = sMSURL;
sUrl += "?map=";
sUrl += sBDGAMapPath;
sUrl += "&service=WFS&version=1.0.0&request=GetFeature";
sUrl += "&TYPENAME=BDGA_HABIT_P_POINT";
OpenLayers.loadURL(sUrl, '', this, setCities);

// add one option per city to a select html element with value equal to
// the city coordinates ( longitude, latitude )
function setCities(response) {
    oGML =  new OpenLayers.Format.GML();
    oFeatures = oGML.read(response.responseText);

    var aCities = new Array();

    // put the results in an array first to be able to sort it
    for (var key in oFeatures){
        var szValue = "";
        szValue += oFeatures[key].geometry.x;
        szValue += ",";
        szValue += oFeatures[key].geometry.y

        aCities[key] = {
          cityName: oFeatures[key].attributes['HAP_NM_TOP'],
          lonlat: szValue
        };
    }

    // sort the array by city name
    aCities.sort(sortByCityName);

    // create on option per city and add it to the select element
    var oSelect=document.getElementById("zoomToCity");
    for (i=0; i<aCities.length; i++){
        var oOption = document.createElement('option');
        oOption.text=aCities[i]['cityName'];
        oOption.value=aCities[i]['lonlat'];
        try
        {
            oSelect.add(oOption,null); // standards compliant
        }
        catch(ex)
        {
            oSelect.add(oOption); // IE only
        }
    }

    // The list has finished to be created, so enable it and remove the
first
    // option that contained the "please wait" msg
    oSelect.disabled = "";
    oSelect.remove(0);
}

// returns the aCities array sorted by cityName
function sortByCityName(a, b) {
    var x = a.cityName.toLowerCase();
    var y = b.cityName.toLowerCase();
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}


--
Alexandre Dubé
Mapgears
www.mapgears.com

_______________________________________________
Users mailing list
[email protected]
http://openlayers.org/mailman/listinfo/users




--
Gilles Bassiere
MAKINA CORPUS
30 rue des Jeuneurs
FR-75002 PARIS
+33 (0) 1 44 82 00 80
http://www.makina-corpus.com

begin:vcard
fn;quoted-printable:Gilles Bassi=C3=A8re
n;quoted-printable:Bassi=C3=A8re;Gilles
org:Makina Corpus;GIS
adr;quoted-printable:;;30 rue des Je=C3=BBneurs;Paris;;FR-75011;France
email;internet:[EMAIL PROTECTED]
title:Web GIS developper
tel;work:+33 (0) 1 44 82 00 80
x-mozilla-html:FALSE
url:http://www.makina-corpus.com
version:2.1
end:vcard

_______________________________________________
Users mailing list
[email protected]
http://openlayers.org/mailman/listinfo/users

Reply via email to