Webkaartje met Fietstags

Ligfietser:
in noordpass staat ‘layer.events.register(“featuresadded”, layer, make_features_added_closure());’
Verander ‘featuresadded’ in ‘loadend’. De statusmelding verdwijnt dan ook als er op een laag niks te zien is ( dus ook geen ‘featuresadded’ getriggerd wordt). Dat was nog een stukje uit de originele overpass code.
De site is verplaatst. De laadtekst is veranderd in een gif als indicatie.
Voor het IE probleem is de enige oplossing een proxy te gebruiken. Probeer eens uit te vinden wat je op mijndev wel en niet mag ( cgi scripts draaien, php of python )

Is een mooie toevoeging. Dat valt meer op zo.

Eigenlijk zou je twee verschillende indicaties moeten hebben. Het proces bestaat uit twee onderdelen laden en schrijven. De einde schrijf/teken indicatie is er niet.
Ik heb wel eens van hij is klaar met laden waarom zie ik het nog niet. Je hebt dan de neiging om te gaan schuiven, zoomen in uit.
Soms is er gewoon niks of hij is nog met tekenvoorbereiding bezig.

@Peewee, de verharde wegen hebben nu een ander kleurtje, de vertaalde wiki ziet er goed uit.
@Noordfiets, bedankt, het ladende gifje toegevoegd. Misschien weet Lambertus wel hoe je die site onder IE aan de praat kan krijgen, zal het eens informeren.

Aangepast. Het kan zijn dat tijdens het tekenen het gifje niet beweegt omdat de processor het te druk heeft …

Hmm, werkt niet zoals ik gedacht had. Laat het eerst even.

Dank, en dank. Jij nog bedankt voor het uitzoeken hoe je zo’n engelse variant van de wiki kunt maken. Scheelt met weer tijd. Ik zal eens een stukje proza dichten voor het development forum zodat anderen ook kunnen profiteren van dit kaartje.

Toch wel leuk die afgeleide initiatieven in dit draadje ook al gaat het me technisch wat te ver op dit moment (zou daar weer eens in moeten duiken dat geprogammeer, 35 jaar niet meer gedaan).
Dankzij deze link zie ik dat fietsroutes in mijn omgeving incompleet zijn. Inmiddels Neerijnenroute weer compleet en Stercke Dijkenroute is nu aan de beurt.
Leuke is altijd dat je na een kwartiertje of half uur op Lonvia of op de de verwijzing van Noordfiets gelijk je aanpassing ziet.
Gr.
Kees

Misschien als tijdelijke oplossing een waarschuwing vooraf aan IE gebruikers?
Probeer maar uit op http://mijndev.openstreetmap.nl/~ligfietser/fiets/test/

<p class="accent">
<!--[if IE]>
<script>
{
alert("Internet Explorer might not work, please use another browser!");
}
</script>
<![endif]-->
</p>

Of dat IE gebruikers automatisch geredirect worden naar Noordfiets’ server?
Als ik naar de browser stats kijk zijn dat er 7 vandaag (8% van de bezoekers).

Ook een optie, maar dan met <!–[if lt IE 10]>
Want IE10 ondersteunt CORS op de standaard manier en werkt wel.

Mooi initiatief jong’s. Helaas poepie druk op het werk en dus staan vrijwel alle OSM activiteiten tijdelijk in de ijskast, maar ik hoop even snel een bijdrage te kunnen leveren.

IE lijkt dus te bokken op een cross site call, de standaard oplossing hiervoor is een proxy, de mooiste oplossing een javascript/html truuk die in bijvoorbeeld tools als jQuery zit, maar met de standaard oplossing heb ik wat ervaring:
Alle AJAX aanvragen van de browser die naar een pagina buiten de mijndev site gaan moeten via een proxy op de mijndev site gestuurd worden. Zo’n proxy is een simpel (PHP) script dat de request parameters doorstuurt naar de eigenlijke pagina, het antwoord inleest en teruggeeft aan de browser. Het is een omweg maar het werk. Zoek je op ‘cross site’ en ‘proxy’ dan kom je hier genoeg voorbeelden van tegen maar met onderstaand script van phpfour.com heb ik goede ervaringen.

