这一篇主要实现怎么调用Google maps API中的地址解析核心类GClientGeocoder:

主要功能包括地址解析、反向解析、本地搜索、周边搜索等,

我这里主要有两个实例:

实例一、当你搜索一个地名的时候,解析它的经纬度信息,并在地图上描点

实例二、搜索你的中心点所在区域的学校、商店等信息,并在地图上描点

首先来讲讲实例一怎么实现:

1、  加载google api

<script

type="text/javascript"src="http://ditu.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA&hl=zh-CN"></script>

2、  定义通用的全局变量和公共方法

var map;//GMap2的核心对象

var geocoder = null;//用来解析的

var markers = new Array();//用来存放GMarker

//======在地图上描点的方法============

function createMarker(icon, point, html, index) {

var letter = String.fromCharCode("A".charCodeAt(0) + index);

icon.image = "http://ditu.google.com/mapfiles/marker" + letter + ".png";

var marker = new GMarker(point, icon);

GEvent.addListener(marker, "click", function() {

marker.openInfoWindowHtml(html);

});

markers.push(marker);

map.addOverlay(marker);

}

//查询点击事件

function showLocation() {

map.clearOverlays();

document.getElementById('divOutput').innerHTML = "搜索中...";

var address = document.getElementById('txtAddress').value;

geocoder.getLocations(address, cb_showLocation);//搜索的核心方法

}

//回调事件,主要在界面上描点和右侧产生列表信息

function cb_showLocation(result) {

// 显示结果

if (result.Status.code == G_GEO_SUCCESS)

{

document.getElementById("divOutput").innerHTML = "成功(" + result.Placemark.length + ")<br />";

var icon = new GIcon(G_DEFAULT_ICON);

var lat, lng, point, address, marker;

for (var i = 0; i < result.Placemark.length; i++) {

lat = result.Placemark[i].Point.coordinates[1]; // lat

lng = result.Placemark[i].Point.coordinates[0]; // lng

address = result.Placemark[i].address; // 地址

point = new GLatLng(lat, lng);

document.getElementById("divOutput").innerHTML += ((i + 1) + " " + address + " <small>" + point.toString() + "</small><br />");

createMarker(icon, point, address, i);

}

}

else {

document.getElementById("divOutput").innerHTML = result.Status.code;

}

}

3、  地图初始化

function init() {

//检查浏览器的兼容性.

if (GBrowserIsCompatible()) {

map = new GMap2(document.getElementById("map_canvas"));

//设置地图的中心坐标.

var loc = new GLatLng(39.990168, 116.295304);

map.setCenter(loc, 5);

//创建带有可在四个方向平移、放大、缩小的按钮,以及缩放滑块的控件。

map.addControl(new GLargeMapControl());

//创建带有切换地图类型的按钮的控件。

map.addControl(new GMapTypeControl());

//设置地图支持滚轮

map.enableScrollWheelZoom();

//实例化一个地址解析

geocoder = new GClientGeocoder();

}

}

4、  定义页面加载事件和卸载事件

window.onload = init;

window.onunload = GUnload;

//========主界面==================

<!-- 地图画板 -->

<input type="text" id="txtAddress" name="txtAddress" size="40" /><input type="button" value="查询" onclick="showLocation();" />

<div id="map_canvas" style="width: 600px; height: 500px ;float:left;"></div>

<div id="divOutput" style="float:left;" ></div>

//==============================

主要第一个例子就完成了,效果如下

实例二

1、加载google api,这里用到三个

<script   type="text/javascript" src="http://ditu.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA&hl=zh-CN"></script>

<script type="text/javascript" src="http://www.google.com/uds/api?file=uds.js&v=1.0&key=ABQIAAAAzr2EBOXUKnm_jVnk0OJI7xSosDVG8KKPE1-m51RBrvYughuyMxQ-i1QfUnH94QxWIa6N4U6MouMmBA&hl=zh-CN"></script>

<script type="text/javascript" src="http://www.google.com/uds/solutions/localsearch/gmlocalsearch.js"></script>

