requirejs.config({ paths: { 'google-maps': '//maps.googleapis.com/maps/api/js?libraries=weather,panoramio,visualization&key=AIzaSyA1S5eCI-xflDG96HGLR78sAH6JAbWE9KI', 'google-search': '//www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAAjU0EJWnWPMv7oQ-jjS7dYxQ82LsCgTSsdpNEnBsExtoeJv4cdBSUkiLH6ntmAr_5O4EfjDwOa0oZBQ', 'leaflet': '/themes/_front/_js/leaflet/leaflet', 'leaflet-old': '/themes/_front/_js/leaflet-old/leaflet', 'leaflet-providers': '/themes/_front/_js/leaflet/leaflet-providers', 'leaflet-locate': '/themes/_front/_js/leaflet-locate-control/L.Control.Locate.min', 'leaflet-locate-old': '//api.mapbox.com/mapbox.js/plugins/leaflet-locatecontrol/v0.43.0/L.Control.Locate.min', 'leaflet-draw': '/themes/_front/_js/leaflet-draw/leaflet.draw', 'leaflet-measure': '/themes/_front/_js/leaflet-measure/Leaflet.PolylineMeasure', 'leaflet-routing-machine': '/themes/_front/_js/leaflet-routing-machine/leaflet-routing-machine.min', 'leaflet-control-geocoder': '/themes/_front/_js/leaflet-control-geocoder/Control.Geocoder', 'yandex-maps': '//api-maps.yandex.ru/2.1/?lang=ru_RU', 'bing-maps': '//ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&onScriptLoad=initBingMap&s=1', //here 'here-maps': '//js.api.here.com/v3/3.0/mapsjs-core', 'here-service': '//js.api.here.com/v3/3.0/mapsjs-service', 'here-events': '//js.api.here.com/v3/3.0/mapsjs-mapevents', 'here-ui': '//js.api.here.com/v3/3.0/mapsjs-ui', //mapbox 'mapbox-gl': '/themes/_front/_js/mapbox/mapbox-gl', //geomixer 'geomixer-maps': '/themes/_front/_js/geomixer/leaflet-geomixer.js?key=127WR4GUCQ', 'geomixer-manager': '/themes/_front/_js/geomixer/gmxBaseLayersManager', 'geomixer-mercator': '/themes/_front/_js/geomixer/TileLayer.Mercator', 'geomixer-controls': '/themes/_front/_js/geomixer/gmxControls-min', 'geomixer-layers': '/themes/_front/_js/geomixer/initBaseLayerManager', 'geomixer-overlays': '/themes/_front/_js/geomixer/L.ImageOverlay.Pane', 'geomixer-cadastre': '/themes/_front/_js/geomixer/L.Cadastre', 'geomixer-cadastre-info': '/themes/_front/_js/geomixer/L.Cadastre.Info' }, shim: { 'geomixer-maps': { deps: ['leaflet-old'] }, 'geomixer-manager': { deps: ['geomixer-maps'] }, 'geomixer-mercator': { deps: ['geomixer-maps'] }, 'geomixer-controls': { deps: ['geomixer-maps'] }, 'geomixer-overlays': { deps: ['geomixer-maps'] }, 'geomixer-layers': { deps: ['geomixer-manager', 'geomixer-mercator', 'geomixer-controls'] }, 'geomixer-cadastre': { deps: ['geomixer-overlays'] }, 'geomixer-cadastre-info': { deps: ['geomixer-cadastre'] }, 'kosmo': { deps: ['geomixer-layers','geomixer-cadastre-info']//'leaflet-locate-old' } } }); requirejs.config({ baseUrl: '/themes/_front/_js/providers', // for DEV it can be: //urlArgs: 'bust=' + (new Date()).getTime(), urlArgs: 'bust=v6.9', // bustt waitSeconds: 30 }); requirejs.onError = function (err) { if (err.requireType === 'timeout') { alert("Удаленный сервер не доступен, пожалуйста перезагрузите страницу"); } else { throw err; } }; var markersStorage = new StorageArray('bm_markers'); var AcceptableTypes = { mapType_setting: { 'mapbox': ['hybrid','map','sat'], 'google': ['hybrid','satellite','sat','osm','terrain','map','roadmap'], 'yandex': ['hybrid','map','satellite','publicMap','publicMapHybrid'], 'bing': ['aerial','auto','birdseye','map','road'], '2gis': ['map'], 'here': ['hybrid','terrain','map','normal','sat'], 'kosmo': ['satellite','hybrid','map'], 'osm': ['Mapnik','sputnik','opentopomap','MapSurfer','Chepetsk','HOT','OpenCycleMap','Transport','TransportDark', 'Black', 'Landscape','MapQuest','Toner','Watercolor', 'Wikimapia','WorldImagery'] }, firstOrDefault: function(provider, mapType) { if(!this.mapType_setting[provider]) { provider = 'google'; } var isAcceptable = this.mapType_setting[provider].indexOf(mapType) > -1; if(isAcceptable) { return mapType; } else { return this.mapType_setting[provider][0]; } } }; var GeometryData = Backbone.Model.extend({}); var GeometryCollection = Backbone.Collection.extend({ personalId: 0, mapName: '', writeAccess: true, model: GeometryData, url: function() { return '/personal-map/read?id='+this.personalId+'&token='+$.cookie('bm_personal_token'); }, parse: function(response) { this.writeAccess = !!response.write; if(this.writeAccess) { $('.personal_map_save_btn').text('Сохранить карту'); } else { $('.personal_map_save_btn').text('Сохранить в мои карты'); } if(response.features) { this.mapName = response.name; return response.features; } if(response.length === 1 && response[0].lat) { // old format support return [{ type: 'Feature', properties: {'Name': response[0].title}, geometry: {type: 'Point', coordinates: [response[0].lon, response[0].lat]} }]; } return response; } }); var MapData = Backbone.Model.extend({ defaults: { 'lat': 55, 'lon': 80, 'zoom': 3, 'bbox': '', 'mapType': 'hybrid', 'iprov': 'iprov', 'marker': false, 'overlayIds': '', 'streetview': false, 'heading': 0, 'pitch': 0, 'provider': '', 'mapScreen': 1, 'pathname': '', 'osm_id': null, 'personal_id': null, 'osm_object': null, 'search_phrase': '', 'house': null }, initialize: function() { this.set('geom_col', new GeometryCollection()); this.listenTo(this, "change", this.rebuild_elements); this.listenTo(this, "change:provider", this.reload_provider); this.listenTo(this, "change:osm_id", this.reload_place); this.listenTo(this, "change:personal_id", this.reload_personal_map); this.listenTo(this, "change:search_phrase", this.reload_search); this.listenTo(this.attributes.geom_col, "click_save", this.changeGeomCol); this.listenTo(this.attributes.geom_col, "reset", this.changeGeomCol); this.listenTo(this.attributes.geom_col, "save_and_close", this.saveAndClose); }, generateToken: function() { return Math.random().toString(36).substr(2) + Math.random().toString(36).substr(2);; }, clearPersonalMap: function () { $('.dropMarker_js').removeClass('dropMarker_disabled'); this.get('geom_col').mapName = ''; this.get('geom_col').reset(); $('.pmap_linkBox').removeClass('pmap_linkBox_v'); $('#personal_map_name').val(''); window.onbeforeunload = null; }, saveAndClose: function () { var p_id = this.get('personal_id'); if(p_id) { this.changeGeomCol(true); } else { //this.clearPersonalMap(); this.changeGeomCol(true); } }, changeGeomCol: function(clear_after) { var token = $.cookie('bm_personal_token'); if(!token) { token = this.generateToken(); $.cookie('bm_personal_token', token, { path: '/', expires: 360}); } var map_data = this.get('geom_col'); var is_empty = map_data.length Google Земля (.kml)'); // у лоадмапа максимальный зум генштаба - 15. Валидируем зум, и уменьшаем до 15 если на вход дан слишком большой if (this.get('lat')>=16) { var loadmap_maxzoom = 15; } else { var loadmap_maxzoom = this.get('zoom'); } $('#export_loadmap').attr('href', 'http://loadmap.net/ru?qq='+this.get('lat')+'%20'+this.get('lon')+'&z='+loadmap_maxzoom+'&s=-1&c=41&g=1'); } }); var ProviderData = Backbone.Model.extend({ defaults: { 'id': 1 }, initialize: function(id) { this.set({ 'id': id, 'el': (id > 1) ? 'bmap' + id : 'bmap', 'data': mapsCollection.at(id - 1) }); } }); var MapsCollection = Backbone.Collection.extend({ model: MapData, getUrl: function() { var MapUrl = ''; _.each(this.models, function(model, index) { if(index > 0) { MapUrl += '/map' + (index+1); } MapUrl += model.getPartialUrl(); }); return MapUrl; }, getStreetViewVisible: function() { var result = false; _.each(this.models, function(model) { if(model.get('streetview')) { result = true; } }); return result; }, setDimension: function(map_count) { if(map_count != this.length) { this.render(map_count); // render map boxes this.reset(); // clear the collection for(var i = 0; i 1){ $('.mapTabsP').addClass('mapTabsP_compare'); } var innerHtml = template({ 'count': map_count, 'map_chooser': map_chooser }); $(el).html(innerHtml); this.bind_mapchooser_change(); }, bind_mapchooser_change: function() { var collection = this; $('.chose_map').change(function() { var mapScreen = parseInt($(this).attr('data-id')); var model = collection.at(mapScreen - 1); var MapUrl = '/map'; var provider = $(this).val(); _.each(collection.models, function(item, index) { if(index > 0) { MapUrl += '/map' + (index+1); } if(!(item.get('mapScreen') == mapScreen)) { MapUrl += item.getPartialUrl(); } else { MapUrl += '/' + provider; MapUrl += '/' + AcceptableTypes.firstOrDefault(provider, item.get('mapType')); } }); MapUrl += '/' + model.getUrl(); window.location.href = MapUrl; }); $('.expandFrameBtn').click(function() { var mapScreen = parseInt($(this).prev().attr('data-id')); var model = collection.at(mapScreen - 1); var MapUrl = '/map/' + model.getUrl(true); window.location.href = MapUrl; }); $('.removeFrameBtn').click(function() { var mapScreen = parseInt($(this).prev().prev().attr('data-id')); var model = collection.at(mapScreen - 1); var MapUrl = '/map'; var index = 0; _.each(collection.models, function(item) { if(!(item.get('mapScreen') == mapScreen)) { if(index > 0) { MapUrl += '/map' + (index+1); } MapUrl += item.getPartialUrl(); index++; } }); MapUrl += '/' + model.getUrl(); window.location.href = MapUrl; }); } }); var mapsCollection = new MapsCollection(); var Router = Backbone.Router.extend({ routes: { // for cities and other special places "*section?house=:house": "house_map", "*section?k=:provider/:maptype(/:zoom/:lat/:lon)": "stable_map", "map/:provider(/:maptype)": "short_link", "map/:provider/:maptype/map2/:provider2/:maptype2(/map3/:provider3/:maptype3)": "compare_link" }, db_coord: null, initialize: function(options) { if(options) { this.db_coord = options.db_coord; } // starts with {map1}(/map2/{map2}/map3/{map3}) // each {map} section may consist of letters, digits, underscore sign and slash sign // continues with zoom/lat/lon(/heading/pitch), zoom can be fractional // may contain additional sections, including osm_id/{osm_id} section // may end with search section starting with `s` this.route(/^map\/([\/\w]+?)(?:(?:\/map2\/([\/\w]+?))(?:\/map3\/([\/\w]+?))?)?\/([0-9\.]+)\/(-?[0-9\.]+)\/(-?[0-9\.]+)(?:\/(-?[0-9\.]+)\/(-?[0-9\.]+))?(?:\/([\/A-Za-z0-9_]+))?(?:\/s\/([^\/]+))?$/, "multimap"); }, map_setup: function(m2, m3) { var map_count = 1; if(m3) { map_count = 3; } else if(m2) { map_count = 2; } mapsCollection.setDimension(map_count); }, getCookieMaptype: function() { if($.cookie('bm_maptype') != undefined) { var cookie_mt = $.cookie('bm_maptype').split('/'); if(cookie_mt.length > 1) { return cookie_mt[1]; } } return ''; }, navigateToPersonalMap: function(mapId) { var model = mapsCollection.at(0); model.set({ 'personal_id': mapId }); var MapUrl = '/map' + mapsCollection.getUrl() + '/' + model.getUrl(); if(mapId) { MapUrl += '/personal/' + encodeURIComponent(mapId); markersStorage.addElement({ 'url': MapUrl, 'id': mapId, 'data': model.get('geom_col') }); } var is_fullscreen = Backbone.history.getFragment().startsWith('map/'); $('.dropMarker_link_js').val(window.location.origin + MapUrl); if(is_fullscreen) { this.navigate(MapUrl, {trigger: false}); } $('.dropMarkerBox_step1').addClass('dropMarkerBox_hidden'); $('.dropMarkerBox_step2').addClass('dropMarkerBox_visible'); return MapUrl; }, navigateToSearch: function(searchPhrase) { /* var model = mapsCollection.at(0); model.set({ 'search_phrase': searchPhrase }, {silent: true}); model.trigger('change:search_phrase'); var MapUrl = 'map' + mapsCollection.getUrl() + '/' + model.getUrl(); MapUrl += '/s/' + encodeURIComponent(searchPhrase); this.navigate(MapUrl, {trigger: false}); */ }, navigateToPlace: function(t, searchPhrase) { var osm_id; var tdisplay_name = t.properties.display_name; var tlat = t.geometry.geometries[0].coordinates[1]; var tlon = t.geometry.geometries[0].coordinates[0]; if(t.properties.id) { var osm_id_field = t.osm_id; osm_id_field = osm_id_field.replace('{',''); osm_id_field = osm_id_field.replace('}',''); var osm_ids = osm_id_field.split(','); osm_id = osm_ids[0]; osm_id = t.properties.id; } else { //osm_id = t.osm_type.substring(0, 1) + t.osm_id; osm_id = t.properties.id; // fixme - скорее всего это не OSM ID } var model = mapsCollection.at(0); model.set({ 'osm_id': osm_id, 'search_phrase': searchPhrase }, {silent: true}); model.set({ lat: parseFloat(tlat), lon: parseFloat(tlon), zoom: 15, osm_object: { lat: tlat, lon: tlon, display_name: tdisplay_name } }); var MapUrl = 'map' + mapsCollection.getUrl(); MapUrl += '/15/' + tlat + '/' + tlon; MapUrl += '/osm_id/' + osm_id + '/s/' + encodeURIComponent(searchPhrase); this.navigate(MapUrl, {trigger: false}); }, short_link: function(provider, maptype) { var typePart = provider + '/'; if(!maptype) { maptype = this.getCookieMaptype(); } typePart += AcceptableTypes.firstOrDefault(provider, maptype); var MapUrl = 'map/' + typePart + this.getCookieURL(); this.navigate(MapUrl, {trigger: true, replace: true}); }, checkCommonPart: function(common, regText) { var reg_check = regText.exec(common); if(reg_check) { return reg_check[1]; } return null; }, compare_link: function(provider, maptype, provider2, maptype2, provider3, maptype3) { console.log(provider, maptype, provider2, maptype2, provider3, maptype3); var map1 = provider + '/' + maptype; var map2 = provider2 + '/' + maptype2; var map3 = provider3 ? provider3 + '/' + maptype3 : null; var cookie = $.cookie('bm_coord') != undefined ? $.cookie('bm_coord').split(',') : null; var lat = cookie ? parseFloat(cookie[0]) : 55; var lon = cookie ? parseFloat(cookie[1]) : 80; var zoom = cookie ? parseInt(cookie[2]) : 3; this.multimap(map1, map2, map3, zoom, lat, lon); }, multimap: function(map1, map2, map3, zoom, lat, lon, heading, pitch, common, search) { $.cookie('bm_coord', lat+','+lon+','+zoom+',', {path: '/', expires: 360}); var marker = common === 'mark'; var osmId_reg = /^osm_id\/([rnw][0-9]+)$/; var osm_id = this.checkCommonPart(common, osmId_reg); var personalId_reg = /^personal\/([0-9]+)$/; var personalId = this.checkCommonPart(common, personalId_reg); var m1 = this.map_handle(map1); var m2 = this.map_handle(map2); var m3 = this.map_handle(map3); if(m1) { var mtCookie = m1.provider + '/' + m1.layer; $.cookie('bm_maptype', mtCookie, {path: '/'}); } this.map_setup(m2, m3); _.each(mapsCollection.models, function(item) { item.set({ 'lat': parseFloat(lat), 'lon': parseFloat(lon), 'zoom': parseInt(zoom), 'marker': marker }); if(heading !== null) { item.set({ 'heading': parseFloat(heading), 'pitch': parseFloat(pitch) }); } }); if(personalId) { mapsCollection.at(0).set({ 'personal_id': personalId }); } // insert search phrase if(search) { var searchPhrase = decodeURIComponent(search); $('#geoSearchInput').val(searchPhrase); if(osm_id === null) { mapsCollection.at(0).set({ 'osm_id': osm_id, 'search_phrase': searchPhrase }); } else { mapsCollection.at(0).set({ 'search_phrase': searchPhrase }, {silent: true}); mapsCollection.at(0).set({ 'osm_id': osm_id }); } } checkSearchInput(); var map_parsed_data = [m1, m2, m3]; _.each(mapsCollection.models, function(item, index) { if(index

наш пострел везде поспел Расстояние Большое Болдино Нижний Новгород на машине составляет – 204 км волновать Население Жодино на 2020 год составляет — 61,007 человек лук