Клуб API Карт

Все время есть результат найденного (от чайника)

A1istaM
6 ноября 2009, 12:03

Здраствуйте, при выполнении скрипта вида все время выдает мне что result=1, и чаще всего так и есть, но некоторые адреса которые я ввожу бывают не найдены в базе ya карт, но результат все равно как будто бы найден. Как сделать так чтобы если результат не найден то выдавало бы сообщение? сам код:


<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Яндекс.Погода</title>
<meta http-equiv="X-UA-Compatible" content="IE=7"/>
<script src="http://api-maps.yandex.ru/1.0/index.xml?key=XXXXXXXXXXXXXXXXXX" type="text/javascript"></script>
<script type="text/javascript">
    var map, geoResult;

        window.onload = function init () {
            map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(38.98797,45.068881), 1000);
            var typeControl = new YMaps.TypeControl();
            map.addControl(typeControl);
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.MiniMap());
            map.addControl(new YMaps.ScaleLine());
            showAddress('Краснодарский край, город Краснодар,ул. ХХХХ, дом ХХХ');
        }
        function showAddress (value) {
            map.removeOverlay(geoResult);
            var geocoder = new YMaps.Geocoder(value, {results: 1, boundedBy: map.getBounds()});
            YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {      

                if (this.length()) {
                    geoResult = this.get(0);
                    map.addOverlay(geoResult);
                    map.setBounds(geoResult.getBounds());
                  //  alert(geoResult);
                }else {
                   alert("Ничего не найдено")

               }
            });
        }
    </script>
</head>
<body>
        <div id="YMapsID" style="width:800px;height:600px"></div>
<body>

________________________________________________________________________

или какими параметрами можно сравнивать что метка стоит на 38.98797,45.068881, и если результат на этой метке то выводить ошибку.

22 комментария
Подписаться на комментарии к посту
Не могли бы Вы написать примеры поисковых запросов, которые " не найдены в базе ya карт, но результат все равно как будто бы найден"?
возможно я не совсем корректно выразился...например если ввести
"Краснодар, Пропеножная,,3 " результат выводит город краснодар, улицы впринципе нет но в результат выводится сам город  :)  вот мне нужно отловить этот момент когда введенной улицы не существует, ну или какая то другая загвоздка (типа вдух запятых) чтобы либо ничего не показывал, либо выкидывал сообщение о том что ненайдено.
Ориентируйтесь на поля kind и precision, чтобы понять точность найденного объекта.
спасибо, еще один вопрос:
               

// Создание обработчика кликов по карте
                listener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
                    // Выключаем обработчиков событий, чтобы к геокодеру ушло не более одного запроса
                    // (по окончанию геокодированияю включаем обработчик вновь)
                    listener.disable();

                    // Координаты клика мышью
                    var clickPoint  = mEvent.getGeoPoint();
                                             
____________________________________________________
хочу найденный результат загонять в базу 1С, передавать его хочу через txt файл, каким образом переменную clickPoint можно записать в test.txt файл? или лучше делать это каким либо другим методом?
пытался  как
fso = new ActiveXObject("Scripting.FileSystemObject");
tf = fso.CreateTextFile("c:\\testfile.txt", true);
но почему то не получается....в java я чайник.
Если Вам необходимо прогеокодировать список координат и записать их в файл или базу данных, то лучше воспользоваться http-геокодером. Тогда все можно сделать на серверной стороне.

