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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

“自作”google地图显示会员最新动态

[复制链接]
pphuang 发表于 2009-5-26 15:25:18 | 显示全部楼层 |阅读模式
UCHome插件
语言编码: GBK简体 
插件名称: google地图显示会员最新动态
插件作者: 下面正文声明
适用版本:
本帖最后由 pphuang 于 2009-5-26 22:56 编辑
郑重声明:本教程中所用文件均来自互联网,版权归原作者所有。本人只是根据网络上流传的代码进行有必要的更改,并根据实际操作重新写了本教程!所用代码较多,提醒一下你:不要看花了。即使有美女溜过,也别歪下你的头,否则保证你看走眼喽!


本教程本来是图文并茂的,但是DZ坛子附件要求太严格了,搞得我发了三次,麻烦得很,因此,这里不提供附件及图示例子了。需要的同志请看原贴:
思齐集-智慧论坛--google地图动态显示会员最新我的论坛提供完整附件,需要下载附件的,请到论坛下载

本教程特色之处:按图索骥式的说明问题的来源,并手把手式地教你解决它!现在开始:


1、准备开始:
A:创建数据字段

在uchome_spacefield数据表中添加以下三个字段,字段及类型如下:

  1. lat       类型为 varchar      长度为20
  2. lng      类型为 varchar      长度为20
  3. zoom  类型为 char           长度为3
