Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

1.5正式版 会员动态 google地图插件

[复制链接]
cnp124858074 发表于 2009-3-29 19:31:33 | 显示全部楼层 |阅读模式
UCHome插件
语言编码:  
插件名称: google会员动态地图插件
插件作者:
适用版本:
本帖最后由 cnp124858074 于 2009-3-29 19:35 编辑

看到有人需要这个功能
我就把我的整理下发给大家了

演示:www.msenlin.com/home
请不要注册!





第1步
选取默认地图坐标:
首先打开Google地图
ditu.google.cn

在上面寻找一个地址,然后上下左右移动地图,让这个地址正好处于地图的正中心位置,当您想寻找坐标位置已经处于地图的中心位置的时候,拷贝并粘贴以下代码到你的浏览器地址栏:
  1. javascript:void(prompt('',gApplication.getMap().getCenter()));
复制代码
然后回车一下。这时,你将得到一个弹出式的坐标,这个坐标就是你需要找的经度和纬度。

第2步
申请 google map 的 key
http://code.google.com/intl/zh-CN/apis/maps/signup.html



把下面代码里的 红色 换成你的 KEY 跟 坐标就行了
ABQIAAAACoypN5nK6k_TLuhZ3oZH_RSJq63ahCLp9LRODt47kTV4yYcmfRQsX1n-KWWIoMpHFCpMhScWA57t4A

28.189756655197957, 112.99678802490234

第3步
在uchome_spacefield表中添加三个字段,分别为:
lat       类型为 varchar  长度为20
lng      类型为 varchar  长度为20
zoom  类型为 char        长度为3
或SQL直接添加代码:
  1. ALTER TABLE `uchome_spacefield` ADD `lat` varchar(20) NOT NULL AFTER `feedfriend` ;
  2. ALTER TABLE `uchome_spacefield` ADD `lng` varchar(20) NOT NULL AFTER `lat` ;
  3. ALTER TABLE `uchome_spacefield` ADD `zoom` char(3) NOT NULL AFTER `lng` ;
复制代码
第4步
在 template 中的 default 中找到 cp_profile.htm 或自己风格摸板
找到:
  1. <tr>
  2.         <th>居住地</th>
  3.         <td>
  4.                 <script type="text/javascript">
  5.                 <!--
  6.                 showprovince('resideprovince', 'residecity', '$space[resideprovince]');
  7.                 showcity('residecity', '$space[residecity]', 'resideprovince');
  8.                 //-->
  9.                 </script>
  10.         </td>
  11. </tr>
复制代码
在下面添加:
  1. <tr>
  2.         <td colspan="2">
  3.         <input type="button" id="btn_addMarker" disabled value="快添加您在地图上的位置吧,认识更多的朋友" onclick="AddMarker()" class="button" />
  4.         <div id="d_map" style="background-color:#FFF;border:solid 6px gray;width:481px;margin-top:3px;">
  5.         <div style="width:480px; height:300px;background-color:#f3f3f3;" id="map_canvas"></div>
  6.         </div>
  7.         <input type="hidden" name="lng" id="lng" value="$space[lng]" />
  8.         <input type="hidden" name="lat" id="lat" value="$space[lat]" />
  9.         <input type="hidden" name="zoom" id="zoom" value="$space[zoom]" />
  10.         <input type="hidden" name="sid" id="sid" value="$space[uid]" />
  11.         </td>
  12. </tr>
复制代码
再找到:
  1. <!--{template footer}-->
