Как найти ближайший магазин, который мы поместили с маркером в Google Maps?
Позвольте мне немного объяснить проект. У нас огромный список магазинов с адресами. Каждый из этих адресов в базе данных имеет географическое местоположение.
Теперь мой вопрос: когда пользователь вводит свой адрес, почтовый индекс и т. Д., У нас есть его местоположение и его географическое местоположение, можно ли найти ближайший магазин на картах Google на основе местоположения пользователя. Если не через географическое местоположение, то, возможно, на основе почтового индекса?
Я заглянул в API Google Maps, но не нашел что-то для этого. Важно то, что он ищет в магазинах, которые мы добавили на Google Maps. Я предпочитаю не использовать карты Google, а только: http://maps.googleapis.com/maps/api/geocode/json?
И если это возможно, тогда мы можем оставить карты Google вне этого, но просто искать в базе данных на основе географического местоположения, что было бы еще лучше.
Тогда единственный вопрос, как вы делаете сопоставление на основе географического местоположения или чего-то еще? Вы просто проверяете, кто из них меньше или больше, или есть что-то большее, чем сравнивать два?
Было бы очень хорошо, если бы кто-нибудь мог дать мне хороший совет, как это сделать.
2 ответа
Прежде всего используйте карту и попросите пользователя установить его приблизительное местоположение, получить эти значения, с помощью этого кода получить расстояние до каждого магазина:
google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);
со https://developers.google.com/maps/documentation/javascript/reference?hl=en-US
Теперь выберите более короткий и выведите его
но я бы лучше попросил его ввести Город и узнать расстояние через запрос API Wolfram.
$city=customer_city;
$north=store_north; //coordinate_l
$west=store_west; //coordinate_L
$wolfram_query="http://api.wolframalpha.com/v2/query?appid=".$appid."&input=distance%20from%20".$city."%20to%20".$north."N%20".$west."W%20in%20km&format=image,plaintext";
и получить расстояние от XML-ответа, оставляя карты Google вне
другой вариант, использующий почтовые индексы, состоит в том, чтобы вычислить сферическое расстояние из двух координат с помощью этой функции php внутри цикла while, проходящего через все широты и долготы язв:
function calcDist($lat_A, $long_A, $lat_store[i], $long_store[i]) {
$distance = sin(deg2rad($lat_A))
* sin(deg2rad($lat_B))
+ cos(deg2rad($lat_A))
* cos(deg2rad($lat_B))
* cos(deg2rad($long_A - $long_B));
$distance = (rad2deg(acos($distance))) * 69.09;
return $distance;
}
расстояние в милях, если вы хотите расстояние в км, используйте это
function miles2kms($miles) {
$ratio = 1.609344;
$kms = $miles * $ratio;
return $kms;
}
и вы можете получить последний и длинный почтовый индекс, используя эту базу данных: http://sourceforge.net/projects/zips/files/ или этот http://postcodedb.sourceforge.net/dumpCSV.php
чтобы улучшить результат расстояния, вы должны использовать расчеты Haversine или Vincenty... которые немного сложнее..
... но нам нравится в сети то, что кто-то наверняка сделал это раньше, чем мы, и, конечно, поделился своими усилиями! http://www.phpclasses.org/package/6480-PHP-Calculate-the-distance-between-Earth-two-points.html это класс, который реализует расстояние хаверсин! это может быть лучше... если вы хотите использовать Vincenty, попробуйте это: реализуя формулу Vincenty в PHP, попробуйте, какой из них даст вам лучшие результаты, даже если наиболее точным всегда будет вольфрам, математики работали над этим, так что это работает довольно Что ж;)
Когда вы говорите "Географическое положение", какая конкретная информация у вас есть о местоположении? Я сделал нечто подобное, используя координаты (широта и долгота) объекта и большую коллекцию координат близлежащих достопримечательностей. Поскольку широта и долгота (в десятичном формате) являются просто... десятичными числами, то это одно уравнение, позволяющее рассчитать, какая точка ближе всего к другой, найдя наименьшее различие между значениями широты и долготы.
Это становится намного сложнее, если, например, вы хотите учесть время в пути между точками, но для простых приложений сравнение координат должно быть адекватным.