Клуб API Карт

Выбрать метку и отправить координаты в php скрипт

nikolaj.sp
6 января 2014, 12:54

Привет всем. У меня возникла проблема ка передать координаты на обработку в php скрипт. Помогите, пожалуйста, вот что я использую

<script type="text/javascript">
ymaps.ready(function () {
var map = new ymaps.Map('YMapsID', {
center: [ymaps.geolocation.latitude, ymaps.geolocation.longitude],
zoom: 10,
type: 'yandex#map',
behaviors: ['default', 'scrollZoom']
});

new RegionSelector(map, data, $('#regions'), $('#cities'));
});
</script>

Этот скрипт из примера выбора по городам.

Не знаю поможет это я нашел в какой то примере я просто не понимаю как это работает

_loadData: function (coords) {
$('#res').html('<div align="center" ID="red_sec" ><img alt="Идет обработка запроса ..." src="/skins/images/avtorization/loader-bar.gif"></div> <div align="center" ID="red_sec" >Пожалуйста, подождите пока не будет определен Ваш адрес...</div>');
  $("#res").load("http://test1.ru/skins/tpl/order/addmetki.php", {
lat : coords[0].toPrecision(6),
lon : coords[1].toPrecision(6)
});
}

Помогите, пожалуйста.

10 комментариев
Подписаться на комментарии к посту

 

 я просто не понимаю как это работает

http://api.jquery.com/jQuery.ajax/

ну вот как-то так например:


    Test
   
   
   




   


на стороне php скрипта
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')
{            
  //все принятые скриптом параметры попадают в массив $_GET   
  $lat=$_GET['lat'];
  $lon=$_GET['lon'];
  ......

//что-то делаем с координатами, например, записываем в БД

........
  //если все нормально, возвращаем ответ карте
  $json='{"status":"OK"}';
  echo $json;
}

Огромное спасибо Yulka, я Вас попрошу еще раз мне помочь с похожей проблемой передачи данных бд в yandex карты. Я нашел пример вывода меток с меню http://ymapsapi.ya.ru/replies.xml?item_no=926. Он прекрасно работает, но вот только мне надо выводить эти метки из бд. Вообще в интернете я нашел пример, как выводить метки на yandex карту, но здесь еще надо все подключить, что бы меню работало. Помогите пожалуйста. Вот Вам в помощи со стороны php 


include("bd.php");

header('Content-Type: text/html; charset=utf-8');
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {

$town = $_GET['town'];

$query1= "SELECT * FROM mvideo_shops where town='$town' ORDER BY address";
$result1 = mysql_query($query1);

if(mysql_num_rows($result1)>0)
{
while ($par1 = mysql_fetch_array($result1)){
if($par1['id_cat']==1){$id_cat='twirl#nightStretchyIcon';}
else{$id_cat='twirl#orangeIcon';}

$addressshop[] = array("id"=>$par1['id'],

"town" => $par1['town'],

"address" => $par1['address'],

"lat" => $par1['lat'],

"lon" => $par1['lon'],

"id_cat" => $par1['id_cat'],

"name_cat" => $par1['id_cat'],

"rrab" => $par1['grafrab']);

}

$json = json_encode($addressshop);


echo $json;

}

}


?>

address хранит адрес метки буквами 

name_cat хранит название категории, к которой относится метка с адресом. Большое спасибо за ответ

Ну тут несколько разнородные скрипты - в том плане, что разная структура данных.

В примере http://dimik.github.io/ymaps/examples/group-menu/menu01.html (который открывается в приведенной вами ссылке), ответ сервера сгруппирован по категориям, а внутри него список достопримечательностей. В тексте php скрипта группировок нет, список линеен, поэтому просто так в пример его не вставит - надо либо оттуда убирать обработку категорий, либо в php скрипт добавлять уровни группировки.  Ну, это лирика.