Если же необходимо записывать данные именно со стороны клиента, то данные необходимо отправлять с помощью асинхронного запроса на сервер. Для этих целей можете воспользоваться встроенным в API фреймворком jQuery.
координаты то я получаю нормально в этой обработке:
// Создание обработчика кликов по карте
                listener = YMaps.Events.observe(map, map.Events.Click, function (map, mEvent) {
                    // Выключаем обработчиков событий, чтобы к геокодеру ушло не более одного запроса
                    // (по окончанию геокодированияю включаем обработчик вновь)
                    listener.disable();

                    // Координаты клика мышью
                    var clickPoint  = mEvent.getGeoPoint();
(часть более большого кода взятого с сайта)
например если я в этом месте поставлю
 alert(clickPoint);
то выскакивает сообщение с правильными координатами. подскажите каким образом записать эти координаты в txt файл :)
и еще:

как правильно использовать AddressDetails (из самой первой записи в топе)?  что то типа:
if (this.length()) {
                    geoResult = this.get(0);
                    map.addOverlay(geoResult);
                     if (AddressDetails.Premise(House)=0)
                                               {
                                                       alert("Ничего не найдено")
                                                   }
                    map.setBounds(geoResult.getBounds());
                }else {
                    alert("Ничего не найдено")
                }
 AddressDetails - это поле объекта класса YMaps.GeocoderResult.

Вам нет необходимости смотреть поле AddressDetails, хватит полей kind и precision, о которых я говорил выше.
подскажите как их правильно использовать? ни одного примера не могу найти
Например, вот так:
var geocoder = new YMaps.Geocoder("Москва");

YMaps.Events.observe(geocoder, geocoder.Events.Load, function () {
    if (this.length()) {
        // Выведет название страны, в которой расположен найденный объект
        alert(this.get(0).AddressDetails.Country.CountryName);
    }else {
        alert("Ничего не найдено")
    }
});
спасибо, но каким образом использовать если я хочу допустим улицу получить, или дом?
alert(this.get(0).AddressDetails.Country.Locality.LocalityName);
ничего не выдает
alert(this.get(0).AddressDetails.Locality.LocalityName);
тоже молчит. в чем моя ошибка?
понял как использовать kind:
alert(this.get(0).kind);
спасибо =)
Нужно так:
alert(this.get(0).AddressDetails.Country.Locality.LocalityName);
ничего не пойму, я так пробовал и ничего не выдавало. привожу полный код:



Яндекс.Погода





       
а если поставить alert(this.get(0).kind) вместо
alert(this.get(0).AddressDetails.Country.Locality.LocalityName);
то выдает все как и должно - house
но если сделать такую конструкцию:
if (this.get(0).kind = house) 
{
                                      alert (" все найдено");
}
else
{
alert ("ниче не найдено");
}
_________________________________________________
то опять ничего..... в чем может быть дело?
p.s. пробую в IE 8 и Firefox 3.5.5
правильно писать:
if  ("this.get(0).kind=house")
так работает :)
Я показал пример получения доступа к AddressDetails на примере Москвы.
В Вашем случае объект Locality вложен в объект AdministrativeArea.

Изучайте спецификацию xAL для получения более полной информации.
спасибо =) оказалось достаточно вот такой конструкции: при ней все правильно отображается =)
  if  (this.get(0).kind=="house") {
                                                          map.setBounds(geoResult.getBounds());        
                                                        }
                                                                      else
                                                       {
                                                                         alert("Извините, но заданным параметрам ничего не найдено");
                                                        }
                                                              
                                       }
JavaScript не умеет записывать информацию в файлы. Если Вы хотите сохранять координаты, полученные из JavaScript в текстовый файл, то Вам необходимо отсылать координат с помощью ajax на сервер и там уже сохранять.
// Координаты клика мышью
var clickPoint  = mEvent.getGeoPoint();

// Отправляем данные на сервер
YMaps.jQuery.post("адрес серверного скрипта", {coords : clickPoint.toString()});
На серверной стороне можно получить координаты следующим образом:
// Фрагемент серверного скрипта (на языке PHP)
    // Координаты получаем из супреглобального массива $_POST
    $coords = $_POST["coords"];
?>
а есть ли возможность
// Координаты клика мышью
var clickPoint  = mEvent.getGeoPoint();
 вместо запроса:
// Отправляем данные на сервер
YMaps.jQuery.post("адрес серверного скрипта", {coords : clickPoint.toString()});
копировать clickPoint в буфер обмена? для дальнейшего использования.