复制代码
在上面添加:

  1. <div class="f_status s_clear">
  2.         <a href="javascript:;" onclick="window.scrollTo(0,0);" id="a_top" title="TOP">TOP</a>
  3. </div>


  4. <script src=http://ditu.google.com/maps?file=api&v=2&oe=gb2312&key=ABQIAAAACoypN5nK6k_TLuhZ3oZH_RSJq63ahCLp9LRODt47kTV4yYcmfRQsX1n-KWWIoMpHFCpMhScWA57t4A type="text/javascript"></script>

  5. <script type="text/javascript">
  6. var myMap;
  7. var myMarker;
  8. var geocoder = null;
  9. window.onload = function() {
  10. if (GBrowserIsCompatible()) {
  11. myMap = new GMap2(document.getElementById("map_canvas"));
  12. var center = new GLatLng(28.189756655197957, 112.99678802490234); //这个地方就是调整默认显示哪里的,至于里面的经纬度已经再上面给处了获取方法。
  13. myMap.addControl(new GLargeMapControl());
  14. myMap.addControl(new GScaleControl());
  15. myMap.enableScrollWheelZoom();
  16. geocoder = new GClientGeocoder();

  17. if (document.getElementById("lat").value == ""){
  18. myMap.setCenter(center, 16);     //这个地方就是可以修改到显示多少级别的,如果想显示到街道级别,把11改为16就差不多了,可以自己//改改看
  19. document.getElementById("btn_addMarker").disabled = false;
  20. }
  21. else{
  22. var _lat = document.getElementById("lat").value;
  23. var _lng = document.getElementById("lng").value;
  24. var _zoom = document.getElementById("zoom").value;
  25. var _center = new GLatLng(_lat,_lng);
  26. myMap.setCenter(_center,parseInt(_zoom));
  27. document.getElementById("btn_addMarker").disabled = true;

  28. Mark(_lat,_lng);
  29. }
  30. }
  31. }

  32. function Mark(lat,lng){

  33. myMarker = new GMarker(new GLatLng(lat,lng), {draggable: true});

  34. GEvent.addListener(myMarker, "click", function() {
  35. myMarker.openInfoWindowHtml("<b>把气球拖动到你要标记的地方</b><p>拖动左边的比例尺可以缩放地图</p><a href='javascript:void(0);' onclick='DeleteMarker()'>删除标记</a>");
  36. });
  37. GEvent.addListener(myMarker, "dragstart", function() {
  38. myMarker.closeInfoWindow();
  39. });
  40. GEvent.addListener(myMarker, "dragend", function() {
  41. var gll = myMarker.getLatLng();
  42. document.getElementById("lat").value = gll.lat();
  43. document.getElementById("lng").value = gll.lng();
  44. document.getElementById("zoom").value = myMap.getZoom();
  45. myMarker.openInfoWindowHtml("<b>把气球拖动到你要标记的地方</b><p>拖动左边的比例尺可以缩放地图</p><a href='javascript:void(0);' onclick='DeleteMarker()'>删除标记</a>");
  46. });
  47. myMap.addOverlay(myMarker);

  48. myMarker.openInfoWindowHtml("<b>把气球拖动到你要标记的地方</b><p>拖动左边的比例尺可以缩放地图</p><a href='javascript:void(0);' onclick='DeleteMarker()'>删除标记</a>");
  49. }

  50. function AddMarker(){
  51. document.getElementById("btn_addMarker").disabled = true;

  52. var ll = myMap.getCenter();
  53. document.getElementById("lat").value = ll.lat();
  54. document.getElementById("lng").value = ll.lng();
  55. document.getElementById("zoom").value = myMap.getZoom();
  56. Mark(ll.lat(),ll.lng());
  57. }

  58. document.getElementById("residecity").onchange=function AutoMarker(){
  59. var tmpprovince=document.getElementById("resideprovince").value;
  60. var tmpcity=document.getElementById("residecity").value;
  61. var tmpAddress;
  62. tmpAddress=tmpprovince + tmpcity;
  63. if (geocoder) {
  64. geocoder = new GClientGeocoder();
  65.         geocoder.getLatLng(
  66.           tmpAddress,
  67.           function(point) {
  68.             if (!point) {
  69.               alert("iii,Google居然找不到:" + tmpAddress);
  70.             } else {
  71. document.getElementById("btn_addMarker").disabled = true;
  72. myMap.clearOverlays()
  73. Mark(point.y,point.x);
  74.               
  75.             }
  76.           }
  77.         );
  78.       }
  79. }

  80. function DeleteMarker(){
  81. document.getElementById("btn_addMarker").disabled = false;
  82. myMap.removeOverlay(myMarker);
  83. var gll = myMarker.getLatLng();
  84. document.getElementById("lat").value = "";
  85. document.getElementById("lng").value = "";
  86. document.getElementById("zoom").value = "";
  87. }

  88. </script>
