I want to display Near by schools of my selected property in google maps API with marker, but it is showing me error, setMap: not an instance of Map; and not an instance of StreetViewPanorama.
Below is my code, please help me to find where is my mistake.
<script type="text/javascript">
function initMap() {
var lat = $('#lat').val();
var lng = $('#lng').val();
var address = $('#address').val();
var latNumber = Number(lat);
var lngNumber = Number(lng);
const myLatLng = {
lat: latNumber,
lng: lngNumber
};
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng,
});
new google.maps.Marker({
position: myLatLng,
map,
title: address,
});
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: myLatLng,
radius: 500,
type: ['school']
},
callback);
}
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
function createMarker(place) {
var latNumber=place.geometry.location.lat();
var lngNumber=place.geometry.location.lng();
let schools = { lat: latNumber, lng: lngNumber };
// var placeLoc = place.geometry.location;
new google.maps.Marker({
position: schools,
map,
title: 'school'
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
window.initMap = initMap;
</script>
<script type="text/javascript"
src="https://maps.google.com/maps/api/js?key='APIKEY'&sensor=true&libraries=geometry&libraries=places&callback=initMap">
</script>
Your map
variable is local to the initMap
function, so isn't defined in the nearbySearch
callback function (which calls createMarker
).
html,
body,
#map {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<head>
</head>
<body>
<input id="lat" value="40.7127753" />
<input id="lng" value="-74.0059728" />
<div id="map"></div>
</body>
<script type="text/javascript">
let map;
function initMap() {
var lat = $('#lat').val();
var lng = $('#lng').val();
var address = $('#address').val();
var latNumber = Number(lat);
var lngNumber = Number(lng);
const myLatLng = {
lat: latNumber,
lng: lngNumber
};
map = new google.maps.Map(document.getElementById("map"), {
zoom: 17,
center: myLatLng,
});
new google.maps.Marker({
position: myLatLng,
map,
title: address,
});
infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.nearbySearch({
location: myLatLng,
radius: 500,
type: ['school']
},
callback);
}
function callback(results, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
createMarker(results[i]);
}
}
}
function createMarker(place) {
var latNumber = place.geometry.location.lat();
var lngNumber = place.geometry.location.lng();
let schools = {
lat: latNumber,
lng: lngNumber
};
// var placeLoc = place.geometry.location;
new google.maps.Marker({
position: schools,
map,
title: 'school'
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(place.name);
infowindow.open(map, this);
});
}
window.initMap = initMap;
</script>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&libraries=geometry,places&callback=initMap">
</script>
</html>