//файл var map = false; var geoResult; var mas_point_add_to_maps = new Array(); var drag_placemark = false; var go_function_begin_init_maps = false; var go_function_end_init_maps = false; var s_name_form_bind_maps = ""; var open_first_point_maps = false; var set_zoom_maps_point = false; var mas_point_maps = []; function init_yandex_maps() { set_longitude_yandex_maps=s_longitude_yandex_maps; set_latitude_yandex_maps=s_latitude_yandex_maps; set_zoom_yandex_maps=s_zoom_yandex_maps; if ( go_function_begin_init_maps ) { go_function_begin_init_maps(); } var myOptions = { center: [set_latitude_yandex_maps, set_longitude_yandex_maps], zoom: set_zoom_yandex_maps, type: "yandex#map" }; map = new ymaps.Map("maps_canvas", myOptions); //map.setCenter(new YMaps.GeoPoint(set_longitude_yandex_maps, set_latitude_yandex_maps), set_zoom_yandex_maps);// долгота, широта | longitude - долгота, latitude - широта //map.setType(YMaps.MapType.MAP);//MAP , SATELLITE , HYBRID map.controls.add("mapTools");//стандартный набор кнопок map.controls.add("zoomControl");// Добавление кнопки изменения масштаба map.controls.add("typeSelector");// Добавление списка типов карты //map.addControl(new YMaps.ToolBar()); //панель инструментов //map.addControl(new YMaps.MiniMap()); //обзорная карта //map.addControl(new YMaps.ScaleLine()); //масштабная линейка if ( go_function_end_init_maps ) { go_function_end_init_maps(); } } function on_show_box_maps() { on_show_yandex_maps(); } function on_hide_box_maps() { on_hide_yandex_maps(); } function on_show_yandex_maps() { document.getElementById("box_maps_canvas").style.display = "block"; init_yandex_maps(); } function on_hide_yandex_maps() { document.getElementById("box_maps_canvas").style.display = "none"; //document.getElementById("maps_canvas").innerHTML = ""; drag_placemark = false; if ( map ) { map.destroy(); //map = false; } } function set_init_maps_drag_point_maps() { obj_form_create = document.forms[s_name_form_bind_maps]; var form_lng_geo = parseFloat(obj_form_create.longitude.value); var form_lat_geo = parseFloat(obj_form_create.latitude.value); if ( form_lng_geo && form_lat_geo ) { set_longitude_yandex_maps=form_lng_geo; set_latitude_yandex_maps=form_lat_geo; //set_zoom_yandex_maps=zoom_yandex_maps; //alert(set_longitude_yandex_maps + " " + set_latitude_yandex_maps); } } function set_drag_point_maps() { var obj_form_create = document.forms[s_name_form_bind_maps]; var start_longitude_yandex_maps = s_longitude_yandex_maps; var start_latitude_yandex_maps = s_latitude_yandex_maps; var form_lng_geo = parseFloat(obj_form_create.longitude.value); var form_lat_geo = parseFloat(obj_form_create.latitude.value); map.events.add("click", function (e) { //alert(mEvent.getGeoPoint()); create_drag_placemark(1,1,e.get("coordPosition")); }); if ( form_lng_geo && form_lat_geo ) { start_longitude_yandex_maps = form_lng_geo; start_latitude_yandex_maps = form_lat_geo; //alert(form_lng_geo + " " + form_lat_geo); create_drag_placemark(start_longitude_yandex_maps,start_latitude_yandex_maps,false); } } function create_drag_placemark(longitude,latitude,geoPoint) { obj_form_create = document.forms[s_name_form_bind_maps]; var setPointPlacemark = false; if ( geoPoint ) { setPointPlacemark = geoPoint; longitude = geoPoint[1]; latitude = geoPoint[0]; } else { setPointPlacemark = [latitude, longitude]; } if ( drag_placemark ) { //alert("уже есть метка!"); //drag_placemark.setGeoPoint(setPointPlacemark); drag_placemark.geometry.setCoordinates(setPointPlacemark) } else { drag_placemark = new ymaps.Placemark(setPointPlacemark, { hintContent: 'Перетащите эту метку в нужное место.' }, { draggable: true , hasBalloon: false, preset: 'twirl#violetDotIcon' } ); //drag_placemark.name = "Метка"; //drag_placemark.description = "Перетащите эту метку в нужное место"; map.geoObjects.add(drag_placemark); } obj_form_create.longitude.value=longitude; obj_form_create.latitude.value=latitude; drag_placemark.events.add( "drag", function (e) { var GeoKoor = drag_placemark.geometry.getCoordinates(); //alert(GeoKoor.getLng()); //alert(GeoKoor.getLat()); obj_form_create.longitude.value=GeoKoor[1]; obj_form_create.latitude.value=GeoKoor[0]; } ); } function set_mas_point_to_maps() { //должен быть определен массив точек mas_point_maps var n,one_point; for (n=0;n < mas_point_maps.length; n++ ) { one_point = mas_point_maps[n]; if ( !one_point["lng"] || !one_point["lat"] ) continue; var placemark = new ymaps.Placemark( [one_point["lat"], one_point["lng"]], { //iconContent : "", balloonContent : "
"+ decodeURIComponent(one_point["name"])+"
" }, { draggable : false, hideIconOnBallon : false } );//, {draggable: true , hasBalloon: false}); //placemark.name = "

