Здравствуйте!
У меня возникла следующая проблема:
Есть 4 файла: main.js, user.html, process.php, таблица 'coordinates' в mysql
Допустим, заходим на страницу пользователя, id пользователя = 1, мне нужно из таблицы 'coordinates' взять все строки (каждая строка - координата одной ломаной линии) данного пользователя и показать их на карте. При этом координаты центра карты брать из первых координат первой совпавшей строки.
То есть, строки в таком виде:
37.67647804,55.74818943~-
37.60970177,55.76183903~0
37.58669914,55.76532326~0
Я хочу, чтобы центр карты, где будут отмечены все ломаные линии пользователя, находился по координатам: 37.67647804,55.74818943
Вот как реализую сию идею (прошу строго не судить, я еще молод и неопытен):
user.html
<script src="http://api-maps.yandex.ru
<script type='text/javascript' src='main.js'></script>
<p style="margin-bottom: 15px">
<h2 class="header-table">Карта: <span id="kolmar"></span></h2>
<div id="usermap" data-user="{$oUserProfile->getLogin()}" style="width: 100%; height: 500px; margin: 20px 0;"></div>
</p>
main.js
if($("#usermap").size() > 0){
user = $("#usermap").attr("data-user");
$.ajax({
type: "POST",
url: "process.php",
data: 'action=getprofilemap&user='+user,
success: function(data) {
eval(data);
}
});
}
process.php:
if($act == "getprofilemap"){
$user = $_POST['user'];
$res = $mysqli->query("SELECT * FROM `coordinates` WHERE `active` = '1' AND user = '1' LIMIT 0,999");
$coordinates = "";
$kolmaps = 0;
while ($row = $res->fetch_array(MYSQLI_ASSOC)) {
$coord = explode("~",$row['coordinates']);
unset($long);
unset($lat);
foreach($coord as $oneCoord){
$longlat = explode(",",$oneCoord);
if(!isset($long)){
$long = $longlat[0];
$lat = $longlat[1];
}else{
$long = $longlat[0] + $long;
$lat = $longlat[1] + $lat;
}
$coordinates .= "[".$lat.",".$long . "],";
}
$coordinates = substr($coordinates, 0, -1);
if ($kolmaps == 0) {
$longlatt = explode(",",$coord[0]);
$longg = round($longlatt[0],2);
$latt = round($longlatt[1],2);
echo "
myMap = new ymaps.Map('usermap', {
center: [" . $latt . ", " . $longg . "],
zoom: 12,
behaviors: ['scrollZoom', 'drag']
});";
echo "
myMap.controls.add('zoomControl');
myMap.controls.add('typeSelector');";
}
$kolmaps += 1;
echo 'var myPolyline'.$row['id'].' = new ymaps.Polyline([
'.$coordinates.'
], {
balloonContent: "'.$row['user'].'<br><a href=\'/profile/'.$row['user'].'\'>Профиль</a>"
}, {
balloonHasCloseButton:true,
strokeColor: \''.randomColor().'\',
strokeWidth: 4,
strokeOpacity: 0.8
});
alert(' . $row['id'] . ');
myMap.geoObjects.add(myPolyline'.$row['id'].');
myMap.setBounds(myPolylin
}
if ($kolmaps == 0) {
echo "
var geolocation = ymaps.geolocation;
coords = [geolocation.latitude, geolocation.longitude];
myMap = new ymaps.Map('usermap', {
center: coords,
zoom: 10,
behaviors: ['scrollZoom', 'drag']
});";
echo "
myMap.controls.add('zoomControl');
myMap.controls.add('typeSelector');
";
}
};
В общем, я все это добро пытаюсь загрузить, и получается следующее:
1) Если у пользователя нет никаких ломаных линий в базе, то выдается просто пустая карта с центром по его ip.
2) Если у пользователя 1 ломаная, то выдается карта с одной ломаной, все отлично, центр карты - первые координаты ломаной.
3) Если у пользователя больше 1 ломаной, то происходит ужас, выдает: "TypeError: e is undefined" Пытаюсь увеличить или уменьшить карту, она зависает. Показывает только первую ломаную из базы, остальные не показывает.
Помогите, пожалуйста, разобраться в чем проблема тут? Уже второй день подряд пытаюсь сделать =(