Здраствуйте. Пытаюсь написать работу в универ с помощью яндекс карт. Не могу разобраться с геокодером. Мне нужно посчитать количество домов вокруг заданного адреса. Для простоты я беру окружность радиусом 500 метров, разбиваю ее на 8 секторов и считаю дома в диагонали каждого сектора. Проблема в том что могу посчитать количество только в том который обрабатываю первым. Я думаю что не до конца разобралась с геокодером. Помогите пожалуйста найти ошибку. И еще не могу придумать как сохранять адреса только с домами. Буду благодарна за любую помощь.
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script src="http://api-maps.yandex.ru
<script type="text/javascript">
kolDomov = new Array(8); //количество домов в каждом секторе
var indexKolDom = 0; //номер сектора
spisDomovI = new Array(50); //список адресов в одном секторе
var flag = 0,
radius = 0,
x = 0,
y = 0;
var dom;
YMaps.jQuery(function () {
var map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]),
geoResult; // Результат поиска
map.setCenter(new YMaps.GeoPoint(39.31, 48.57), 13); // Установка для карты ее центра и масштаба
map.enableScrollZoom();
map.addControl(new YMaps.ToolBar());
map.addControl(new YMaps.Zoom());
var mysearchBounds = new YMaps.GeoBounds(new YMaps.GeoPoint(39.17523, 48.462364), new YMaps.GeoPoint(39.448515, 48.668955)); //ограничила поиск Луганском
// Поиск по нажатию Enter в поисковом поле
YMaps.jQuery("#first").bind("keyup", function (e) {
if (e.keyCode == 13) {
poisk();
}
});
YMaps.jQuery("#poisk").bind("click", poisk); // Поиск по щелчку на кнопке "Искать"
// Запускаем поиск
function poisk() {
var geocoder = new YMaps.Geocoder(YMaps.jQue
boundedBy: mysearchBounds,
strictBounds: true,
prefLang: "uk"
});
//var geocoder = new YMaps.Geocoder(YMaps.jQue
var listenerLoad = YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
// Если результа геокодирования был добавлен на карту, то удалим его
if (geoResult) {
map.removeOverlay(geoResult);
}
if (geocoder.length()) {
// Отображаем первый релевантный результат геокодирования
geoResult = geocoder.get(0);
map.addOverlay(geoResult);
geoResult.openBalloon();
x = Number(geoResult.getGeoPoint().getLng()); //сохраняем координаты магазина
y = Number(geoResult.getGeoPoint().getLat());
} else {
alert("По вашему запросу ничего не найдено.");
}
listenerLoad.cleanup();
});
}
YMaps.jQuery("#doma").bind("click", doma); //функция по нажатию кнопки Dom
function doma() {
for (indexKolDom = 0; indexKolDom < 8; indexKolDom++) //переюираем по очереди каждую диагональ сектора
{
if (indexKolDom == 0)
raschet(2, 5, indexKolDom); //передаем коэффициенты увеличения первой диагонали и номер по порядку
else if (indexKolDom == 1)
raschet(5, 2, indexKolDom); //передаем коэффициенты увеличения второй диагонали и номер по порядку
else if (indexKolDom == 2)
raschet(5, -2, indexKolDom); //передаем коэффициенты увеличения третей диагонали и номер по порядку и т.д.
else if (indexKolDom == 3)
raschet(2, -5, indexKolDom);
else if (indexKolDom == 4)
raschet(-2, -5, indexKolDom);
else if (indexKolDom == 5)
raschet(-5, -2, indexKolDom);
else if (indexKolDom == 6)
raschet(-5, 2, indexKolDom);
else if (indexKolDom == 7)
raschet(-2, 5, indexKolDom);
}
}
function raschet(indX, indY, indexKolDom) //функция считает количество домов в диагонали
{
var _x = x; //координаты диагонали
var _y = y;
var indexDom = 0; //переменная сохраняет количество не повторяющихся адресов
while (radius <= 0.005) //условие диагональ длиной 500 метров
{
_x += 0.0001 * indX; //изменяем координаты точек на диагонали для поиска домов
_y += 0.0001 * indY;
radius = Math.sqrt(Math.pow(_x - x, 2) + Math.pow(_y - y, 2)); //высчитуем расстояние от данного дома до следующей точки
var geocoder = new YMaps.Geocoder(new YMaps.GeoPoint(_x, _y), {
boundedBy: mysearchBounds,
strictBounds: true,
prefLang: "uk"
});
var listenerLoad = YMaps.Events.observe(geocoder, geocoder.Events.Load, function (geocoder) {
var geoResultNew;
if (geoResultNew) {
map.removeOverlay(geoResult);
}
if (geocoder.length()) {
// Отображаем первый релевантный результат геокодирования
geoResultNew = geocoder.get(0);
map.addOverlay(geoResultNew);
dom = geoResultNew.text;
for (var i = 0, flag = 0; i < 50; i++) {
if (spisDomovI[i] == dom) flag++; //проверяем повторяющиеся адреса
}
if (flag == 0) {
spisDomovI[indexDom] = dom;
indexDom++;
}
//alert(indexDom);
//alert(doma);
} else {
alert("По вашему запросу ничего не найдено.");
}
listenerLoad.cleanup();
kolDomov[indexKolDom] = indexDom; //записываем количество домов в диагонали
});
}
}
})
function Mass() //функция выводит количество домов в диагоналях
{
alert(kolDomov[0] + " - " + kolDomov[1] + " - " + kolDomov[2] + " - " + kolDomov[3] + " - " + kolDomov[4] + " - " + kolDomov[5] + " - " +
kolDomov[6] + " - " + kolDomov[7]);
}
</script>
</head>
<body>
<table>
<tr>
<td>
<label>Введите адрес</label>
<input type="text" id="first" value="39.31, 48.57"></input>
</br>
</br>
<input id="poisk" type="button" value="Искать" />
<input id="mass" type="button" value="massiv" onclick="Mass()" />
<input id="doma" type="button" value="Dom" />
</td>
<td>
<div id="YMapsID" style="width:800px;height:500px"></div>
</td>
</tr>
</table>
</body>
</html>