复制代码
第5布
在 template 中的 default 中找到 space_index.htm 或自己风格摸板
找到:
  1.                         <!--{if $doinglist}-->
  2.                         <h2>
  3.                         <a href="space.php?uid=$space[uid]&do=doing&view=me" class="r_option">全部</a>
  4.                         记录
  5.                         </h2>
复制代码
在上面添加:
  1.         <!--{if $space['showprofile']}-->
  2.         <!--{if $space[lat]}-->
  3.         <div id="space_location" class="box">
  4.         <h3>现在位置</h3>
  5.         <p><div style="width:198px;;height:170px;overflow:hidden;border:solid 1px #ccc;" id="map_canvas"></div></p>
  6.         </div>
  7.         <!--{/if}-->
  8.         <!--{/if}-->
复制代码
再找到:
  1. <!--{template footer}-->
复制代码
在上面添加:
  1. <script src=http://ditu.google.com/maps?file=api&v=2&oe=gb2312&key=ABQIAAAACoypN5nK6k_TLuhZ3oZH_RSJq63ahCLp9LRODt47kTV4yYcmfRQsX1n-KWWIoMpHFCpMhScWA57t4A type="text/javascript"></script>
  2. <script type="text/javascript">
  3. window.onload = function() {
  4. if (GBrowserIsCompatible()) {
  5. var map = new GMap2(document.getElementById("map_canvas"));
  6. var center = new GLatLng($space[lat],$space[lng]);
  7. map.setCenter(center, $space[zoom]);

  8. var marker = new GMarker(center);
  9. map.addOverlay(marker);
  10. }
  11. }
  12. </script>
