Отображение карты Google из данных MySQL

vmnetwork

Новичок
Отображение карты Google из данных MySQL

Вообщем появилась идея вывода карт Google на сайте справочной службы… т.е. чтобы на странице каждой зарегистрированной фирмы отображалась карта с маркером находящимся по нужному адресу.

из MySQL я могу извлечь Город, Улицу и Номер дома… кто нибудь делал так чтобы на сайте автоматически отображалась та карта которая соответствует извлекаемым из MySQL данным (по городу улице и дому). Грубо говоря, необходимо ставить маркер на карте… может быть у кого нибудь имеется опыт?
 

vmnetwork

Новичок
Ну из справки я понял что нужно создавать БД... (или дописывать ее) где еще бы хранились координаты карты... т.е. пользователю предлагается отметить на карте самому маркером а потом это все сохраняется в БД...

А вот можно ли просто если в БД уже есть Город, Улица, Дом без координат как либо заставить гугл отобразить это все...?
 

vmnetwork

Новичок
Вроде бы немного понял.. теперь главная проблема создать XML файл....


PHP:
<?php

include ('data/config.php');
include ('data/confignews.php');
include ('sources/connect.php');
include ('./data/config_mysql.php');
include ('./data/config_table.php');


@$idfirm=$_REQUEST['idfirm'];



$dom = new DOMDocument("1.0");
$node = $dom->createElement("markers");
$parnode = $dom->appendChild($node); 
 
// Select all the rows in the markers table
 
$query = "SELECT * FROM cat2_firm WHERE idfirm=288";
$result = mysql_query($query);
if (!$result) {  
  die('Invalid query: ' . mysql_error());
} 
 
header("Content-type: text/xml"); 
 
while ($row = @mysql_fetch_assoc($result)){  
  // ADD TO XML DOCUMENT NODE  
$map = $row['fgorod'].'+'.$row['fstreet'].'+'.$row['fhouse'];
$name = "firm";
$type = "bar";

// Перекодировка в UTF-8
function cp1251_to_utf8_recursive(/*mixed*/ $map)  
{  
    if (is_array($map))  
    {  
        $d = array();  
        foreach ($data as $k => &$v)  
        {  
            $d[cp1251_to_utf8_recursive($k)] = cp1251_to_utf8_recursive($v);  
        }  
        return $d;  
    }  
    if (is_string($map)) return iconv('cp1251', 'utf-8//IGNORE//TRANSLIT', $map);  
    if (is_scalar($map) or is_null($map)) return $map;  
    #throw warning, if the $map is resource or object:  
    trigger_error('An array, scalar or null type expected, ' . gettype($map) . ' given!', E_USER_WARNING);  
    return $map;  
}  



$node = $dom->createElement("marker"); 
  $newnode = $parnode->appendChild($node);   
  $newnode->setAttribute("name", $name); 
  $newnode->setAttribute("address", $map);  
  $newnode->setAttribute("lat", "");  
  $newnode->setAttribute("lng", "");  
  $newnode->setAttribute("type", $type);
} 
 
echo $dom->saveXML();
 
?>
Так и не понял как правильно перекодировать в UTF-8

Выдает ошибку
PHP:
Ошибка разбора XML: синтаксическая ошибка (Строка: 2, Символ: 0)

1: <br />
  2: <b>Warning</b>:  DOMElement::setAttribute() [<a href='domelement.setattribute'>domelement.setattribute</a>]: string is not in UTF-8 in <b>/home2/u87307/bazzzarru/www/mm.php</b> on line <b>64</b><br />
  3: <br />
  4: <b>Warning</b>:  DOMDocument::saveXML() [<a href='domdocument.savexml'>domdocument.savexml</a>]: output conversion failed due to conv error, bytes 0xE3 0x2E 0x20 0xD3 in <b>/home2/u87307/bazzzarru/www/mm.php</b> on line <b>70</b><br />
  5: <?xml version="1.0" encoding="ISO-8859-1"?>

Вот на этом все и закончилось
:( :(
 

Вурдалак

Продвинутый новичок
Тебе просто надо выставить
PHP:
mysql_set_charset('UTF-8');
Перекодировать ничего не надо.
 

vmnetwork

Новичок
ага спасибо :) теперь все работает...
Единственное маркер без параметров lat="" lng="" отображается в стороне где то в полях... вот читал что можно преобразовать адрес в систему координат? но тут я чтото вообще не сооброжу... там предлагается вставить всеголишь ссылку

-~{}~ 21.10.10 16:49:

ну может кто нибудь поможет ? как хотябы вытащить полученные координаты из XML?

-~{}~ 21.10.10 17:04:

Все справился... Вот может кому на будущее эта функция пригодится (геокодирования)
PHP:
$geocode_pending = true;

  while ($geocode_pending) {
    $address = $map;
    $id = $idfirm;
    $request_url = $base_url . "&q=" . urlencode($address);
    $xml = simplexml_load_file($request_url) or die("url not loading");

    $status = $xml->Response->Status->code;
    if (strcmp($status, "200") == 0) {
      // Successful geocode
      $geocode_pending = false;
      $coordinates = $xml->Response->Placemark->Point->coordinates;
      $coordinatesSplit = split(",", $coordinates);
      // Format: Longitude, Latitude, Altitude
      $lat = $coordinatesSplit[1];
      $lng = $coordinatesSplit[0];

print $lat;
print $lng;
      
    }
    usleep($delay);
  }
}
-~{}~ 21.10.10 17:33:

Теперь к сожалению возникла новая проблема :( может быть кто нибудь сталкивался уже? не могу передать значение $idfirm в файл который формирует XML? как заставить его принять ?

т.е. ранее было
PHP:
@$idfirm=$_REQUEST['idfirm']; 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node);  
  
// Select all the rows in the markers table 
  
$query = "SELECT * FROM cat2_firm WHERE idfirm=288";
Теперь прописываю
PHP:
@$idfirm=$_REQUEST['idfirm']; 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node);  
  
// Select all the rows in the markers table 
  
$query = "SELECT * FROM cat2_firm WHERE idfirm=$idfirm";
И все результат теряется :(

-~{}~ 21.10.10 17:35:

А соеденяется у меня этот файл (mm.php) c главной страницы через Java Script
PHP:
  GDownloadUrl("mm.php", function(data) {
          var xml = GXml.parse(data);
          var markers = xml.documentElement.getElementsByTagName("marker");
          for (var i = 0; i < markers.length; i++) {
            var name = markers[i].getAttribute("name");
            var address = markers[i].getAttribute("address");
            var type = markers[i].getAttribute("type");
            var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
                                    parseFloat(markers[i].getAttribute("lng")));
            var marker = createMarker(point, name, address, type);
            map.addOverlay(marker);
-~{}~ 21.10.10 18:03:

Вопрос Снят :)
 
Сверху