Вы можете сделать Каркарту частью Вашего бизнеса. Для этого воспользуйтесь следующим программным интерфейсом (API):

- расчёт маршрута между несколькими адресами (функция route.get)
- ранжирование объектов по расстоянию (функция nearest.get)

С вопросами обращайтесь по адресу info@helion.ru

Расчёт маршрута между несколькими адресами

Чтобы рассчитать маршрут между адресами, отправьте POST-запрос http://www.carkarta.ru/msg.ashx?a=route.get с параметрами

Параметр Назначение Обязательный Значение по умолчанию
addresses перечень адресов, в одной строке один адрес да
OutputRoute нужно ли возвращать точки маршрута
возможные значения: 0 и 1
нет 0
FindOptimalMultiRoute нужно ли искать оптимальный маршрут между всеми адресами
возможные значения: 0 и 1
нет 0
FindOptimalMultiRoute_Return нужно ли возвращаться в начальный адрес
возможные значения: 0 и 1
нет 0

Результат будет возвращён в json-формате

{
    "route": {
        "points": [gps1, gps2, ..., gpsN]
        , "placemarks": [
            {"pt": gps, "nm": адрес1},
            ...,
            {"pt": gps, "nm": адресN} ]
        , "dist": расстояние
        , "time": время
    }
}

где

gps(i) - массив вида [широта,долгота]
адрес(i) - адрес пункта маршрута, приведённый к стандартному виду
расстояние - общее расстояние по маршруту, в метрах
время - общее время по маршруту, в секундах

Пример

C#


HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.carkarta.ru/msg.ashx?a=route.get");
req.UserAgent = "CarkartaUser";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";

string[] adrs = new string[3] { "Менделеева 137", "Проспект Октября 4", "Жукова 29" };
string data = "addresses=";
foreach (string adr in adrs)
    data += adr + "\r\n";
data += "&FindOptimalMultiRoute=1&FindOptimalMultiRoute_Return=1";

byte[] bytes = Encoding.UTF8.GetBytes(data);
req.ContentLength = bytes.Length;
Stream sendStream = req.GetRequestStream();
sendStream.Write(bytes, 0, bytes.Length);
sendStream.Close();

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader myStreamReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
string res = myStreamReader.ReadToEnd();
Будет построен оптимальный маршрут между тремя адресами. Маршрут начнётся с адреса "Менделеева 137", остальные адреса будут посещены в оптимальном порядке, маршрут заканчивается в стартовой точке.
Результат

{"route":{"points":[[54.712592,55.993713],[54.712834,55.994807],[54.713308,55.996812],[54.715033,55.995118], ...
[54.712834,55.994807],[54.712592,55.993713]],"placemarks":[{"pt":[54.712794,55.992376],"nm":"Менделеева, 137"},{"pt":[54.74122,55.987457],"nm":"Проспект Октября, 4"},{"pt":[54.770516,56.057028],"nm":"Жукова, 29"},{"pt":[54.712794,55.992376],"nm":"Менделеева, 137"}],"dist":"20400","time":"1740"}}

Ранжирование объектов по расстоянию

Чтобы упорядочить объекты по возрастанию расстояния от или до некоторой точки, отправьте POST-запрос http://www.carkarta.ru/msg.ashx?a=nearest.get с параметрами

Параметр Назначение Обязательный Значение по умолчанию
apoint перечень адресов, в одной строке один адрес
если точка задана gps-координатами, следует указывать [lat lng]
да
bpoints перечень адресов, в одной строке один адрес
если точка задана gps-координатами, следует указывать [lat lng]
да
direction ab - упорядочить по возрастанию от точки, ba - до точки
возможные значения: ab и ba
нет ab
topn количество записей, которое нужно вернуть
0 - вернуть все записи
нет 0

Результат будет возвращён в json-формате

{
    "route": {
        "points": []
        , "placemarks": [
            {"value": входящий_адрес1, "pt": gps, "nm": адрес1, "dist": "расстояние1", "travel_time": "время1"},
            ...,
            {"value": входящий_адресN, "pt": gps, "nm": адресN, "dist": "расстояниеN", "travel_time": "времяN"} ]
        , "dist": "0"
        , "time": "0"
    }
}

где

входящий_адрес(i) - переданный адрес пункта маршрута
gps(i) - массив вида [широта,долгота]
адрес(i) - адрес пункта маршрута, приведённый к стандартному виду
расстояние(i) - расстояние от/до точки, в метрах
время(i) - время от/до точки, в секундах

Пример

C#


HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.carkarta.ru/msg.ashx?a=nearest.get");
req.UserAgent = "CarkartaUser";
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";

string apoint = "[54.695854 55.997516]";
string[] adrs = new string[3] { "Менделеева 137", "Проспект Октября 4", "Жукова 29" };
string data = "apoint=" + apoint + "&bpoints=";
foreach (string adr in adrs)
    data += adr + "\r\n";
data += "&direction=ab&topn=2";

byte[] bytes = Encoding.UTF8.GetBytes(data);
req.ContentLength = bytes.Length;
Stream sendStream = req.GetRequestStream();
sendStream.Write(bytes, 0, bytes.Length);
sendStream.Close();

HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
StreamReader myStreamReader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8);
string res = myStreamReader.ReadToEnd();

Будут возвращены 2 адреса, ближайших к точке [54.695854 55.997516]. Адреса упорядочены по возрастанию расстояния до них.
Результат

{"route":{"points":[],"placemarks":[{"value":"Менделеева 137","pt":[54.712794,55.992376],"nm":"Менделеева, 137","dist":"2460","travel_time":"487"},{"value":"Проспект Октября 4","pt":[54.74122,55.987457],"nm":"Проспект Октября, 4","dist":"6520","travel_time":"984"}],"dist":"0","time":"0"}}
© 2005-2007 map.helion.ru, 2007-2015 carkarta.ru