"+ decodeURIComponent(one_point["name"])+"

"; //var short_description =decodeURIComponent(one_point["short_description"]); //placemark.description = ""; //map.addOverlay(placemark); map.geoObjects.add(placemark); mas_point_add_to_maps[mas_point_add_to_maps.length] = placemark; } if ( typeof( open_first_point_maps ) != "undefined" && open_first_point_maps && mas_point_add_to_maps.length > 0 ) { mas_point_add_to_maps[0].balloon.open(); } } function set_init_maps_mas_point_maps() { if ( typeof( set_zoom_maps_point ) != "undefined" ) { set_zoom_yandex_maps=s_zoom_yandex_maps_point; } //должен быть определен массив точек mas_point_maps, центрирование карты будет по первой точке if ( mas_point_maps && mas_point_maps.length > 0 ) { var lng_geo = mas_point_maps[0]["lng"]; var lat_geo = mas_point_maps[0]["lat"]; if ( lng_geo && lat_geo ) { set_longitude_yandex_maps=lng_geo; set_latitude_yandex_maps=lat_geo; //set_zoom_yandex_maps=zoom_yandex_maps; //alert(set_longitude_yandex_maps + " " + set_latitude_yandex_maps); } } } function open_num_mas_point_to_maps( num_i ) { if ( mas_point_add_to_maps && mas_point_add_to_maps[num_i] ) { mas_point_add_to_maps[num_i].balloon.open(); if ( document.getElementById("maps_canvas") ) { document.getElementById("maps_canvas").scrollIntoView(true); //document.getElementById("maps_canvas").scrollBy(-5,0); window.scrollBy(0,-7); } } } function showAddress (value) { ymaps.geocode(value, {results: 100}).then( function(res) { if ( res.geoObjects.getLength() ) { var point = res.geoObjects.get(0).geometry.getCoordinates(); create_drag_placemark(1, 1, point); map.panTo(point); } else { alert("Ничего не найдено!") } }); } // ---------------------------- // ---------------------------- // ---------------------------- // longitude - долгота (x) диапазон от -180 до 180 // latitude - широта (y) диапазон от -90 до 90 function process_search_yandex_maps() { this.map = false; this.clusterer = false; this.mas_point = []; this.mas_id_point = []; this.delta_latitude = 1; // значение от 0 до 1 this.delta_longitude = 0.7; // значение от 0 до 1 this.mas_coor_view_section = []; this.obj_rectangle = false; this.obj_rectangle2 = false; this.link_function_back_agent = false; this.mas_init_icons = {}; this.create_maps = function (id_block, latitude, longitude, zoom) { if ( typeof( latitude ) == "undefined" ) latitude = false; if ( typeof( longitude ) == "undefined" ) longitude = false; if ( typeof( zoom ) == "undefined" ) zoom = false; this.set_longitude = longitude || s_longitude_yandex_maps; this.set_latitude = latitude || s_latitude_yandex_maps; this.set_zoom = zoom || s_zoom_yandex_maps; var state = { center: [this.set_latitude, this.set_longitude], zoom: this.set_zoom, type: "yandex#map" }; var options = { minZoom : 2, avoidFractionalZoom : false }; this.map = new ymaps.Map(id_block, state, options); //map.setCenter(new YMaps.GeoPoint(set_longitude_yandex_maps, set_latitude_yandex_maps), set_zoom_yandex_maps);// долгота, широта | longitude - долгота, latitude - широта //map.setType(YMaps.MapType.MAP);//MAP , SATELLITE , HYBRID this.map.controls.add("mapTools");//стандартный набор кнопок this.map.controls.add("zoomControl");// Добавление кнопки изменения масштаба this.map.controls.add("typeSelector");// Добавление списка типов карты //map.addControl(new YMaps.ToolBar()); //панель инструментов //map.addControl(new YMaps.MiniMap()); //обзорная карта //map.addControl(new YMaps.ScaleLine()); //масштабная линейка //создадим кластер this.clusterer = new ymaps.Clusterer(); //clusterer.add(myGeoObjects); this.map.geoObjects.add(this.clusterer); } this.first_init_event = function(mas_init_icons) { this.mas_init_icons = mas_init_icons; this.init_method_event(); this.agent_change_maps(); } this.init_method_event = function () { var a = this; this.map.events.add('boundschange',function (event){ a.agent_change_maps( event ); } ); } this.set_back_agent = function ( link_function ) { this.link_function_back_agent = link_function; } this.agent_change_maps = function () { var coor_view_maps = this.get_view_coor(); var coor_view_maps_load = this.set_coor_maps_load(coor_view_maps); var check_on_view_section = this.check_on_view_section(coor_view_maps); //this.view_info_coor(coor_view_maps,coor_view_maps_load,""); //this.create_rectangle(coor_view_maps,coor_view_maps_load); if ( !check_on_view_section ) { //this.create_rectangle(coor_view_maps,coor_view_maps_load); this.add_coor_in_view_section(coor_view_maps_load); this.loading_object( coor_view_maps_load, coor_view_maps ); } } this.loading_object = function ( coor_view_maps, t_coor ) { //var coor_view_maps = this.get_view_coor(); var latitude_bottom = coor_view_maps["bottom"]; var latitude_top = coor_view_maps["top"]; var longitude_left = coor_view_maps["left"]; var longitude_right = coor_view_maps["right"]; //this.view_info_coor(t_coor,coor_view_maps,2); this.link_function_back_agent( coor_view_maps, this.mas_id_point.join(",") ); } this.get_view_coor = function () { var coor_view_maps = this.map.getBounds(); var latitude_bottom = coor_view_maps[0][0]; var latitude_top = coor_view_maps[1][0]; var longitude_left = coor_view_maps[0][1]; var longitude_right = coor_view_maps[1][1]; var center = this.map.getCenter(); if ( !( longitude_left <= center[1] && center[1] <= longitude_right ) ) { //alert (333); longitude_left = -180; longitude_right = 180; latitude_bottom = -90; latitude_top = 90; } return( { "bottom":latitude_bottom, "top":latitude_top, "left":longitude_left, "right":longitude_right } ); } this.set_coor_maps_load = function (coor_view_maps) { // расчитываем координаты области карты для загрузки меток var coor = {};//coor_view_maps; var s_latitude = Math.abs(coor_view_maps.top - coor_view_maps.bottom); var s_longitude = Math.abs(coor_view_maps.right - coor_view_maps.left); coor.bottom = coor_view_maps.bottom - this.delta_latitude * s_latitude; if ( coor.bottom < -90 ) coor.bottom = -90; coor.top = coor_view_maps.top + this.delta_latitude * s_latitude; if ( coor.top > 90 ) coor.top = 90; coor.left = coor_view_maps.left - this.delta_longitude * s_longitude; if ( coor.left < -180 ) coor.left = -180; coor.right = coor_view_maps.right + this.delta_longitude * s_longitude; if ( coor.right > 180 ) coor.right = 180; return ( coor ); } this.add_coor_in_view_section = function (coor_view_maps_load) { this.mas_coor_view_section.push(coor_view_maps_load); } this.check_on_view_section = function (coor_check) { var on_view = false; var one_section; for (var i = 0; i < this.mas_coor_view_section.length; i++) { one_section = this.mas_coor_view_section[i]; if ( ( one_section.left <= coor_check.left ) && ( one_section.right >= coor_check.right ) && ( one_section.top >= coor_check.top ) && ( one_section.bottom <= coor_check.bottom ) ) { on_view = true; break; } } return (on_view); } this.add_object_map = function ( mas_object ) { var one_point, placemark, is_link, geo_object = [], preset_icon; for ( var n = 0; n < mas_object.length; n++ ) { one_point = mas_object[n]; //alert ( one_point["longitude"] + " " + one_point["latitude"] ); if ( !one_point["longitude"] || !one_point["latitude"] ) continue; is_link = ( one_point["link"] ? true : false ); this.mas_id_point.push(one_point["id"]); preset_icon = this.get_preset_icon( one_point["type_icon"] ); //alert (preset_icon); geo_object.push( new ymaps.GeoObject( { geometry: { type: "Point", coordinates: [one_point["latitude"], one_point["longitude"]]}, properties: { clusterCaption: jsCodeHtmlChars(one_point["name"]), balloonContent : one_point["ballon_content"] } }, { preset: preset_icon } ) ); } this.clusterer.add(geo_object); } this.get_preset_icon = function ( type_icon ) { var preset = this.mas_init_icons["default"][0]; //alert (type_icon); if ( type_icon != "" && type_icon != "default" && typeof( this.mas_init_icons["icons"][type_icon] ) != "undefined" ) { preset = this.mas_init_icons["icons"][type_icon][0]; //alert (3333); } return ( preset ); } this.reset_data = function () { this.mas_point = []; this.mas_id_point = []; this.mas_coor_view_section = []; this.clusterer.removeAll(); } this.show_address_maps = function ( address ) { var map = this.map; //alert (address); ymaps.geocode(address, {results: 100}).then( function(res) { if ( res.geoObjects.getLength() ) { var point = res.geoObjects.get(0).geometry.getCoordinates(); //create_drag_placemark(1, 1, point); map.panTo(point); } else { alert("Ничего не найдено!") } }); } this.num_info = 0; this.view_info_coor = function (coor, coor2, num_block) { var t = ""; t += "
1: " +"top: " + coor.top + ", bottom: " + coor.bottom + ", left: " + coor.left + ", right: " + coor.right + "
"; t += "
2: " +( coor2 ? "top: " + coor2.top + ", bottom: " + coor2.bottom + ", left: " + coor2.left + ", right: " + coor2.right + "
" : "---" ); this.view_info(t,num_block); } this.view_info = function (info,num_block) { if (num_block === 2) this.num_info++; document.getElementById("info_maps_canvas_search"+(num_block || num_block === 0 || num_block === "0" ? num_block : "")).innerHTML = "n->"+ this.num_info + " " + info; } this.num_rectangle = 0; this.create_rectangle = function (coor,coor2) { if ( typeof(coor) == "undefined" ) coor = false; if ( typeof(coor2) == "undefined" ) coor2 = false; this.num_rectangle++; if ( this.obj_rectangle ) { //return; this.map.geoObjects.remove(this.obj_rectangle); this.obj_rectangle = false; } if ( this.obj_rectangle2 ) { this.map.geoObjects.remove(this.obj_rectangle2); this.obj_rectangle2 = false; } if ( coor ) { this.obj_rectangle = new ymaps.GeoObject( { geometry:{ type : "Rectangle", coordinates: [[coor.bottom,coor.left],[coor.top,coor.right]] }, properties:{ hintContent: "Прямоугольник "+this.num_rectangle } }, { fillColor : "#FFFF0030", strokeColor : "#00005830", strokeWidth : 1 } ); this.map.geoObjects.add(this.obj_rectangle); } if ( coor2 ) { this.obj_rectangle2 = new ymaps.GeoObject( { geometry:{ type : "Rectangle", coordinates: [[coor2.bottom,coor2.left],[coor2.top,coor2.right]] }, properties:{ hintContent: "Прямоугольник2 "+this.num_rectangle } }, { fillColor : "#58580030", strokeColor : "#58585830", strokeWidth : 1 } ); this.map.geoObjects.add(this.obj_rectangle2); } } }