2014-02-11 93 views
2

我正在开发一个管理员可以添加属性到他的项目页面的房地产网站。现在他应该选择的其中一个选项是添加他宣传的房产的位置。在我的CMS平台上,我有地图,管理员将他的别针放到他的特定属性,然后保存。之后,进入该网站的预期客户将看到管理员之前放置的针。如何在标记上居中显示google ap3地图?

这里是我的管理部分的代码

HTML代码

<!DOCTYPE html > 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps JavaScript API v3 Example: Map Simple</title> 
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=true"></script> 
    <script type="text/javascript"> 
    var marker; 
    var infowindow; 

    function initialize() { 
     var latlng = new google.maps.LatLng(30.0599153,31.2620199,13); 
     var options = { 
     zoom: 13, 
     center: latlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
     } 
     var map = new google.maps.Map(document.getElementById("map-canvas"), options); 
     var html = "<table>" + 
       "<tr><td>Name:</td> <td><input type='text' id='name'/> </td> </tr>" + 
       "<tr><td>Address:</td> <td><input type='text' id='address'/></td> </tr>" + 
       "<tr><td>Type:</td> <td><select id='type'>" + 
       "<option value='bar' SELECTED>bar</option>" + 
       "<option value='restaurant'>restaurant</option>" + 
       "</select> </td></tr>" + 
       "<tr><td></td><td><input type='button' value='Save & Close' onclick='saveData()'/></td></tr>"; 
    infowindow = new google.maps.InfoWindow({ 
    content: html 
    }); 

    google.maps.event.addListener(map, "click", function(event) { 
     marker = new google.maps.Marker({ 
      position: event.latLng, 
      map: map 
     }); 
     google.maps.event.addListener(marker, "click", function() { 
      infowindow.open(map, marker); 
     }); 
    }); 
    } 

    function saveData() { 
     var name = escape(document.getElementById("name").value); 
     var address = escape(document.getElementById("address").value); 
     var type = document.getElementById("type").value; 
     var latlng = marker.getPosition(); 

     var url = "phpsqlinfo_addrow.php?name=" + name + "&address=" + address + 
       "&type=" + type + "&lat=" + latlng.lat() + "&lng=" + latlng.lng(); 
     downloadUrl(url, function(data, responseCode) { 
     if (responseCode == 200 && data.length <= 1) { 
      infowindow.close(); 
      document.getElementById("message").innerHTML = "Location added."; 
     } 
     }); 
    } 

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request.responseText, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function doNothing() {} 
    </script> 
    </head> 

    <body style="margin:0px; padding:0px;" onload="initialize()"> 
    <div id="map-canvas" style="width: 800px; height: 600px"></div> 
    <div id="message"></div> 
    </body> 

</html> 

然后它涉及到PHP代码管理将信息添加到数据库的动态部分:

<?php 
// Gets data from URL parameters 
$name = $_GET['name']; 
$address = $_GET['address']; 
$lat = $_GET['lat']; 
$lng = $_GET['lng']; 
$type = $_GET['type']; 

mysql_connect("localhost", "root", "") or 
     die("Could not connect: " . mysql_error()); 
mysql_select_db("arabia"); 

// Insert new row with user data 
$query = sprintf("INSERT INTO markers " . 
     " (id, name, address, lat, lng, type) " . 
     " VALUES (NULL, '%s', '%s', '%s', '%s', '%s');", 
     mysql_real_escape_string($name), 
     mysql_real_escape_string($address), 
     mysql_real_escape_string($lat), 
     mysql_real_escape_string($lng), 
     mysql_real_escape_string($type)); 

$result = mysql_query($query); 

if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

?> 

现在来到客户部分。

其中有问题的客户端部分的HTML,客户端看到的地图从这里

<!DOCTYPE html > 
    <head> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>map</title> 
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> 
    <script type="text/javascript"> 
    //<![CDATA[ 

    var customIcons = { 
     restaurant: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_blue.png' 
     }, 
     bar: { 
     icon: 'http://labs.google.com/ridefinder/images/mm_20_red.png' 
     } 
    }; 
    function load() { 
     var map = new google.maps.Map(document.getElementById("map"), { 
     center: new google.maps.LatLng(30.0599153,31.2620199,13)||map.setCenter(marker.getPosition()), 
     zoom: 13, 
     mapTypeId: 'roadmap' 
     }); 
     var infoWindow = new google.maps.InfoWindow; 

     // Change this depending on the name of your PHP file 
     downloadUrl("phpsqlajax_genxml.php", function(data) { 
     var xml = data.responseXML; 
     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 google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon 
      }); 
      bindInfoWindow(marker, map, infoWindow, html); 
     } 
     }); 
    } 

    function bindInfoWindow(marker, map, infoWindow, html) { 
     google.maps.event.addListener(marker, 'click', function() { 
     infoWindow.setContent(html); 
     infoWindow.open(map, marker); 
     }); 
    } 

    function downloadUrl(url, callback) { 
     var request = window.ActiveXObject ? 
      new ActiveXObject('Microsoft.XMLHTTP') : 
      new XMLHttpRequest; 

     request.onreadystatechange = function() { 
     if (request.readyState == 4) { 
      request.onreadystatechange = doNothing; 
      callback(request, request.status); 
     } 
     }; 

     request.open('GET', url, true); 
     request.send(null); 
    } 

    function doNothing() {} 

    //]]> 

    </script> 

    </head> 

    <body onload="load()"> 
    <div id="map" style="width: 500px; height: 300px"></div> 
    </body> 

