1 votos

Error XMLHttpRequest no puede cargar openlayers geocode?

Voy a hacer una página para ver las rutas con openlayers, postgresql / postgis y pgrouting. La parte del asiento ya está bien, estoy usando los datos de OSM. La imagen de abajo es para ilustrar lo que estoy haciendo ahora: una página donde el usuario introduce el origen y el destino y voy a hacer la geocodificación estas direcciones para jugar las coordenadas en mi sql para obetr la ruta.

Geocode

Y se está produciendo el siguiente error, he visto varios post sobre el tema pero no me queda claro como puedo solucionarlo.

XMLHttpRequest cannot load http://www.openrouteservice.org/php/OpenLSLUS_Geocode.php. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. /C:/Desenv/FitTaxi/FitTaxi/index.html:1
Uncaught TypeError: Cannot read property 'documentElement' of null

Mi código javascript:

    <script type='text/javascript'>

    var map;

    function init() {

     map = new OpenLayers.Map('map_element',{
      maxExtent: new OpenLayers.Bounds(
      -128 * 156543.0339,
      -128 * 156543.0339,
       128 * 156543.0339,
       128 * 156543.0339),
      maxResolution: 156543.0339,
      units: 'm',
      projection: new OpenLayers.Projection('EPSG:900913'),
      displayProjection: new OpenLayers.Projection("EPSG:4326"),
    });

   var osm_layer = new OpenLayers.Layer.OSM(
    'OpenStreetMap Layer'
    );

    map.addLayers([osm_layer]);

    var point = new OpenLayers.LonLat(-51.22,-30.08); 
    point.transform(new OpenLayers.Projection("EPSG:4326"), 
    map.getProjectionObject()); 
    map.setCenter(point, 12); 

    map.addControl(new OpenLayers.Control.LayerSwitcher({}));

   if(!map.getCenter()){
     map.zoomToMaxExtent();
    }
  }

   function submitForm() {
        var queryString = document.getElementById('origem').value;
        OpenLayers.Request.POST({
            url: "http://www.openrouteservice.org/php/OpenLSLUS_Geocode.php",
            scope: this,
            failure: this.requestFailure,
            success: this.requestSuccess,
            headers: {"Content-Type": "application/x-www-form-urlencoded"},
            data: "FreeFormAdress=" + encodeURIComponent(queryString) + "&MaxResponse=1"
        });
    }
    function requestSuccess(response) {
        var format = new OpenLayers.Format.XLS();
        var output = format.read(response.responseXML);
        if (output.responseLists[0]) {
            var geometry = output.responseLists[0].features[0].geometry;
            var foundPosition = new OpenLayers.LonLat(geometry.x, geometry.y).transform(
                    new OpenLayers.Projection("EPSG:4326"),
                    map.getProjectionObject()
                    );
            map.setCenter(foundPosition, 16);
        } else {
            alert("Sorry, no address found");
        }
    }
    function requestFailure(response) {
        alert("An error occurred while communicating with the OpenLS service. Please try again.");
    }

  </script>

Código HTML:

Llama al mapa...

  <body  onload='init();'>

  <div class="form-group">

      <label for="inputOrigem" class="col-sm-2 control-label">Origem</label>
      <input type="text" id="origem" class="form-control" placeholder="Origem">
      <label for="inputDestino" class="col-sm-2 control-label">Destino:</label>
      <input type="text" id="destino" class="form-control" placeholder="Destino">

      <hr />
      <button type="submit" value="submit" onclick="submitForm();" class="btn btn-default">Pesquisar</button>

   </div>

  </body>

3voto

Athena Puntos 2149

Se trata de un problema de dominio cruzado, ya que está llamando a un dominio diferente en su XMLHttpRequest del que se utiliza para los datos.

Utilizo un simple Proxy en nuestro servidor para el XMLHttpRequest de OpenLayers y el Proxy, a su vez, reenvía la petición a su verdadero destino.

Se puede ver un ejemplo de cómo hacer su propio Proxy aquí

Esto también se discute aquí

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X