<?php

/**
 * Transport for Cross-domain AJAX calls
 *
 * This is an implementation of a transport channel for utilizing cross-domain
 * AJAX calls. This script is passed the data through AJAX along with two special
 * hidden field containing the action URL and the http method (GET/POST). It then  
 * sends the form fields to that URL and returns the response.
 *
 * @package		CrossDomainAjax
 * @category	CURL
 * @author		Md Emran Hasan <phpfour@gmail.com>
 * @author		Lambertus IJsseltein: security fix (allowed domains), flexible headers
 * @link		http://www.phpfour.com
 */

// The domains we're allowed to contact
$allowedDomains = array('http://gazetteer.openstreetmap.org/', 
					'http://nominatim.openstreetmap.org/', 
					'http://dev.openstreetmap.nl/', 
					'http://www.yournavigation.org/',
					'http://yournavigation.org/',
					'http://planetosm.oxilion.nl/',
					'http://osm.pleiades.uni-wuppertal.de/');

// The actual form action
$action = $_REQUEST['url'];

// Submission method
$method = $_REQUEST['method'];

// Query string
$fields = '';

// Check the url for allowed domains
$fail = true;
foreach ($allowedDomains as $domain)
{
    if (strpos(substr($action, 0, strlen($domain)), $domain) !== false)
    {
        $fail = false;
	break;
    }
}

if ($fail == true)
{
    exit("Domain name '".$action."' not allowed. Access denied.");
}

// Prepare the fields for query string, don't include the action URL OR method
if (count($_REQUEST) > 2)
{
    foreach ($_REQUEST as $key => $value)
    {
        if ($key != 'url' && $key != 'method')
        {
            $fields .= $key . '=' . rawurlencode($value) . '&';
        }
    }
}

// Strip the last comma
$fields = substr($fields, 0, strlen($fields) - 1);

// Initiate cURL
$ch = curl_init();

// Do we need to POST of GET ?
if (strtoupper($method) == 'POST')
{   
    curl_setopt($ch, CURLOPT_URL, $action);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
}
else
{
    curl_setopt($ch, CURLOPT_URL, $action . '?' . $fields);   
}

// Follow redirects and return the transfer
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, "transport.php (CURL)");
 
// Get result and close cURL
$result = curl_exec($ch);
$curl_info = curl_getinfo($ch);
curl_close($ch);

// Return the response
header("Content-type: ".$curl_info['content_type']);
echo $result;

?>

Plaats het bovenstaande script in http://mijndev.openstreetmap.nl/~ligfietser/fiets/ en vervang de allowedDomains array met de sites die je moet kunnen benaderen. Deze methode van whitelisting is noodzakelijk omdat je site anders misbruikt kan worden voor allerlei illegale activiteiten.

Vervolgens plaats je in de JavaScript de AJAX call de url van dit proxy-script voor de externe url die je nu aanroept. Bijvoorbeeld:

OpenLayers.Request.GET({
			url: "proxy.php?url=http://overpass-api.de/api/interpreter/",
			callback: onLoadMenu}
			);

Het interessante stukje hierin is: “proxy.php?url=”. Hiermee veranderd de externe AJAX call naar een locale AJAX call en dan mag het wel van IE. Ik hoop dat jullie hier wat aan hebben.

Daar ging het dus mis. Het lijkt erop dat php niet op mijndev draait. Of curl niet is toegevoegd. Of dat het gewoon niet geactiveerd is voor Ligfietsers’ account.
De proxy op mijn server draait prima voor tests, maar dat is niet echt een productieserver te noemen.
Alternatief is het ombouwen van openlayers om >=7 IE < 10 met de alternatieve IE call te ondersteunen maar overpass lijkt dan niet de juiste header terug te geven. Vanf IE10 is CORS volgens de standaard ondersteund en dan gaat het gewoon goed.