</html> 

现在最后PHP部分女巫管理从数据库中获取数据:

<?php 

// Start XML file, create parent node 

$dom = new DOMDocument("1.0"); 
$node = $dom->createElement("markers"); 
$parnode = $dom->appendChild($node); 

// Opens a connection to a MySQL server 

mysql_connect("localhost", "root", "") or 
     die("Could not connect: " . mysql_error()); 
mysql_select_db("arabia"); 

// Select all the rows in the markers table 

$query = "SELECT * FROM markers WHERE 1"; 
$result = mysql_query($query); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

header("Content-type: text/xml"); 

// Iterate through the rows, adding XML nodes for each 

while ($row = @mysql_fetch_assoc($result)){ 
    // ADD TO XML DOCUMENT NODE 
    $node = $dom->createElement("marker"); 
    $newnode = $parnode->appendChild($node); 
    $newnode->setAttribute("name",$row['name']); 
    $newnode->setAttribute("address", $row['address']); 
    $newnode->setAttribute("lat", $row['lat']); 
    $newnode->setAttribute("lng", $row['lng']); 
    $newnode->setAttribute("type", $row['type']); 
} 

echo $dom->saveXML(); 

?> 

现在一切运行良好,使用此代码,整个问题都在客户端视图中心的HTML代码行中:

新 google.maps.LatLng(30.0599153,31.2620199,13)|| map.setCenter(marker.getPosition()),

,我需要它的引脚管理员之前戴上中心。

+0

看来我误解了你的问题。你从数据库中读取了多少个标记。一个还是很多?如果你有很多标记,你怎么知道哪一个用于中心?你使用'type'属性吗? –

+0

@AntoJurković您从数据库中读取了多少个标记?对于每个项目将是一张地图,所以项目将通过项目ID读取一张地图。 – Mikky

回答

0

更新:这部分的回答仅对管理员端有效。

更新地图点击处理与map.setCenter(event.latLng);

google.maps.event.addListener(map, "click", function(event) { 
    marker = new google.maps.Marker({ 
     position: event.latLng, 
     map: map 
    }); 

    map.setCenter(event.latLng); 

    google.maps.event.addListener(marker, "click", function() { 
     infowindow.open(map, marker); 
    }); 
}); 

更新:这个答案的一部分是客户端。

地图有一个像被初始化:

var map = new google.maps.Map(document.getElementById("map"), { 
    center: new google.maps.LatLng(30.0599153,31.2620199,13), 
    zoom: 13, 
    mapTypeId: 'roadmap' 
    }); 

如果你有比你应该使用方法setCenter()像(for环路的一部分)只有一个标志:

  var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon 
      }); 
      map.setCenter(point); 

如果你有很多的标记比你可以使用方法fitBounds(),更改for循环:

var latlngBounds = new google.maps.LatLngBounds(); 

    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 google.maps.LatLng(
       parseFloat(markers[i].getAttribute("lat")), 
       parseFloat(markers[i].getAttribute("lng"))); 
      var html = "<b>" + name + "</b> <br/>" + address; 
      var icon = customIcons[type] || {}; 
      var marker = new google.maps.Marker({ 
      map: map, 
      position: point, 
      icon: icon.icon 
      }); 

      latlngBounds.extend(point); 

      bindInfoWindow(marker, map, infoWindow, html); 
    } 

    map.fitBounds(latlngBounds); 

将设置该方式地图,以便所有标记都可见。

+0

我做到了,但没有运气我用你的代码编辑了两个文件客户端和管理员,但仍然没有得到中间的标记 – Mikky

+0

我仍然看到它放在同一个经纬线上,我把这条线 'new google .maps.LatLng(30.0599153,31.2620199,13)'我将此行替换为'center:new google.maps.LatLng(30.0599153,31.2620199,13)|| map.setCenter(event.latLng),' – Mikky

+0

I don'不知道你把那条线放在哪里?作为地图初始化的“中心:”?你只能在那里使用有效的latLng。 –

相关问题