So I tried geocode but it can only find the users location based on ip addresses but I need the exact lat and long values of the user. Btw what is the accuracy of the ip address method.
Ask the user on the client side for Geolocation permissions. You'll get the coordinates directly and you don't have to geocode anything. If the user doesn't give you the permission you shouldn't trying to locate them anyway.
Simple JS example:
var x = document.getElementById("demo");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation is not supported by this browser.";
}
}
function showPosition(position) {
// Do something with the coordinates
x.innerHTML = "Latitude: " + position.coords.latitude +
"<br>Longitude: " + position.coords.longitude;
}
More information here.
You could use the Google GeoCode API but after 2000 requests, you would need to pay for it. This works on the idea that you have the users address or even just a post code (Zip code).
In terms of detecting location from IP, pretty hard if not impossible. You can usually get a broad location (City, County or State) but not the actual house or street etc.
Related
I'm using geocoder rails gem. I want to find near banks , schools , hotels from some location.
location = Geocoder.search([48.856614, 2.3522219])
From above i can get location but not near important places.
How i can use near method of geocoder on "location" object, and find near places like hotels , schools and banks etc?
Any help?
Thanks
There is no filter or search as you describe in the Geocoder gem. You can get the nearest 10, 20, 50 other geocoded objects in your database.
So in order to make it function like you are describing you would need to Geocode each Hospital, School, Bank etc. and store them in a table, and then call nearbys on your point.
ie. Bulk geocode every Bank Listing within 500km in the location you are serving and check against that.
This method would quickly go stale and become ineffective. What you need is the Google Places API. They have a JS library you can leverage to get your results.
[Google Places JS API][1]
Text Search Requests The Google Places Text Search service is a web
service that returns information about a set of places based on a
string — for example "pizza in New York" or "shoe stores near Ottawa".
The service responds with a list of places matching the text string
and any location bias that has been set. The search response will
include a list of places. You can send a Place Details request for
more information about any of the places in the response.
I use the google api extensively and have found it remarkably easy to work with. Simply make a call to the API to retrieve an array of results for say, 'restaurant'. The example below is taken directly from the Google Developer page and will plot every restaurant in the Pyrmont area that they know about. The 'results' in the callback method will be a JSON object you can utilize with JS;
var map;
var service;
var infowindow;
function initialize() {
var pyrmont = new google.maps.LatLng(-33.8665433,151.1956316);
map = new google.maps.Map(document.getElementById('map'), {
center: pyrmont,
zoom: 15
});
var request = {
location: pyrmont,
radius: '500',
query: 'restaurant'
};
service = new google.maps.places.PlacesService(map);
service.textSearch(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 have seen previous posts regarding the conversion from a Google Place ID to an address; however I am interested in the opposite.
I have the GMS Address of the desired location but I want to acquire the Google Place ID in order to present more details to the user. From what I have seen on Google's iOS API website, you can attain a Google Place ID from an Autocomplete feature (for user searching), a selected location feature, or a current location feature.
My application intends to display multiple locations in which I already have the addresses for. The user can select individual locations for more details in addition to receiving details upon arrival. Therefore the features listed above are not ideal.
I have also tried using Google's Web API with features such as "Text Search Requests" & "Nearby Search Requests" however I am receiving "Zero Results".
Are there other methods that I haven't thought of and/or seen?
How about the Place ID finder in the Google Maps JavaScript API.
A place ID is a textual identifier that uniquely identifies a place. It is also available for most locations, including businesses, landmarks, parks, and intersections. These IDs are stable, meaning that once you've identified the place ID for a place, you can reuse that value when you next look up that place.
You can use the same place ID across the Google Places API and a number of Google Maps APIs. For example, you can use the same place ID to reference a place in the Places API, the Google Maps JavaScript API, the Google Maps Geocoding API, the Google Maps Embed API and the Google Maps Roads API.
Here is the sample code use for this.
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: {lat: -33.8688, lng: 151.2195},
zoom: 13
});
var input = document.getElementById('pac-input');
var autocomplete = new google.maps.places.Autocomplete(input);
autocomplete.bindTo('bounds', map);
map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
autocomplete.addListener('place_changed', function() {
infowindow.close();
var place = autocomplete.getPlace();
if (!place.geometry) {
return;
}
if (place.geometry.viewport) {
map.fitBounds(place.geometry.viewport);
} else {
map.setCenter(place.geometry.location);
map.setZoom(17);
}
// Set the position of the marker using the place ID and location.
marker.setPlace({
placeId: place.place_id,
location: place.geometry.location
});
marker.setVisible(true);
infowindow.setContent('<div><strong>' + place.name + '</strong><br>' +
'Place ID: ' + place.place_id + '<br>' +
place.formatted_address);
infowindow.open(map, marker);
});
}
Just take note that this example requires the Places library. Include
the libraries=places parameter when you first load the API. For
example:
script src="https://maps.googleapis.com/maps/api/jskey=YOUR_API_KEY&libraries=places"
I'm trying to make a website thats simply shows your location and how you get to the location where you want to go.
To get my current location im using this code i found here on stack:
// Get the coordinates
navigator.geolocation.getCurrentPosition(show_map);
function show_map(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
// post to your controller
var url = "/Home/Index?latitude=" + latitude + "&longtitude=" + longitude;
$.post(url, function(data) {
});
}
I've breakpointed it and it does give me the coordinates for position.
But my problem is, how do I show how to get to point B(Point B will be hardcoded coordinates)?
I've looked into Google Directions API aswell as Distance Matrix API, and for a newbie like me the I find the documentation quite hard to understand. I'm trying to do this in an MVC 6 project, am I approaching this the wrong way? Should i keep looking at Google Directions API?
This can all be performed client side via the Google Maps API and their Direction Service. Have you seen this -> https://developers.google.com/maps/documentation/javascript/examples/directions-simple
i want to get the user location information like city, area etc using html5 geolocation,i tried the below article but with that im getting latitude and longitude, i want to get the city and area information,
http://www.dotnetcurry.com/ShowArticle.aspx?ID=782
When you have the location of the user, you'll need to do a reverse geocoding to get information about the location such as city, etc.
Have a look at the reverse geocoding API for Google Maps.
navigator.geolocation.getCurrentPosition(function(pos){
var latlng = new google.maps.LatLng(pos.coords.latitude, pos.coords.longitude);
geocoder.geocode({'latLng': latlng}, function(results, status) {
console.log(results);
// Analyze results and find the info you need.
});
});
Check out How to reverse geocode without Google for information about geocoding without using Google Maps.
I am new to html 5 geolocation, Is there any site or examples where it shows how, i can use html geolocation api to track the location of other devices. Also, for example how can i use use HTML5 geolocation to find the nearest car dealer say 5 or 10 miles from me?
Any examples sample would be really helpfull.
thanks
I can't speak to tracking devices, but i've been writing something that might help with the second part of your question.
//check browser support
if(navigator.geolocation) {
//do the geolocation stuff
navigator.geolocation.getCurrentPosition(function(position) {
//make a string out of the coordinates
var initloc_str = position.coords.latitude + ', ' + position.coords.longitude;
//pass it to a function that searches for donut shops near the coordinates
donutSearch(initloc_str);
});
} else { // if no browser support, error message or whatever
My donut shop search function is based on the local search in Google's Ajax search API, I found this article on webmonkey helpful for that bit. That API was recently deprecated but I haven't figured out how to do local search with their new Custom Search API yet.
You can register a function for tracking positions of a user:
var watchId = navigator.geolocation.watchPosition(function(position) {
console.log(position.coords.latitude);
console.log(position.coords.longitude);
});
And you can unregister:
navigator.geolocation.clearWatch(watchId);
This site will give you a awesome overview of the HTML5 geolocation Capability.