Wat ligfietser dus nodig heeft is iemand met meer kennis van mijndev: wel of niet php / curl ?

Noordfiets, ik heb jouw checkurl.php ook op de Duitse server gezet waar Lambertus ook zijn kaarten heeft gehost: http://osm.pleiades.uni-wuppertal.de/openfietsmap/fietsoverlay/api/interpreter/checkurl.php
Deze geeft itt mijndev wel antwoord: cURL is NOT installed

Ok, zet even een php bestandje met onderstaande code op de server om te bepalen of PHP en of CURL wel geinstalleerd is en roep het bestandje aan in je browser:

<?php
phpinfo();
?>

Ik vermoed dat php-libcurl niet geinstalleerd is.

Edit 1: ligfietser is me voor.

Edit 2: ik heb de beheerder van mijndev (Sander Hoentjen van Oxilion) een mailtje gestuurd.

Lambertus:
(files removed)

Ligfietser, haal die testbestandjes maar weer weg, ze geven belangrijke security info over de server.

Wat me opvalt is dat zowel php als curl geinstalleerd zijn op mijndev. FF nadenken…

Oops, sorry Lambertus, heb ze weer verwijderd.
Hoop dat je er chocola van kan maken. In ieder geval reuze bedankt voor het meedenken.

Het zou al wat kunnen helpen als je een test-url met de proxy.php kunt posten en de volgende regels bovenaan in het proxy script zet:

<?php
ini_set('display_errors',1); 
error_reporting(E_ALL);

[...]

?>

http://mijndev.openstreetmap.nl/~ligfietser/fiets/api/interpreter/test.php

Ja, nu geeft die antwoord: cURL is installed

Welke URL heeft het proxy script gekregen? Ik wil graag de reactie zien van bijvoorbeeld:

http://mijndev.openstreetmap.nl/~ligfietser/fiets/api/interpreter/proxy.php?url=http://overpass-api.de/api/interpreter/

Ik heb nu Noordfiets’ proxy gekopieerd:
http://mijndev.openstreetmap.nl/~ligfietser/fiets/api/interpreter/index.php

En ook zijn site, http://mijndev.openstreetmap.nl/~ligfietser/fiets/noordfiets
Maar zijn QURL naar http://mijndev.openstreetmap.nl/~ligfietser/fiets/api/interpreter/ werkt nog niet.

		var proxy = true;
		
		if (proxy){
			var QURL = "http://mijndev.openstreetmap.nl/~ligfietser/fiets/api/interpreter/";
		}
		else{
			var QURL = "http://overpass-api.de/api/interpreter/"; //default
		}
		

Doet ook niets in andere browsers dus er is iets nog niet goed.

index.php:

<?
ini_set('display_errors',1); 
error_reporting(E_ALL);
// basis url
$overpass_url = "http://overpass-api.de/api/interpreter?data=";

$data = $_GET["data"]; // de string met de query
$bbox = $_GET["bbox"]; // is de bounding box die (bbox) in bovenstaande string  vervangt
$data = str_replace( "\\" , "" , $data); // als magic quotes aanstaat dubbele slash verwijderen, en anders niet van invloed
$data = urlencode($data); // vorm geven voor correcte request
$bbox = urlencode($bbox);
$request = $overpass_url.$data."&bbox=".$bbox;

$proxy = curl_init($request);
curl_setopt($proxy, CURLOPT_RETURNTRANSFER, 1);
header('Content-type: application/osm3s+xml');	// dit zet speciale header voor osm-xml
$response = curl_exec($proxy); // stuur de query naar overpass
print $response; // en het resultaat naar de client
curl_close($proxy);	
?>