PHP: Адрес внутри/за МКАД, расстояние от МКАД, API Яндекс карт

Очередная задача по доработке OpenCart сайта.

В этот раз мне надо было подключить доставку курьером по Москве с фиксированной стоимостью доставки внутри МКАД и ставкой за каждый км. вне МКАД.

Я бы мог купить модуль за 200-500 рублей, но на сайте используется кастомная checkout форма и мне бы всеравно пришлось потратить время чтобы подружить их между собой.

Поэтому я решил написать свой модуль, который потом смог бы использовать в дальнейшем.

Как всегда The Google приходит на помощь. Небольшой поиск вывел меня на вот эти ссылки:

http://habrahabr.ru/post/127446/ - API Яндекс.Карт: Адрес внутри/за МКАД, расстояние от МКАД (JavaScript версия)

http://habrahabr.ru/sandbox/56203/ - Работа с Яндекс.Картами на C#, через Яндекс.API

http://www.movable-type.co.uk/scripts/latlong.html - Calculate distance, bearing and more between Latitude/Longitude points

В результате вышел гибрид из всех трех ссылок на php. В мини-библиотеке есть три класса YApi, YApiPolygon, YApiPoint с дополнительными методами. В конечном счете все сводиться к одному методу YApi->CheckMkad, который возвращает массив с результатом { point, closest_point, is_mkad, distance }, названия говорят сами за себя.

Библиотеку можно подключить в OpenCart поместив файл в папку system\library.

Простейший пример использования для OpenCart

  • Скачайте библиотеку и поместите в папку /system/library/
  • Скачайте файл testyapi.php и поместите в папку /catalog/controller/common/
  • Откройте страницу /index.php?route=common/testyapi и получите результат проверки адреса.
  • Откройте файл testyapi.php и посмотрите код, он совсем прост.
  • Оставьте мне комментарий.

 

Views: 5896 Comments: 4
danx on 14 June 2014 11:48 says

отлично! а как пользоваться? :)

Const on 14 June 2014 12:01 says

danx, hello. I am using my cellphone, unable to type Russian. Please, download the example in testyapi.php.zip file and take a look. Feel free to ask me via email if you still have any questions.

Alexey on 21 February 2017 09:23 says

Отличная работа, спасибо! Искал такое решение.

George on 25 May 2017 01:57 says

Чел, большое человеческое тебе спасибо!!!!!