2、通用核心类、全局变量和公共方法

var map;

var hasMarker = false;

var markers = new Array();

var KMapSearch = window.KMapSearch = function(map_, opts_)

{

this.opts = { keyWord: opts_.keyWord || "", latlng: opts_.latlng || new GLatLng(31, 121), autoClear: opts_.autoClear || true, icon:opts_.icon || new GIcon(G_DEFAULT_ICON) };

this.map = map_;

this.gLocalSearch = new google.search.LocalSearch();

this.gLocalSearch.setCenterPoint(this.opts.latlng);

this.gLocalSearch.setResultSetSize(GSearch.LARGE_RESULTSET);

this.gLocalSearch.setSearchCompleteCallback(this, myTips);

}

//请除所有查询结果

KMapSearch.prototype.clearAll = function() {

for (var i = 0; i < markers.length; i++) { this.map.removeOverlay(markers[i]); }

markers.length = 0;

}

//开始查询

KMapSearch.prototype.execute = function(latLng) {

if (latLng) { this.gLocalSearch.setCenterPoint(latLng); }

this.gLocalSearch.execute(this.opts.keyWord);

}

//取得查询结果,并以DIV的方式展示

KMapSearch.prototype.getResult = function(result, i) {

var container = document.createElement("div");

container.className = "list";

var myRadom = (new Date()).getTime().toString() + Math.floor(Math.random() * 10000);

container.id = myRadom;

container.innerHTML = i + "、" + result.title + "<br />地址:" + result.streetAddress;

//this.createMarker(new GLatLng(result.lat, result.lng), result.html, myRadom);

return container;

}

3、载入事件和辅助方法

//载入

function OnLoad() {

if (GBrowserIsCompatible()) {

map = new GMap2(document.getElementById("map_canvas"));

map.addControl(new GLargeMapControl());

map.addControl(new GMenuMapTypeControl());

map.addControl(new GOverviewMapControl());

map.enableScrollWheelZoom();

map.setCenter(new GLatLng(39.990168, 116.295304), 10);

//添加右键单击事件

GEvent.addListener(map, "singlerightclick", function(point) {

var initPt = map.fromContainerPixelToLatLng(point);

map.clearOverlays();

marker = new GMarker(initPt, { draggable: true });

if (hasMarker) {

marker.setLatLng(initPt);

map.panTo(initPt);

}

else {

//拖拽事件

GEvent.addListener(marker, "dragend", function() {

initPt = marker.getLatLng();

map.panTo(initPt);

searchMap(initPt);

});

hasMarker = true;

}

map.addOverlay(marker);

searchMap(initPt);

});

}

}

//点击提示信息

function myTips() {

var content = "";

var resultdiv = document.getElementById("map");

for (j = 0; j < markers.length; j++) {

map.removeOverlay(markers[j]);

}

markers.length = 0;

var results = this.gLocalSearch.results;

var icon = new GIcon(G_DEFAULT_ICON);

var savedResults = document.getElementById("schollContainer");

if (this.gLocalSearch.results)

{

if (this.opts.autoClear) {

savedResults.innerHTML = "";

}

for (var i = 0; i < results.length; i++) {

content = '<p>' + '名称:' + results[i].title + '<br />' + '地址:' + results[i].streetAddress + '<br />' + '坐标:' + results[i].lat + ',' +results[i].lng + '</p>';

myCreateMarker(new GPoint(results[i].lng, results[i].lat), icon, content, i);

savedResults.appendChild(this.getResult(this.gLocalSearch.results[i], i + 1));

}

}

}

//地图上标注

function myCreateMarker(point, icon, html, index) {

var letter = String.fromCharCode("A".charCodeAt(0) + index);

icon.image = "http://ditu.google.com/mapfiles/marker" + letter + ".png";

var marker = new GMarker(point, icon);

GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); });

markers.push(marker);

map.addOverlay(marker);

}

//在给定的坐标附近搜索指定的关键字

