geo-targeting-component
Version:
Geo targeting component
1 lines • 2.65 kB
JavaScript
!function(){"use strict";angular.module("geoTargetingModule",["yaMap"]).component("geoTargetingComponent",{bindings:{model:"=",options:"<"},template:'<div class="geo-targeting-component"><ya-map ya-after-init="$ctrl.getMap($target);" ya-zoom="10" ya-controls ya-center="$ctrl.options.coordinates" style="width: 600px; height: 600px; display: inline-block;"><ya-geo-object ya-after-init="$ctrl.getCircle($target);" ya-source="$ctrl.options.object" ya-options="{draggable: true, fillColor: \'#ffc53877\',strokeColor: \'#ffc538\',strokeOpacity: 0.8,strokeWidth: 1}"></ya-geo-object></ya-map></div>',controller:["$timeout",function(e){var o=this;o.circle={},o.map={},o.model={},o.options={zoom:10,coordinates:[37.64,55.76],object:{geometry:{type:"Circle",coordinates:[37.6,55.76],radius:5e3},properties:{hintContent:"Подвинь меня"}},defaultAddress:""},o.$onInit=function(){console.log("init")},o.getCircle=function(t){o.circle=t,o.model.coordinates=o.options.coordinates,o.circle.geometry.setCoordinates(o.model.coordinates),o.model.setRadius=function(e){e=parseInt(e),o.circle.geometry.setRadius(1e3*e),o.model.radius=e},o.model.getRadius=function(){return o.circle.geometry.getRadius()/1e3},o.circle.events.add("dragend",function(e){o.model.coordinates=o.circle.geometry.getCoordinates(),o.tryFindAddrByCoords(o.model.coordinates)}),e(function(){o.model.setRadius(o.options.object.geometry.radius)},0),o.options.address?o.model.findByAddress(o.options.address):o.options.coordinates?o.model.setCoordinates(o.options.coordinates):o.model.setCoordinates([37.64,55.76]),o.options.onInit&&o.options.onInit()},o.getMap=function(e){o.map=e,o.map.events.add("click",function(e){var t=e.get("coords");o.model.coordinates=t,o.circle.geometry.setCoordinates(o.model.coordinates),o.tryFindAddrByCoords(o.model.coordinates)}),o.model.findByAddress=function(e){o.tryFindByAddr(e)},o.model.setCoordinates=function(e){o.map.setCenter(e),o.tryFindAddrByCoords(e)}},o.tryFindByAddr=function(e){ymaps.geocode(e,{results:1}).then(function(e){if(e){var t=e.geoObjects.get(0),d=t.geometry.getCoordinates();t.properties.get("boundedBy")&&(o.model.address=t.getAddressLine()?t.getAddressLine():"Не удалось определить адрес.",o.model.coordinates=d,o.circle.geometry.setCoordinates(d),o.map.setCenter(d),o.tryFindAddrByCoords(d))}})},o.tryFindAddrByCoords=function(t){ymaps.geocode(t).then(function(d){var n=d.geoObjects.get(0);n.getAddressLine()&&e(function(){o.model.address=n.getAddressLine()?n.getAddressLine():"Не удалось определить адрес."},0),o.model.coordinates=t,o.circle.geometry.setCoordinates(t)})}}]})}();