Клуб API Карт

Помогите с обработчиком цветов геокодера.

gnomioagro
23 апреля 2011, 18:15

Имеется таблица модуля к которой обращается обработчик координат и сораняет данные. Из другого скрипта админ может дополнительно отредактировать новую точку и переместить в другую категорию.  От номера котегории должен зависить цвет виводимых на карте точек.  Приведу пример скрипта.

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Яндекс.Карта на Вашем сайте с возможностью добавления меток пользователями. Новая версия</title>
 
<script src="http://api-maps.yandex.ru/1.1/index.xml?key=ALF3pU0BAAAALDo_CgIABwSRRwVV4xj4SLy-ZfcN9twNpWwAAAAAAAAAAADnRwPyiNr4fWTgRYnGJL_suiAsPg==" type="text/javascript"></script>
 
<script type="text/javascript">
 
var map;
 
window.onload = function () {
            map = new YMaps.Map(document.getElementById("YMapsID"));
            map.setCenter(new YMaps.GeoPoint(30.306769,59.953561), 11);
 
            map.addControl(new YMaps.TypeControl());
            map.addControl(new YMaps.ToolBar());
            map.addControl(new YMaps.Zoom());
            map.addControl(new YMaps.ScaleLine());
            map.enableScrollZoom();
 
//Запрос данных и вывод маркеров на карту
YMaps.jQuery.getJSON("vivodpointsmap.php",
function(json){
for (i = 0; i < json.markers.length; i++) {
var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json.markers[i].lat,json.markers[i].lng), {style: "default#blueSmallPoint"});
placemark.description= '<div style="color:#ff0303;font-weight:bold">'+json.markers[i].name+'</div>';
placemark.description = placemark.description+'<strong>Описание1:</strong> '+json.markers[i].descriptions;

placemark.description = placemark.description+'<br><strong> </strong> '+json.markers[i].view;
placemark.description = placemark.description+'<br><strong></strong> '+json.markers[i].user;
map.addOverlay(placemark);
}
 
});


   


 
var myLayout = function (geoPoint) {
   var $element = YMaps.jQuery('<div><font color=#000000>Название: <input type="text" id="name"/><br />Описание: <textarea id="descriptpoint" cols="20" rows="5"></textarea><br /><input type="text" id="user"/>Картинка<br /><input type="text" id="view"/> Ссылка на описание<br /><br /><input type="button" value="Добавить" id="submit"/></div>');
   this.onAddToParent = function (parent) {
        $element.find('#submit').bind('click', function () {
              YMaps.jQuery.ajax({
                  url: 'addpoint.php',
                  data: {
                       namepoint: $element.find('#name')[0].value,
                       descriptpoint: $element.find('#descriptpoint')[0].value,
user: $element.find('#user')[0].value,
view: $element.find('#view')[0].value,
                       pcoord: geoPoint.toString()
                  },
 
            dataType: 'json',
                  // Это функция обработки ответа сервера
                  success: function (res) {
                       if (res.success) {
                             // если точка сохранилась, закрываем балун
                             map.closeBalloon();
                             // и ставим точку на карту
                             map.addOverlay(new YMaps.Placemark(geoPoint));
 
                       } else {
                             // иначе выдаем сообщение об ошибке
                            // YMaps.jQuery('<p style="color:red">' + e.message + '</p>').appendTo("#scriptmes");
                             YMaps.jQuery("#scriptmes").html('<p style="color:red">' + e.message + '</p>');
                       }
                  }
              });
 
        });
        $element.appendTo(parent);
   };
   this.onRemoveFromParent = function () {
        $element.remove();
   };
 
   this.update = function () {};
}
 
YMaps.Events.observe(map, map.Events.Click, function (map, e) {
     map.openBalloon(e.getCoordPoint(), new myLayout(e.getCoordPoint()));
});
 
}
</script>   
 
</head>
 
<body>
 
<div id="YMapsID" style="width:100%;height:350px"></div>
<div id="scriptmes"></div>
 

</body>
</html>

Какие переменные необходимо прописать чтобы

var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json.markers[i].lat,json.markers[i].lng), {style: "default#blueSmallPoint"});

default#blueSmallPoint Брал данные из  `cid` int(10) NOT NULL DEFAULT '0',

Там цифровые данные 1-2-3-4-5-6 в зависимости от цифры должен меняться цвет.

--
-- Структура таблицы `hyOp6O_pages`
--