复制代码
第6步
在 source 文件夹中找到 cp_profile.php 文件
找到:
  1.         //提交检查
  2.         $setarr = array(
  3.                 'qq' => getstr($_POST['qq'], 20, 1, 1),
  4.                 'msn' => getstr($_POST['msn'], 80, 1, 1),
复制代码
在下面添加:
  1.                 'lat' => getstr($_POST['lat'], 20, 1, 1),
  2.                 'lng' => getstr($_POST['lng'], 20, 1, 1),
  3.                 'zoom' => getstr($_POST['zoom'], 3, 1, 1),
复制代码
第7步
在 template 中的 default 中找到 index.htm 或自己风格摸板
在需要显示地图的地方加入下面代码
  1. <div id="div_map">
  2.                                                    <script type="text/javascript">var tmap_u= [];</script>                     
  3.                                                <div id="viewmap_index" style="width:520px;height:300px;border:1px solid #ccc;"></div>
  4.                                                 
  5.                                 </div>
复制代码
在找到:
  1. <!--{template footer}-->
复制代码
在后面添加:
  1. <div style="display:none;">

  2. <!--{if $newfeed}-->
  3. <!--{loop $newfeed $key $value}-->        
  4. <script type="text/javascript">
  5. tmap_u.push({ "name":"$value[username]","lat": $value[lat], "lng": $value[lng], "id": $value[uid],"zoom": $value[zoom]});</script>
  6.                                                                         <div id="map_u_{$key}">
  7.                                                                                 <span style="float:right;"><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank"><img src="<!--{avatar($value[uid],small)}-->" class="avatar" /></a></span>
  8.                                                                                 <p>$value[title_template]</p>
  9.                                                                                 <p><a href="javascript:map_zoom_in({$key});">放大地图</a> <a href="javascript:map_zoom_out();">还原地图</a> </p>
  10.                                                                                 <p><a href="space.php?uid=$value[uid]" title="{$_SN[$value[uid]]}" target="_blank">访问&nbsp;$_SN[$value[uid]]&nbsp;个人空间</a>
  11.                                                                                 </p></div>
  12.                                                                 <!--{/loop}-->
  13.                                                 <!--{/if}-->                        
  14.                                         </div>

  15. <script src="http://ditu.google.com/maps?file=api&v=2&key=ABQIAAAACoypN5nK6k_TLuhZ3oZH_RSJq63ahCLp9LRODt47kTV4yYcmfRQsX1n-KWWIoMpHFCpMhScWA57t4A" type="text/javascript" charset="utf-8"></script>
  16. <script type="text/javascript">

  17. // show shops on map
  18. var mymap = 'viewmap_index';
  19. var map = null;
  20. var mapbounds = new GLatLngBounds(new GLatLng(-33.873801,151.206765), new GLatLng(0.335218,0.719604));
  21. var markers = [];
  22. var current_marker = null;

  23. function map_show_info(i)
  24. {
  25. if(current_marker !== i)
  26. {
  27. markers[i][0].openInfoWindow(markers[i][1], {"maxWidth": 250});
  28. current_marker = i;
  29. }
  30. }

  31. function map_zoom_in(i)
  32. {
  33. map.setCenter(markers[i][0].getPoint(), 16);
  34. }

  35. function map_zoom_out()
  36. {
  37. if(current_marker !== null) { markers[current_marker][0].closeInfoWindow(); }
  38. map.setCenter(mapbounds.getCenter(), Math.min(15, map.getBoundsZoomLevel(mapbounds)));
  39. }
  40. function map_set_marker(marker, i)
  41. {
  42. GEvent.addListener(marker, "click", function() { map_show_info(i); });
  43. GEvent.addListener(marker, "infowindowclose", function() { current_marker = null; });

  44. }                               
  45. function map_auto_show()
  46. {
  47. var next_marker;
  48. if(current_marker === null) next_marker = 0;
  49. else next_marker = current_marker + 1;
  50. if(next_marker === null || next_marker >= markers.length) { next_marker = 0; }
  51. map_show_info(next_marker);
  52. window.setTimeout(map_auto_show, 6000);
  53. }

  54. if (GBrowserIsCompatible())
  55. {
  56. map = new GMap2(document.getElementById('viewmap_index'));

  57. map.addControl(new GSmallMapControl());
  58. map.addControl(new GScaleControl());

  59.         var center = new GLatLng(112.1817398071289,37.20989218842202);
  60.         map.setCenter(center, 12);


  61. for(var i = 0; i < tmap_u.length; i++)
  62. {
  63. var icon = new GIcon(G_DEFAULT_ICON, "http://msenlin.com/home/api/td.png");
  64. G_DEFAULT_ICON.iconSize = new GSize(22, 22);
  65. icon.iconSize = new GSize(22, 22);


  66. var marker = new GMarker(new GLatLng( tmap_u[i].lat, tmap_u[i].lng ), {"icon": icon, "title": tmap_u[i].name+"@梦森林"});
  67. map.addOverlay(marker);


  68. markers.push([marker,document.getElementById("map_u_"+i).innerHTML, tmap_u[i].id]);
  69. if(markers.length > 1)
  70. {
  71. mapbounds =
  72. new GLatLngBounds(new GLatLng(Math.min(mapbounds.getSouthWest().lat(), tmap_u[i].lat),
  73. Math.min(mapbounds.getSouthWest().lng(), tmap_u[i].lng)),
  74. new GLatLng(Math.max(mapbounds.getNorthEast().lat(), tmap_u[i].lat),
  75. Math.max(mapbounds.getNorthEast().lng(), tmap_u[i].lng)));
  76. }
  77. else
  78. {
  79. mapbounds = new GLatLngBounds(new GLatLng(tmap_u[i].lat, tmap_u[i].lng),
  80. new GLatLng(tmap_u[i].lat, tmap_u[i].lng));
  81. }
  82. }

  83. map_zoom_out();
  84. window.setTimeout(map_auto_show, 3000);               

  85. }

  86. </script>
复制代码
第8步
在 index.php 文件
找到:
  1. //总会员
  2. $spacecount = $_SGLOBAL['db']->result($_SGLOBAL['db']->query("SELECT COUNT(*) FROM ".tname('space')), 0);
复制代码
在下面加上:
  1. //大家的最新动态
  2. $newfeed = array();
  3. $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('feed')." LEFT JOIN " . tname('spacefield') . " ON " .
  4.         tname('feed') . ".uid =" . tname('spacefield') . ".uid WHERE " .tname('feed'). ".friend='0' and " .tname('spacefield'). ".lat != '' ORDER BY dateline DESC LIMIT 0,9");//显示最新动态
  5. while ($value = $_SGLOBAL['db']->fetch_array($query)) {
  6.         realname_set($value['uid'], $value['username']);
  7.         
  8.         $newfeed[] =mkfeed($value);
  9.         /*foreach ($newfeed as $f_index => $tmpfeed) {
  10.                 $newfeed[$f_index]['title_template'] = str_replace('{actor}','',$newfeed[$f_index]['title_template']);
  11.                 $newfeed[$f_index]['title_template']=stripslashes($newfeed[$f_index]['title_template']);
  12.                 $newfeed[$f_index]['title_template'] = preg_replace('/"/','"',$newfeed[$f_index]['title_template']);

  13.         }*/
  14. }
