Daha çox

Ordnance Survey Plitələrini fərqli bir OpenLayers TileLayer üzərinə örtməyə çalışırıq


OpenLayers 3 istifadə edərək bir xəritəyə iki qat əlavə etməyə çalışıram, biri Bing Maps-dən, digəri isə Ordnance Anket məlumatlarından.

Hər iki xəritəm ayrı-ayrı sənədlərdə düzgün şəkildə göstərilir, lakin ikisini bir xəritədə düzgün birləşdirə bilmirəm. İki qatı eyni xəritəyə əlavə edərkən, Ordnance Survey qatının İngiltərənin üzərində deyil, [0,0] lat uzun nöqtəsində yerləşdiyi görünür. İkisini düzgün bir şəkildə düzəltməyin bir-birinə uyğun bir yolu varmı? Bindirmənin dəqiqliyi çox dəqiq olmalı deyil, çünki mənim son planım müxtəlif qətnamələrdə iki qat arasında keçid etməkdir.

Bu, CİS ilə ilk real təcrübəmdir, buna görə açıq səhvləri bağışla.

Hal-hazırda sahib olduğum kod belədir

var ölçü = [0, 0, 800000, 1300000]; proj4.defs ("EPSG: 27700", '+ proj = tmerc + lat_0 = 49 + lon_0 = -2 + k = 0.9996012717' + '+ x_0 = 400000 + y_0 = -100000 + ellps = airy + datum = OSGB36 + ədəd = m + no_defs '); var proj = 'EPSG: 27700'; var qətnamələri = [2500, 1000, 500, 200, 100, 50, 25, 10, 5, 2, 1]; var map = yeni ol.Map ({// nəzarət: [yeni OpenLayers.Control.Navigation (), yeni OpenLayers.Control.PanZoomBar (), yeni OpenLayers.Control.LayerSwitcher ()], təbəqələr: [yeni ol.layer. Çini ({mənbə: new ol.source.TileWMS ({url: 'http://openspace.ordnancesurvey.co.uk/osmapapi/ts', parametrlər: {'VERSION': '1.1.1', 'LAYERS': '200', // başlanğıc dəyər; 'KEY' altındakı baxış qətnaməsinə baxın: 'API_KEY', 'URL': document.URL}, // plitələr şəbəkəsinə ehtiyac yoxdur, əks halda uyğun olmayan qlobal şəbəkə plitəsi istifadə edir: new ol.tilegrid.TileGrid ({tileSizes) : [200, 200, 200, 200, 200, 200, 200, 200, 200, 250, 250], çözünürlükler: çözünürlükler, mənşə: ol.proj.transform ([400000, 650000], projeksiyon, 'EPSG: 3857' )))}), ölçü: ölçü, proyeksiya: proyeksiya, maxResolution: 1000}), yeni ol.layer.Tile ({mənbə: yeni ol.source.BingMaps ({imagerySet: 'Yol', açar: 'API_KEY'} ), proyeksiya: 'EPSG: 3857', minResolution: 1000})], target: 'map', view: new ol.View ({projection: 'EPSG: 3857', center: ol.proj.transform ([400000, 650000], proyekt, 'EPSG: 3857'), qətnamə: 200, qətnamələr: qətnamələr})}); // qətnamə dəyişikliyində qat paramının dəyişdirilməsi lazımdır map.getView (). on ('dəyişiklik: çözünürlük', function (evt) {map.getLayers (). item (0) .getSource (). updateParams ({LAYERS) : evt.target.getResolution ()});});

Yalnız veb xidmətlərindən istifadə etmək mümkün deyil. Ordnance Ordnance Anketindən gələn görüntülər EPSG: 27700 proqnozlarını və Bing Maps EPSG: 3857 istifadə edir.

Fərqli proqnozlar fərqli tərəzi, fərqli x, y mənşəyi, fərqli vahid, fərqli görüntü deformasiyaları deməkdir. Bunu düzəltmək üçün müştəri tərəfində dəyişikliklər etmək mümkün deyil (rasters üçün, lakin vektor üçün məhdudiyyət yoxdur).

Mapproxy kimi bir proqramdan istifadə edərək şəkilləri və ya plitələri hər zaman təkzib edə bilərsiniz, amma etiketlər pis olacaq, dəqiqlik itirirsiniz. Üstəlik, xüsusən Ordnance Survey üçün bunu etməyinizə icazə verilmir: şəkilləri önbelleğe alma və OS API-də dərəcələr həddi ilə fırıldaqçılıq kimi (PS: onlardan soruşun, İngiltərədə yaşamıram, bu səbəbdən bilmirəm dəqiq API lisenziya şərtləri).