Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2013-10-11

Add to map ArcGIS tiled mapservice with different spatialreference

October. This is one of the peculiarly dangerous months to
speculate in stocks in. The others are July, January,
September, April, November, May, March, June, December,
August, and February.
Pudd'nhead Wilson's Calendar

По всему Интернету не найти рецепта, рассказывающего: как добавить к карте со spatialReference.wkid = 102100 тайловый слой с другим spatialreference. Отличающимся. Формально, это невозможно. Документация ArcGIS говорит о том, что tiled layers перепроецировать (при добавлении к карте) невозможно. Нужно такой слой добавлять поверх подложки, имеющей совпадающий spatialreference.

Да и ладно бы. Но самый главный Есраевский вьювер
умудряется справится с такой непростой и даже невозможной задачей.
На эту карту вполне можно добавить слой
у которого spatialreference.wkid = 28407.
Как? Как они это делают?

Эти шельмы — разработчики Самого Главного Вьювера — обманывают API, используя конструктор (и «драйвер») слоя типа ArcGISDynamicMapServiceLayer вместо ArcGISTiledMapServiceLayer!

Вот, смотрите рабочий код функции добавления слоя в карту по URL. Javascript API ArcGIS:
//~ dynamiclayer // http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Petroleum/KSPetro/MapServer
//~ featurelayer // http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/MapServer/0
//~ tiledMap     // http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer
addAGSLayer: function(layerURL) {
    var req = esri.request({
        url: layerURL,
        content:{"f": "json"},
        callbackParamName:"callback"
    });
    req.then(
        dojo.hitch(this, function(lyrmeta) {
            var tiledMap = lyrmeta.singleFusedMapCache || false;
            var haveLayers = lyrmeta.layers || false;
            if(haveLayers) haveLayers = true;
            var lyr = null;
            if(tiledMap) {
                if(lyrmeta.spatialReference.wkid == map.spatialReference.wkid) {
                    lyr = new esri.layers.ArcGISTiledMapServiceLayer(layerURL, {id: layerURL} );
                } else {
                    lyr = new esri.layers.ArcGISDynamicMapServiceLayer(layerURL, {id: layerURL});
                }
            } else {
                if(haveLayers) {
                    lyr = new esri.layers.ArcGISDynamicMapServiceLayer(layerURL, {id: layerURL});
                } else {
                    lyr = new esri.layers.FeatureLayer(layerURL,
                        { id: layerURL,
                          mode: esri.layers.FeatureLayer.MODE_ONDEMAND,
                          outFields:["*"]
                        } );
                }
            }
            if(lyr) {
                map.addLayer(lyr);
            }
        }),
        dojo.hitch(this, function(err) {
            alert("addAGSLayer failed, url: " + layerURL);
        })
    ); // req.then
}
Возмутительно, но это работает.

А мужики-то не знают:



original post http://vasnake.blogspot.com/2013/09/add-to-map-arcgis-tiled-mapservice-with.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)