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

Mapserver, GeoServer, MapGuide, Google и другое ПО для веб-картографии
Ответить
z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 29 апр 2011, 08:56

Появилась непонятная проблема, если подключать 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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 29 апр 2011, 09:36

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

P.S. Советую все-таки использовать firebug при отладке под FF.
Spatial is now, more than ever, just another column- The Geometry Column.

z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 29 апр 2011, 10:15

Спасибо !
Последний раз редактировалось z12 29 апр 2011, 10:25, всего редактировалось 2 раза.

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 29 апр 2011, 10:21

Отпишитесь только потом - решили ли вы проблему.
Spatial is now, more than ever, just another column- The Geometry Column.

z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 29 апр 2011, 10:25

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 29 апр 2011, 10:50

Если хост публичный - скажите, посмотрю, вот еще полезная вещь при отладке.
Spatial is now, more than ever, just another column- The Geometry Column.

z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 29 апр 2011, 11:58

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

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 29 апр 2011, 12:26

У меня никаких ошибок (FF+Chrome). Вот точечного слоя не видно, хотя файл с данными приходит с сервера (textfile.txt) Похоже, что он неверно отформатирован.
Spatial is now, more than ever, just another column- The Geometry Column.

z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 29 апр 2011, 12:43

я его взял из демки, по идее все должно быть нормально
посмотрел по ссылке вроде все нормально, на всякий случай попробовал сделать как там, получается тоже самое

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 01 май 2011, 18:31

Всё оказалось гораздо проще - был перепутан порядок координат (широта с долготой), а так всё работает.
Spatial is now, more than ever, just another column- The Geometry Column.

z12
Новоприбывший
Сообщения: 9
Зарегистрирован: 19 апр 2011, 09:29
Репутация: 0

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

Сообщение z12 » 03 май 2011, 08:45

большое спасибо

с 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 файл из демок, проверял его на валидность и получал кучу ошибок, странно, поидее если он рабочий то и ошибок быть не должно

Vladimir_R
Активный участник
Сообщения: 145
Зарегистрирован: 14 апр 2010, 14:11
Репутация: 44
Откуда: Екатеринбург

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

Сообщение Vladimir_R » 03 май 2011, 23:26

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

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

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

Сообщение Denis Rykov » 04 май 2011, 05:26

z12 писал(а):фиговое форматирование, отсутствие анимации, невозможность закрыть надписи после масштабирования
Не понял о чём это вы, источник данных на это никак не влияет.
z12 писал(а):ксти заметил странность, брал рабочий KML файл из демок, проверял его на валидность и получал кучу ошибок
Приведите пример такого KML, вроде никогда проблем не было.
z12 писал(а):ошибок не выдает просто тупо нет точки и все
Похоже, что ваш KML битый, вы его как получили?
Spatial is now, more than ever, just another column- The Geometry Column.

Ответить

Вернуться в «Веб-картография»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость