I have a database which contains a list of point of interests with latitude and longitude information. This data is not from Google Places.
I would like to get the information of the opening hours of the places based on their geolocation. Is it possible to do that using Google Places API ?
I have tried using Google Maps Geocoding API to get the place_id for given geocoding and then used Google Places API Web Service for getting the detail information of the place based on the place_id. However, it does not get the opening hours.
I wonder how to get the detail of a place using geocoding ?
For example in HERE using autocomplete place search, it is able to return the detail information about the place. However when I right clicked on the marker and copied the geolocation using what's this and tried to use Google Places API Web Service to query the detail of the place, some information is missing, for example, opening hours of the place.
For example Gyeongbokgung Palace the latitude and longitude stored in database is 37.5802 and 126.977 respectively as shown in the picture, the location from Google Maps is different even though they are not that far from each other.
With the Place details you can get all details for a specific place.
function initialize() {
var map = new google.maps.Map(document.getElementById('map-canvas'), {
center: new google.maps.LatLng(0, 0),
zoom: 15
});
var service = new google.maps.places.PlacesService(map);
service.getDetails({
placeId: 'ChIJod7tSseifDUR9hXHLFNGMIs' // Gyeongbokgung Palace
}, function (place, status) {
if (status === google.maps.places.PlacesServiceStatus.OK) {
console.log(place); // Log the place object
}
});
}
Below is a complete example on how to retrieve the opening hours for the place you mentioned.
JSFiddle demo
Related
I am working on a project which requires me to find the nearest bars (pubs) within a parameter of 5 miles from the postcode (zipcode) of the user.
Is there a way to do this with Google Maps API to receive the data in an array, loop through it and them set up markers based on the lat and long received from the data?
You can find info on this particular feature of Google Maps API here:
https://developers.google.com/places/webservice/search
This web service lets you search with a keyword while specifying your position and a search radius, and returns a list of places matching those parameters in a json or xml document.
Your example would look like this:
https://maps.googleapis.com/maps/api/place/textsearch/json?key=your_api_key&query="bar"&location=lat,lon&radius=8000
You'll need to replace
your_api_key with the Google Maps API key for your application (you'll need one to use their web services)
lat,lon with the coordinates of the user, that you can find with the geocoding web service as user agmangas suggested
8000 with the actual search radius, in meters (5 miles is about 8km).
First you have to get the latitude and longitude from the zipcode of your user, this can be achieved using the Geocoding Service.
Once you have this I'd say you need to use the Places Library (disclaimer: I have never actually used it).
There's a code example under the Nearby Search section that I think more or less would fit your needs (you'd need to adapt it a bit):
var map;
var service;
var infowindow;
function initialize() {
// Replace with the latitude and longitude
// you got in a Geocoding Service request
var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);
map = new google.maps.Map(document.getElementById('map'), {
center: pyrmont,
zoom: 15
});
// Replace the place type you need ("bar")
// Replace the radius (5 miles)
var request = {
location: pyrmont,
radius: '500',
types: ['store']
};
service = new google.maps.places.PlacesService(map);
service.nearbySearch(request, callback);
}
function callback(results, status) {
if (status == google.maps.places.PlacesServiceStatus.OK) {
for (var i = 0; i < results.length; i++) {
var place = results[i];
createMarker(results[i]);
}
}
}
I am currently designing a project where I need to get the latitude and longitude of whatever city a user types in and once it is typed in, I have a button which once clicked is suppose to get the Latitude and Longitude of this city and put it in two textboxes I have set up. I am using the Google Places API and map as well in my project.
Any ideas of how I might accomplish this as I have been attempting to do this for over a week now.
Check out the google geocoding api.
I built a simple example on jsbin.
$("#city").on("change keyup", function() {
var city = $(this).val()
$.getJSON("https://maps.googleapis.com/maps/api/geocode/json?address="+encodeURIComponent(city), function(val) {
if(val.results.length) {
var location = val.results[0].geometry.location
$("#lat").val(location.lat)
$("#lon").val(location.lng)
}
})
})
You have a perfect example here
var place = autocomplete.getPlace();
if (place.geometry.viewport)
map.fitBounds(place.geometry.viewport);
else
{
map.setCenter(place.geometry.location);
map.setZoom(17); //Or any zoom level
}
Just look at the documentation
You'll have to adapt it to your need of course.
Just use the latitude and longitude given in place.geometry object returned.
I am working on JavaScript.I have places in array format like ["Chennai","Hyderabad","Bangalore",....] I want to find latitude and longitude of them .
As per I know we can I find one place details at a time using geocode.but I want to find bunch of place details.For this I read Google batch request(link) concept, I didn't understand.
I can make API request one by one but it's not a good practice.Even If I follow same way I will get limitation error from Google.
can anyone help me, How can I find latitude and longitude details.
If anyone wants to down-vote, please let me know the reason.
Thanks.
Use the Geocoder:
var geocoder = new google.maps.Geocoder();
geocoder.geocode({ address: address },
function (results, status) {
if (status === google.maps.GeocoderStatus.OK) {
var location = results[0].geometry.location;
console.log('lng: ' + location. getLng() + ', lat: ' + location.getLat());
}
});
Note that you can't do a batch request with the geocoder API. But you can use the directions api to geocode up to 8 addresses. In the business class it allows up to 24 addresses. Read about it:
https://developers.google.com/maps/documentation/javascript/directions
I have a little hacked-together web app that uses the google maps api to draw data from a database and create and display markers and associated data on an embedded map, using JSON objects. I'm accessing the api here:
http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js
I've now realized I need a search box on the map, so users search for an address and the map will shift to display their desired location. Seems like I need the Places library, I can really easily implement a search box using the code samples in the documentation. I don't care about the Places themselves or doing anything with them, just identifying the location and shifting the resetting the bounds to that desired location. So I need to access the places library, which apparently is here:
https://maps.googleapis.com/maps/api/js?libraries=places&sensor=false
BUT, my previous code (perhaps not surprisingly) breaks if I switch out the libraries. Is there any way to use both? Do I have to deal with Places is some other way because I'm already using JQuery for this app? Or is it just a problem with how I'm referring to the libraries?
Thanks! z
Simply Do this
var geocoder = new google.maps.Geocoder();
var address = document.getElementById("txtAddress").value;
var lat;
var lng;
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
lat= results[0].geometry.location.latitude;
lng =results[0].geometry.location.longitude;
}
});
map.panTo(new google.maps.LatLng(lat,lng));
map.setZoom(14);
trying to add 45 different points to a map, but I just get OVER_QUERY_LIMIT returned, and no map.
I am getting locations via a string search, then assigning the returned LatLng object to a new google Marker object
String Search
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': x}, function(results, status) {
if (status === google.maps.GeocoderStatus.OK) {
var result = results[0].geometry.location;
return result;
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
Google Geocoding is rate limited throughout the day. It's also limited by IP address. So, two possible interactions: If you're sharing an IP address with lots of other people, they may also be dragging down your quota. This is particularly true in mobile environments. Another more likely possibility is that you are running into the rate limit over the day. If you get that, pause of a second or two and try again.
You can also cache geocodes and addresses for performance purposes, and have a back-up server side geocoding service using Google's web services. That'll also be quota'd but it's a good fallback.
Consider using Google Fusion Tables for the data storage and its geocoding part- at the very least, their batch geocoding interface obeys their own internal limits.
http://support.google.com/fusiontables/bin/answer.py?hl=en&answer=1012281
How you should approach this is by geocoding the static address, if they are static and save the lat lng for further use. I don't know what to say if there not static tho.