CREATE TABLE `hyOp6O_pages` (
  `pid` int(10) NOT NULL AUTO_INCREMENT,
  `cid` int(10) NOT NULL DEFAULT '0',
  `title` varchar(255) NOT NULL,
  `subtitle` varchar(255) NOT NULL,
  `active` int(1) NOT NULL DEFAULT '0',
  `page_header` text NOT NULL,
  `text` text NOT NULL,
  `page_footer` text NOT NULL,
  `signature` text NOT NULL,
  `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `counter` int(10) NOT NULL DEFAULT '0',
  `clanguage` varchar(30) NOT NULL,
  PRIMARY KEY (`pid`),
  KEY `pid` (`pid`),
  KEY `cid` (`cid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=36 ;

--
Ниже довольно все просто 3 файла  Адд.пхп и Вывод.пхп

 vivodpointsmap.php

<?php
header('Content-Type: text/html; charset=utf-8');
 
include ("config.php");
 
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 
$result = mysql_query("SELECT * FROM hyOp6O_pages");
if(mysql_num_rows($result)>0)
{
while ($mar = mysql_fetch_array($result))
{
$json =  array(name=>$mar['title'], descriptions=>$mar['page_header'], view=>$mar['subtitle'], user=>$mar['text'], lat=>$mar['page_footer'], lng=>$mar['signature']);
$markers[] = $json;
}
 
}
$points = array(markers=>$markers);
 
echo json_encode($points);
 
}
 
 
?>

Тут я так понимаю нужно дописать cid =>$mar['cid'],

А вот где писать описание функций cid и что писать чтобы от него зависил цветт????

 addpoint.php

<?php
 
header('Content-Type: text/html; charset=utf-8');
 
include ("config.php");
 
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
 
$namepoint = $_GET['namepoint'];
 
if (isset($_GET['namepoint']))       
{
$namepoint = $_GET['namepoint'];
if ($namepoint == '')
{
unset($namepoint);
}  
}
 
if (isset($_GET['descriptpoint']))       
{
$descriptpoint = $_GET['descriptpoint'];
if ($descriptpoint == '')
{
unset($descriptpoint);
}  
}
if (isset($_GET['user']))       
{
$user = $_GET['user'];
if ($user == '')
{
unset($user);
}  
}
if (isset($_GET['view']))       
{
$view = $_GET['view'];
if ($view == '')
{
unset($view);
}  
}
$pcoord = $_GET['pcoord'];
 
if (isset($namepoint) && isset($descriptpoint))
{
 
$namepoint = htmlspecialchars(trim($namepoint));
$descriptpoint = htmlspecialchars(trim($descriptpoint));
$user = htmlspecialchars(trim($user));
$view = htmlspecialchars(trim($view));
 
$exp_str1 = explode(",", $pcoord);
 
$coordx = $exp_str1[0];
$coordy = $exp_str1[1];
 
$sql = "INSERT INTO hyOp6O_pages VALUES(0, '', '$namepoint', '<a href=http://elitedem.ru/modules.php?name=Content&op=showpage&pid=$view>', '', '$descriptpoint', '<img src=$user>', '$coordx', '$coordy', '', '', '')";
$result = mysql_query($sql) or die("Ошибочный запрос: " . mysql_error());
if($result == true)
{
echo '{ success: true }';
}
else
{
echo '{ success: false, message: "Не удалось сохранить точку" }';
}
 
 
}
 
else
 
{
echo '{ success: false, message: "Вы ввели не всю информацию, поэтому метка не может быть добавлена" }';
}
 
}
 
?>

Кто понял как мне можно помочь?


<?php
 
$sdb_name = "mysqlserver";
$user_name = "z1625 ";
$user_password = "777 ";
$db_name = "z1625 ";
 
// соединение с сервером базы данных
if(!$link = mysql_connect($sdb_name, $user_name, $user_password))
{
  echo "<br>Не могу соединиться с сервером базы данных<br>";
  exit();
}
 
// выбираем базу данных
if(!mysql_select_db($db_name, $link))
{
  echo "<br>Не могу выбрать базу данных<br>";
  exit();
}
 
mysql_query('SET NAMES utf8');
 
?>

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

1. Спрячте код под врезку.

Создайте в джаваскрипте набор стилей:

"point1"

"point2"

"point3"

И вставляёте нужное имя стиля для каждой точки.

Ну или массив готовых стилей и выбор из него по индексу.

Помоги пожалуйста с кодом.

Выводим из таблицы   `cid` int(10) NOT NULL DEFAULT '0', число, оно определяет point1-2-3-4  ну и уже поинту назначить цвета.

var styles = ['default#blueSmallPoint', 'default#redSmallPoint', 'default#greenSmallPoint',]

$style = $_GET['style'];

var style  = styles[parseInt($style)]

Непойму а как цвет то задать на 1-2-3-4-5-6-7-8-15-14 ?

Задать цвет метки можно через стиль.

Ваша задача состоит в том, чтобы в строке :

var placemark=new YMaps.Placemark(new YMaps.GeoPoint(json.markers[i].lat,json.markers[i].lng), {style: ???????????????});

Вместо вопросиков поставить строку с именем нужного вам стиля.

можно как то поподробней!? хотябы 1 пример ....

var styles = ['default#blueSmallPoint', 'default#redSmallPoint', 'default#greenSmallPoint',]

$style = $_GET['style'];

var style  = styles[parseInt($style)]

 

не получается у меня :(