复制代码
 楼主| cnp124858074 发表于 2009-3-29 19:36:23 | 显示全部楼层
大概整理 有问题回帖问
回复

使用道具 举报

xshell 发表于 2009-3-29 19:42:15 | 显示全部楼层
顶一下了
回复

使用道具 举报

nestea 发表于 2009-3-29 19:43:12 | 显示全部楼层
貌似不错,帮顶了
回复

使用道具 举报

zxpet 发表于 2009-3-29 20:00:32 | 显示全部楼层
第3步
在uchome_spacefield表中添加三个字段,分别为:
lat       类型为 varchar  长度为20
lng      类型为 varchar  长度为20
zoom  类型为 char        长度为3
或SQL直接添加代码:

是什么意思啊?怎么操作?
回复

使用道具 举报

 楼主| cnp124858074 发表于 2009-3-29 20:04:46 | 显示全部楼层
第3步
在uchome_spacefield表中添加三个字段,分别为:
lat       类型为 varchar  长度为20
lng      类型为 varchar  长度为20
zoom  类型为 char        长度为3
或SQL直接添加代码:

是什么意思啊?怎么操 ...
zxpet 发表于 2009-3-29 20:00



就是用 phpMyAdmin 导入数据

先选 UCHOME 数据库 在点 SQL

在里面写入代码 执行就行了!
回复

使用道具 举报

zxpet 发表于 2009-3-29 20:05:37 | 显示全部楼层
没有phpMyAdmin怎么办?
回复

使用道具 举报

zxpet 发表于 2009-3-29 20:10:41 | 显示全部楼层
还有 这个怎么卸载呢?
回复

使用道具 举报

 楼主| cnp124858074 发表于 2009-3-29 20:27:00 | 显示全部楼层
备份就行了。。没需要什么卸载  唯一增加的就3个字段
回复

使用道具 举报

dranshion 发表于 2009-3-29 20:35:26 | 显示全部楼层
lz最好把SQL语句也写一下 呵呵

问一下:偶如果是一个城市uchome那个地图能精确到街道吗?

怎么设置自己的位置啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 23:49 , Processed in 0.033218 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表