Если конкретно, то для того чтобы в чудесный пример menu01.htmlвнедрить данные с сервера, надо сделать две вещи: а) убрать включение скрипта

<script src="groups.js" type="text/javascript">script> поскольку он формирует набор данных на стороне клиента
б) после строки var menu = $('
    '); вставить запрос данных с сервера
    $.getJSON("http://adres_servera/askdata.php",{town:"Moscow"}, function(groups){
    оборачивая им все манипуляции с построением меню и рисованием меток (т.е весь нижележащий текст до конца init() )
groups таким манером возьмутся не из скрипта groups.js, а поступят в качестве ответа сервера (про то, что структуру этих данных надо привести к нужному стандарту, я уже говроила выше)
перед скобкой, закрывающей function init() не забыть поставить }), закрывающие $.getJSON
На пальцах как-то так :)

У меня не вышло почему-то, Выводит одну метку на карту вот php который я использую


include("ajax_config.php");

header('Content-Type: text/html; charset=utf-8');

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
$addressshop= array(array ("name"=>"извесные памятники",
'preset'=>'twirl#redIcon',
'style'=>'important',
'items'=>array ( array ('center'=> '[50.426472, 30.563022]', 'name'=> 'Монумент "Родина-Мать"'),
array ('center'=> '[50.45351, 30.516489]', 'name'=> 'Памятник Богдану Хмельницкому'),
array ('center'=> '[50.45351, 30.516489]', 'name'=> 'Арка Дружбы народов')
)
),
array ('name'=>'Покушайки',
'preset'=>'twirl#greenIcon',
'style'=>'success',
'items'=>array ( array ('center'=> '[50.50955, 30.60791]', 'name'=> 'Ресторан "Калинка-Малинка"'),
array ('center'=> '[50.429083, 30.521708]', 'name'=> 'Бар "Сало-бар"')
)
),
array ('name'=>'Оригинальные музейчики',
'preset'=>'twirl#orangeIcon',
'style'=>'warning',
'items'=>array ( array ('center'=> '[50.443334, 30.520163]', 'name'=> 'Музей грамзаписи и старинных музыкальных инструментов'),
array ('center'=> '[50.446977, 30.505269]', 'name'=> 'Музей истории медицины или Анатомический театр')
)
),
array ('name'=>'Красивости',
'preset'=>'twirl#blueIcon',
'style'=>'info',
'items'=>array ( array ('center'=> '[50.45987, 30.516174]', 'name'=> 'Замок Ричарда-Львиное сердце'),
array ('center'=> '[50.445049, 30.528598]', 'name'=> '"Дом с химерами"')
)
));

$json = json_encode($addressshop);


echo $json;


}

?>

а вот html


http://www.w3.org/1999/xhtml">

Примеры. Создание меню для отображения коллекций геообъектов.













Создание меню для отображения коллекций геообъектов (из исходного массива данных)












насколько я восстановила ситуацию у себя, проблема в синтаксисе на стороне php скрипта.

Вы пишете:

array ('center'=> '[50.45351, 30.516489]', 'name'=> 'Памятник Богдану Хмельницкому'),

на сторону клиента координаты прибывают в виде строки, в которой содержатся цифры и скобочки, а вовсе не массива, как надо.

поэтому везде, где идут коорджинаты точки надо переписать

array ('center'=> array(50.45351, 30.516489), 'name'=> 'Памятник Богдану Хмельницкому')

кроме того, при вызове запроса json писать {town:"Moscow"} в вашем случае совершенно необязательно, я поставила это в примере, потому что тот php ждал в качестве входящего параметра город. У вас ничего подобного нет, поэтому можно просто пустые фигурные скобки поставить

 