复制代码
为了防止手动添加会发生手误,我们直接在PHPMyAdmin中在相应的数据库下面运行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` ;
复制代码
B:申请Google地图API以及默认显示的地图坐标值

API申请地址:
http://code.google.com/intl/zh-CN/apis/maps/signup.html
注册Google邮箱,然后登录,进行申请,填写你的网站域名,拥有自己的网站地图API。如:
ABQIAAAAxAPzlj_7e7GS2InW3qJGeBSYB1UoS9AGBeg2_Hvu55ll-_S8aRTMsnqRNgVDr7XDSzcoXCJQWDWgug



下载附件get.html文件,打开,选择你网站地图默认显示的位置,得到坐标,并记录好。如上海浦东的坐标31.2494334, 121.6485965)。
2、文件修改。
A:打开source 目录下面的 cp_profile.php 文件,找到
  1. '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),
复制代码
B:打开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>
复制代码
并在最下面,找到<!--{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. <!--注意:将下面的API换成你申请的API-->
  5. <script src=http://ditu.google.com/maps?file=api&v=2&oe=gb2312&key=ABQIAAAAxAPzlj_7e7GS2InW3qJGeBSYB1UoS9AGBeg2_Hvu55ll-_S8aRTMsnqRNgVDr7XDSzcoXCJQWDWgug type="text/javascript"></script>
  6. <script type="text/javascript">
  7. var myMap;
  8. var myMarker;
  9. var geocoder = null;
  10. window.onload = function() {
  11. if (GBrowserIsCompatible()) {
  12. myMap = new GMap2(document.getElementById("map_canvas"));
  13. var center = new GLatLng(31.2494334, 121.6485965); //注意替换掉你默认的地理位置坐标值。
  14. myMap.addControl(new GLargeMapControl());
  15. myMap.addControl(new GScaleControl());
  16. myMap.enableScrollWheelZoom();
  17. geocoder = new GClientGeocoder();

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

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

  48. myMap.addOverlay(myMarker);
  49. myMarker.openInfoWindowHtml("<b>拖动气球,标记你所在的地理位置!</b><p>拖动左边的比例尺可以缩放地图</p><a href='javascript:void(0);' onclick='DeleteMarker()'>删除标记</a>");
  50. }
  51. function AddMarker(){
  52. document.getElementById("btn_addMarker").disabled = true;

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

  59. document.getElementById("residecity").onchange=function AutoMarker(){
  60. var tmpprovince=document.getElementById("resideprovince").value;
  61. var tmpcity=document.getElementById("residecity").value;
  62. var tmpAddress;
  63. tmpAddress=tmpprovince + tmpcity;
  64. if (geocoder) {
  65. geocoder = new GClientGeocoder();
  66.         geocoder.getLatLng(
  67.           tmpAddress,
  68.           function(point) {
  69.             if (!point) {
  70.               alert("iii,Google居然找不到:" + tmpAddress);
  71.             } else {
  72. document.getElementById("btn_addMarker").disabled = true;
  73. myMap.clearOverlays()
  74. Mark(point.y,point.x);            
  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>
复制代码
注意替换你的API与默认地理坐标!


C:打开根目录下面的index.php文件。找到“//获得缓存”,在其上面添加如下代码:
  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. }
复制代码
D:在 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}-->
复制代码
这样就完成了个人主页左侧图像下面显示自己的地理位置了。

接下来,在最下面的<!--{template footer}-->在上面添加:
  1. <script src=http://ditu.google.com/maps?file=api&v=2&oe=gb2312&key=ABQIAAAAxAPzlj_7e7GS2InW3qJGeBSYB1UoS9AGBeg2_Hvu55ll-_S8aRTMsnqRNgVDr7XDSzcoXCJQWDWgug 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>
复制代码
注意替换你的API。

E:在 template 中的 default 中[或自己风格摸板]找到 index.htm 文件,在最下面的<!--{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=ABQIAAAAxAPzlj_7e7GS2InW3qJGeBSYB1UoS9AGBeg2_Hvu55ll-_S8aRTMsnqRNgVDr7XDSzcoXCJQWDWgug" 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://www.siqiji.cn/home/template/default/image/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>
复制代码
最后在你所需要显示地图的地方插入
  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. </div>
复制代码
注意:自定义宽高,并进行符合你风格模板风格的美化。

至此,代码更改全部完成。登录后台,更新缓存,到前台,进入个人设置,个人资料里面指定你所在的地理位置,提交,完成!

按以上方面,在新写了network.php这样,我的会员在登录网站的时候,就可以地图式地观看站内各会员的最新动态了。。。

怕麻烦的同志,下载pphuang附件,直接覆盖。前提是:pphuang目录下面的所有文件与你网站所对应的网站文件为UCH1.5正式版未被改动文件!如果你的网站之前由于安装插件而有所改动的话,建议你按上面的操作教程来进行,以免对你的网站造成不必要的麻烦,感觉感谢!

附件地址:http://www.siqiji.cn/forum/thread-2173-1-1.html不要又说没看到了。。。
 楼主| pphuang 发表于 2009-5-26 15:29:56 | 显示全部楼层
占位,楼上比我快得多了!
回复

使用道具 举报

msnal 发表于 2009-5-26 20:21:55 | 显示全部楼层
这么长。。。
回复

使用道具 举报

120cm 发表于 2009-5-26 20:55:06 | 显示全部楼层
好长,没有附件下载?
回复

使用道具 举报

落寞纷繁 发表于 2009-5-26 21:13:39 | 显示全部楼层
不错支持
回复

使用道具 举报

 楼主| pphuang 发表于 2009-5-26 22:53:49 | 显示全部楼层
需要附件者请前往我的论坛下载。免费的哦:http://www.siqiji.cn/forum/thread-2173-1-1.html
回复

使用道具 举报

GGGHHH 发表于 2009-5-26 23:14:52 | 显示全部楼层
留个脚印
回复

使用道具 举报

 楼主| pphuang 发表于 2009-5-26 23:22:27 | 显示全部楼层
请各位仔细看原贴。在DZ论坛附件严格限制的条件下,我也只能把附件放在我的论坛了,不过,免费下载的,放心好了,有问题,请到我的论坛进行反馈,我会第一时间回复你!非常感谢!

再次强调本贴原地址:http://www.siqiji.cn/forum/thread-2173-1-1.html
回复

使用道具 举报

 楼主| pphuang 发表于 2009-5-31 22:34:32 | 显示全部楼层
回复

使用道具 举报

haitao21203 发表于 2009-6-10 22:44:45 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 00:06 , Processed in 0.029840 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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