var geocoder; var map; var searchService; var myLocation; var directionsService = new google.maps.DirectionsService(); var directionsDisplay = new google.maps.DirectionsRenderer(); function initialize() { var map = new google.maps.Map( document.getElementById("map_canvas"), { center: new google.maps.LatLng(37.4419, -122.1419), zoom: 13, mapTypeId: google.maps.MapTypeId.ROADMAP }); myLocation = map.getCenter(); var marker = new google.maps.Marker({ position: myLocation, map: map }); searchService = new google.maps.places.PlacesService(map); directionsDisplay.setMap(map); var request = { location: myLocation, rankBy: google.maps.places.RankBy.DISTANCE, types: ['bar', 'cafe', 'food', 'liquor_store', 'lodging', 'meal_delivery', 'meal_takeaway', 'night_club', 'restaurant'], keyword: ['bar', 'pub'] }; searchService.nearbySearch(request, function(bars, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { var barMark = new google.maps.Marker({ position: bars[0].geometry.location, map: map, icon: { url: "https://maps.gstatic.com/intl/en_us/mapfiles/markers2/measle.png", size: new google.maps.Size(7, 7), anchor: new google.maps.Point(3.5, 3.5) } }); var request = { origin: myLocation, destination: bars[0].geometry.location, travelMode: google.maps.TravelMode.WALKING }; directionsService.route(request, function(response, status) { if (status == google.maps.DirectionsStatus.OK) { directionsDisplay.setDirections(response); directionsDisplay.setOptions({ suppressMarkers: true, preserveViewport: true }); var polyline = getPolyline(response); map.setCenter(polyline.getPath().getAt(polyline.getPath().getLength() - 1)); map.setZoom(19); var lineLength = google.maps.geometry.spherical.computeDistanceBetween(bars[0].geometry.location, polyline.getPath().getAt(polyline.getPath().getLength() - 1)); var lineHeading = google.maps.geometry.spherical.computeHeading(bars[0].geometry.location, polyline.getPath().getAt(polyline.getPath().getLength() - 1)); var markerO = new google.maps.Marker({ position: google.maps.geometry.spherical.computeOffset(bars[0].geometry.location, lineLength * 0.1, lineHeading) }); var markerD = new google.maps.Marker({ position: google.maps.geometry.spherical.computeOffset(bars[0].geometry.location, lineLength * 0.9, lineHeading) }); var markerA = new google.maps.Marker({ position: google.maps.geometry.spherical.computeOffset(markerO.getPosition(), lineLength / 3, lineHeading - 40) }); var markerB = new google.maps.Marker({ position: google.maps.geometry.spherical.computeOffset(markerD.getPosition(), lineLength / 3, lineHeading - 140) }); var curvedLine = new GmapsCubicBezier(markerO.getPosition(), markerA.getPosition(), markerB.getPosition(), markerD.getPosition(), 0.01, map); var line = new google.maps.Polyline({ path: [bars[0].geometry.location, polyline.getPath().getAt(polyline.getPath().getLength() - 1)], strokeOpacity: 0, icons: [{ icon: { path: 'M 0,-1 0,1', strokeOpacity: 1, scale: 4 }, offset: '0', repeat: '20px' }],
html, body, #map_canvas { height: 100%; width: 100%; margin: 0px; padding: 0px }
<script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> <div id="map_canvas"></div>