function searchMap(initPt) {

var myIcon = new GIcon(G_DEFAULT_ICON);

var mapSearch = new KMapSearch(map, { latlng: initPt, icon: myIcon, keyWord: "驾校" });

mapSearch.clearAll();

mapSearch.execute();

}

5、 最后

window.onload = OnLoad;

window.onunload = GUnload;

//========主界面==================

<!-- 地图画板 -->

<div id="map_canvas" style="width:640px; height:480px ;float:left;"></div>

<div style="width:4px; height:480px ;float:left;"></div>

<div id="searchResult">驾校:<div id="schollContainer"></div></div>

//==============================

搞定, 最后的效果如图:

源码实例下载

Google maps API开发(二)(转)的更多相关文章

  1. Google maps API开发

    原文:Google maps API开发 Google maps API开发(一) 最近做一个小东西用到google map,突击了一下,收获不小,把自己学习的一些小例子记录下来吧 一.加载Googl ...

  2. Google maps API开发(一)(转)

    一.加载Google maps API <script type="text/javascript" src="http://ditu.google.com/map ...

  3. Google Maps API Web Services

    原文:Google Maps API Web Services 摘自:https://developers.google.com/maps/documentation/webservices/ Goo ...

  4. Google Maps API V3 之绘图库 信息窗口

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  5. Google Maps API V3 之 图层

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  6. Google Maps API V3 之 路线服务

    Google官方教程: Google 地图 API V3 使用入门 Google 地图 API V3 针对移动设备进行开发 Google 地图 API V3 之事件 Google 地图 API V3 ...

  7. Google Maps API 将开始收费

    Google Maps API 将开始收费 一.总结 一句话总结:国外的话openstreetmap或许不错 国内的话就高德吧 二.Google Maps API 将开始收费 曾经免费的 Google ...

  8. 在云平台上基于Go语言+Google图表API提供二维码生成应用

    二维码能够说已经深深的融入了我们的生活其中.到处可见它的身影:但通常我们都是去扫二维码, 曾经我们分享给朋友一个网址直接把Url发过去,如今我们能够把自己的信息生成二维码再分享给他人. 这里就分享一下 ...

  9. google maps api申请的问题

    现在已经改由统一的GOOGLE API控制台进行所有GOOGLE API的管理了. 方法是使用Google帐号登入 https://code.google.com/apis/console. 然后在所 ...

随机推荐

  1. [POJ 3370] Halloween treats

    Halloween treats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7143   Accepted: 2641 ...

  2. String中intern的方法

    首先查看官方API那个的解释: ——————————————————————————————————————— intern public String intern() 返回字符串对象的规范化表示形 ...

  3. 如何在一个frame中调用另一个frame中的javascript函数

    1.htm <script language="javascript">function test(){alert("测试")}</scrip ...

  4. Logminer实战

    相信许多DBA同学都曾遇到过这种情况,由于各种各样的原因,必须对数据库做不完全恢复:但又不确定应该恢复到哪个时间点或SCN才合适,因而反复的执行不完全恢复,悲剧掉了一地,中枪的有木有?温馨提示下,在生 ...

  5. 单点登录系统(SSO)的开发思路

    单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...

  6. Apache log4cxx用法

    一个好的系统通常需要日志输出帮助定位问题 .Apache基金会的log4cxx提供的完善的Log分级和输出功能.所以准备把该Log模块加入的系统中. 使用log4cxx需要满足一下功能: 1.提供日志 ...

  7. VTL说明文档

    关于这个指南 这个指南是针对Velocity模版语言(VTL)的说明.更多其它的信息,请参考Velocity用户指南(http://velocity.apache.org/engine/release ...

  8. HOG学习(一)

    关于HOG里的特征维度 参考 http://gz-ricky.blogbus.com/logs/85326280.html http://blog.sina.com.cn/s/blog_7897fb6 ...

  9. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  10. 609C Load Balancing

    题意: ”平均数“的意思是:最大数和最小数之间的差值为0或1: 先求“平均”数组,再相减. #include<iostream> #include<cstdlib> #incl ...