Точно все работает, огромное спасибо Yulka, насчет города мне надо будет его использовать. Хочу сделать выбор региона из селектов в тот же пример, который Вы мне помогли сделать. Вот рабочий пример http://ymapsapi.ya.ru/replies.xml?item_no=306 . Он очень похож на предыдущий, который Вы мне помогли сделать. В нем то же есть отдельно массив, но выходит, так что в массив надо заносить все города и регионы, а это очень большие объемы информации. Можно ли каким-нибудь образом подключить это к зависимым спискам, которые по частям выбирают данные из БД. Для примера я Вам приведу скрипт зависимых списков на ajax, который я хотел бы использовать и уже заточил на выборку из БД.
Вот так выглядят селекты в html, естественно ни находятся в форме

$regs=mysqlQuery("SELECT `name`, `region_id`  FROM `". IRB_DBPREFIX ."region` WHERE `country_id`= 248");

 

function returnDbSelect($regs){

 $option='';

if ($regs) {

    $num = mysql_num_rows($regs);     

    $i = 0;

               

    while ($i < $num) {

       $data = mysql_fetch_assoc($regs);

                 

                    $option .= '' . $data['name'] . '';

       $i++;

    }  

   

}

return $option;

}?>

Регион:

                                              

                                               - выберитерегион -

                                                              

                                                               echo returnDbSelect($regs);

                                                               ?>

                                              

                                               Город:

                                              

                                                               - выберитегород -

                                              


Для простоты я вставил в него функцию, которая формирует первый селект, правда я сомневаюсь, что с ним что-то надо делать
Вот сам js, который формирует селекты
$(document).ready(function () {

$('#region_id').change(function () {
var region_id = $(this).val(); //$('#region_id :selected').val();
//alert (region_id);
if (region_id == '0') {
$('#city_id').html('- выберите город -');
$('#city_id').attr('disabled', true);
return(false);
}
$('#city_id').attr('disabled', true);
$('#city_id').html('загрузка...');

var url = '/modules/get_city.php';

$.get(
url,
"region_id=" + region_id,

function (result) {
if (result.type == 'error') {
alert('error');
return(false);
}
else {
var options = '';
$(result.citys).each(function() {
if($(this).attr('city_id')==255){var sal='selected="selected"';} else{var sal='';}
options += '' + $(this).attr('name') + '';

});
$('#city_id').html('- выберите город -'+options);
$('#city_id').attr('disabled', false);

$('#city_id').change(function(){
var value = $('#city_id :selected').text();
var city_id = $('#city_id :selected').val();
if (city_id !== '0') {
$('#selectBoxInfo').html('Выбран '+ value).
fadeIn(1000,function(){
$(this).fadeOut(2000);
});
}
});
}
},
"json"
);
});
});
В get_city.php мы просто узнаем все города, которые относятся к выбранной области, вряд ли он нужен. Большое спасибо за помощь.

 

 

 Почему здесь нельзя вставлять код, так как он есть или я просто не знаю как это правильно сделать

Yulka Вы не знаете, как это сделать или я уже совсем наглею?

раньше понедельника я этим вопросом не займусь, к сожалению (так, чтобы работосопособный скрипт вам предложить), но пока можете изучить пример вот отсюда

http://htmlweb.ru/ajax/example/region.php

тут как раз похожая задача реализуется.

Но вобщем вы движетесь  в правильном направлении. Первый селект (регионы) - грузится в начале, а дальше, при событии change на этом селекте следует выбирать id региона, формировать ajax запрос, передавая в БД идентификатор региона и на основе его результата формировать селект по городам.

Тот пример, что вы привели (http://ymapsapi.ya.ru/replies.xml?item_no=306) красив, но я затруднюсь написать, как его правильно откорректировать под ваши нужды, поскольку там идет обращение к заранее сформированному массиву данных, содержащем информацию уже и о областях и городах и конкретных пунктах. Но там зато сразу решается вопрос с геокодированием, т.е. координаты точек не хранятся, а есть адреса, по которым, при нобходимости получают географические координаты из геокодера. Правда это хорошо в том случае, когда известен заранее адрес

Yulka не знаете, как реализовать пример?