Страница 1 из 1

Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 08:56
z12
Появилась непонятная проблема, если подключать KML или POI с других сайтов все пучком, если со своего появляется ошибка (в IE, в Firefox-е ошибок нет, там просто не работает =)) :

Сообщение: Недопустимый аргумент.
Строка: 1176
Символ: 1
Код: 0
URI-код: file:///D:/testmaps/OpenLayers.js

Проверял сам файл KML и POI на доступность качаются, те ссылки не битые.

Сама страница

Код: Выделить всё

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml>"
<head>
<title>VNovgorod</title>
<meta http-equiv='imagetoolbar' content='no'/>
<style type="text/css">
 v\:* {behavior:url(#default#VML);}
 html, body { overflow: hidden; padding: 0; height: 100%; width: 100%; font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif; }
 body { margin: 10px; background: #fff; }
 h1 { margin: 0; padding: 6px; border:0; font-size: 20pt; }
 #header { height: 43px; padding: 0; background-color: #eee; border: 1px solid #888; }
 #subheader { height: 12px; text-align: right; font-size: 10px; color: #555;}
 #map { height: 95%; border: 1px solid #888; }
</style>

<script src="OpenLayers.js" type="text/javascript"></script>
<script type="text/javascript">
              var map, select;
              var mapBounds = new OpenLayers.Bounds( 31.2159529888, 58.4536484488, 31.3524874634, 58.6543265514);
             
              function init(){
                 var options = {
                      controls: [new OpenLayers.Control.PanZoomBar(),
                                 new OpenLayers.Control.MousePosition(),
                                 new OpenLayers.Control.MouseDefaults(),
                                 new OpenLayers.Control.KeyboardDefaults()],
                      maxExtent: new OpenLayers.Bounds( 31.2159529888, 58.4536484488, 31.3524874634, 58.6543265514 ),
                      maxResolution: 0.000810,
                      numZoomLevels: 7
                      };
                 map = new OpenLayers.Map('map', options);
                 var layer = new OpenLayers.Layer.TMS( "TMS Layer","", {url:'', serviceVersion:'.', layername:'.', alpha:true, type:'png', getURL:overlay_getTileURL });
                 map.addLayer(layer);
                 
                 var layerPOI = new OpenLayers.Layer.Vector("POIs", {
                    strategies : [new OpenLayers.Strategy.BBOX({resFactor: 1.1})],
                    protocol   : new OpenLayers.Protocol.HTTP({
                        url    : "textfile.txt",
                        format : new OpenLayers.Format.Text()
                    })
                 });
                 map.addLayer(layerPOI);
                 selectControl = new OpenLayers.Control.SelectFeature(layerPOI);
                 map.addControl(selectControl);
                 selectControl.activate();
                 layerPOI.events.on({
                    'featureselected'   : onFeatureSelect,
                    'featureunselected' : onFeatureUnselect
                 });//*/
                 
                 map.zoomToExtent( mapBounds );
              }
              
              function onPopupClose(evt) {
                 // 'this' is the popup.
                 selectControl.unselect(this.feature);
              }
              function onFeatureSelect(evt) {
                 feature = evt.feature;
                 popup = new OpenLayers.Popup.FramedCloud("featurePopup",
                                          feature.geometry.getBounds().getCenterLonLat(),
                                          new OpenLayers.Size(100,100),
                                          "<h2>"+feature.attributes.title + "</h2>" +
                                          feature.attributes.description,
                                          null, true, onPopupClose);
                 feature.popup = popup;
                 popup.feature = feature;
                 map.addPopup(popup);
              }
              function onFeatureUnselect(evt) {
                 feature = evt.feature;
                 if (feature.popup) {
                     popup.feature = null;
                     map.removePopup(feature.popup);
                     feature.popup.destroy();
                     feature.popup = null;
                 }
              }
            
              function overlay_getTileURL(bounds) {
                  var res = this.map.getResolution();
                  var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
                  var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
                  var z = this.map.getZoom();
                  if (x >= 0 && y >= 0) {
                     return this.url + z + "/" + x + "/" + y + "." + this.type;            
                  } else {
                      return "none.png";
                  }
              }
</script>

</head>
<body onload="init()">
   <div id="map" class="smallmap"></div>
   </body>
</html>
Файл POI

Код: Выделить всё

point	title	description	icon
31.26640,58.50640	my orange title	my orange description	http://www.openlayers.org/api/img/zoom-world-mini.png

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 09:36
Denis Rykov
Вы используете протокол OpenLayers.Protocol.HTTP, поэтому файл нужно отдавать через web-сервер. Если вы пытаетесь передать файл по ссылке вида file:/// - работать не будет, этим в частности объясняется то, что с внешних адресов "все пучком", либо поднимите web-сервер, либо используйте другой способ подключения слоя.

P.S. Советую все-таки использовать firebug при отладке под FF.

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 10:15
z12
Спасибо !

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 10:21
Denis Rykov
Отпишитесь только потом - решили ли вы проблему.

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 10:25
z12
Теперь говорит :
Сообщение: Неопределенная ошибка.
Строка: 1188
Символ: 1
Код: 0
URI-код: OpenLayers.js

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 10:50
Denis Rykov
Если хост публичный - скажите, посмотрю, вот еще полезная вещь при отладке.

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 11:58
z12
http://www.vnagp.ru/Maps/Vnovgorod.aspx
там весь скрипт для работы с картой вынесен в OpenLayersInit.js

ещё странность, после MapTiler-а масштаб странно себя ведет, если продолжать курить колесо мышки при максимальном зуме карта начинает съежать

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 12:26
Denis Rykov
У меня никаких ошибок (FF+Chrome). Вот точечного слоя не видно, хотя файл с данными приходит с сервера (textfile.txt) Похоже, что он неверно отформатирован.

Re: Недопустимый аргумент в OpenLayer

Добавлено: 29 апр 2011, 12:43
z12
я его взял из демки, по идее все должно быть нормально
посмотрел по ссылке вроде все нормально, на всякий случай попробовал сделать как там, получается тоже самое

Re: Недопустимый аргумент в OpenLayer

Добавлено: 01 май 2011, 18:31
Denis Rykov
Всё оказалось гораздо проще - был перепутан порядок координат (широта с долготой), а так всё работает.

Re: Недопустимый аргумент в OpenLayer

Добавлено: 03 май 2011, 08:45
z12
большое спасибо

с POI все решилось, но тут же заметил косяки, фиговое форматирование, отсутствие анимации, невозможность закрыть надписи после масштабирования. решил перейти на KML и опять же не работают =(, уже проверил координаты все нормально но точки нет. ошибок не выдает просто тупо нет точки и все...

вот код скрипта

Код: Выделить всё

var map, select;
var mapBounds = new OpenLayers.Bounds( 31.2159529888, 58.4536484488, 31.3524874634, 58.6543265514);

function init(){
   var options = {
        controls: [new OpenLayers.Control.PanZoomBar(),
                   new OpenLayers.Control.MousePosition(),
                   new OpenLayers.Control.MouseDefaults(),
                   new OpenLayers.Control.KeyboardDefaults()],
        maxExtent: new OpenLayers.Bounds( 31.2159529888, 58.4536484488, 31.3524874634, 58.6543265514 ),
        maxResolution: 0.000810,
        numZoomLevels: 7
        };
   map = new OpenLayers.Map('map', options);
   var layer = new OpenLayers.Layer.TMS( "TMS Layer","", {url:'http://www.vnagp.ru/Maps/', serviceVersion:'.', layername:'.', alpha:true, type:'png', getURL:overlay_getTileURL });
   map.addLayer(layer);
   var sundials = new OpenLayers.Layer.Vector("KML", {
      projection: map.displayProjection,
      strategies: [new OpenLayers.Strategy.Fixed()],
      protocol  : new OpenLayers.Protocol.HTTP({
         url   : "doc.kml",
         format: new OpenLayers.Format.KML({
            extractStyles: true,
            extractAttributes: true
         })
      })
   });
   map.addLayer(sundials);//*/
   selectControl = new OpenLayers.Control.SelectFeature(sundials);
   sundials.events.on({
      'featureselected'   : onFeatureSelect,
      'featureunselected' : onFeatureUnselect
   });
   map.addControl(selectControl);
   selectControl.activate();
   map.zoomToExtent( mapBounds );
}

function onPopupClose(evt) {
   select.unselectAll();
}
function onFeatureSelect(evt) {
   var feature = event.feature;
   var selectedFeature = feature;
   var popup = new OpenLayers.Popup.FramedCloud("chicken", 
      feature.geometry.getBounds().getCenterLonLat(),
      new OpenLayers.Size(100,100),
      "<h2>"+feature.attributes.name + "</h2>" + feature.attributes.description,
      null, true, onPopupClose
   );
   feature.popup = popup;
   map.addPopup(popup);
}
function onFeatureUnselect(evt) {
   var feature = event.feature;
   if(feature.popup) {
       map.removePopup(feature.popup);
       feature.popup.destroy();
       delete feature.popup;
   }
}
            
function overlay_getTileURL(bounds) {
    var res = this.map.getResolution();
    var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
    var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
    var z = this.map.getZoom();
    if (x >= 0 && y >= 0) {
       return this.url + z + "/" + x + "/" + y + "." + this.type;            
    } else {
        return "none.png";
    }
}
KML файл

Код: Выделить всё

<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
  <Document>
    <name>VNovgorod</name>
    <description></description>
    <Style>
      <ListStyle id="hideChildren">
        <listItemType>checkHideChildren</listItemType>
      </ListStyle>
    </Style>

    <LookAt>
      <longitude>31.28422022611265</longitude>
      <latitude>58.55398750010539</latitude>
      <altitude>0</altitude>
      <range>28839</range>
      <tilt>0</tilt>
      <heading>0</heading>
    </LookAt>
    <NetworkLink>
      <name>0/0/0.png</name>
      <Region>
        <Lod>
          <minLodPixels>128</minLodPixels>
          <maxLodPixels>-1</maxLodPixels>
        </Lod>
        <LatLonAltBox>
          <north>58.66089143862394</north>
          <south>58.45364844877742</south>
          <east>31.42319597864217</east>
          <west>31.21595298879565</west>
        </LatLonAltBox>
      </Region>
      <Link>
        <href>0/0/0.kml</href>
        <viewRefreshMode>onRegion</viewRefreshMode>
      </Link>
    </NetworkLink>
  </Document>
</kml>
ксти заметил странность, брал рабочий KML файл из демок, проверял его на валидность и получал кучу ошибок, странно, поидее если он рабочий то и ошибок быть не должно

Re: Недопустимый аргумент в OpenLayer

Добавлено: 03 май 2011, 23:26
Vladimir_R
Возможно проблема в файле, на который вы ссылаетесь "<href>0/0/0.kml</href>".

Re: Недопустимый аргумент в OpenLayer

Добавлено: 04 май 2011, 05:26
Denis Rykov
z12 писал(а):фиговое форматирование, отсутствие анимации, невозможность закрыть надписи после масштабирования
Не понял о чём это вы, источник данных на это никак не влияет.
z12 писал(а):ксти заметил странность, брал рабочий KML файл из демок, проверял его на валидность и получал кучу ошибок
Приведите пример такого KML, вроде никогда проблем не было.
z12 писал(а):ошибок не выдает просто тупо нет точки и все
Похоже, что ваш KML битый, вы его как получили?