Google API大全之静态图引用Word格式文档下载.docx

上传人:b****5 文档编号:21022582 上传时间:2023-01-27 格式:DOCX 页数:20 大小:417.51KB
下载 相关 举报
Google API大全之静态图引用Word格式文档下载.docx_第1页
第1页 / 共20页
Google API大全之静态图引用Word格式文档下载.docx_第2页
第2页 / 共20页
Google API大全之静态图引用Word格式文档下载.docx_第3页
第3页 / 共20页
Google API大全之静态图引用Word格式文档下载.docx_第4页
第4页 / 共20页
Google API大全之静态图引用Word格式文档下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

Google API大全之静态图引用Word格式文档下载.docx

《Google API大全之静态图引用Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Google API大全之静态图引用Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。

Google API大全之静态图引用Word格式文档下载.docx

要注意的是,调用GoogleMaps静态地图同样要申请地图的API_Key,申请的地址为:

Maps的授权码是相同的。

在填入使用者申请的API_Key之后,上例我们所调用的静态地图对应的访问地址如下:

orangea&

zoom=13&

size=500x300&

key=YOUR_KEY_HERE

通过静态地图调用API,可以进一步增加电子地图的应用范围,同时也使获得地图的方法变得更为简洁直接。

33.2 

GoogleStaticMapsAPI语法格式

33.2.1 

GoogleStaticMapsAPI常用参数

GoogleStaticMaps的图像都是通过特定的URL地址返回的,在URL请求中用户可以指定请求的位置、地图大小、缩放级别、地图类型及标记点的设置。

常见的GoogleStaticMaps请求地址串可以表示如下:

由于地图请求是由标准HTTP提交的,所有参数都须要使用&

字符作为间隔,其中某些参数是可选的。

地址串中所附带的参数及其取值如下。

Center:

如果图标没有出现在地图中央,需要用center来定义地图的中心位置,后面所跟的纬度和经度须要使用逗号作为分隔。

Zoom:

用以定义地图的缩放级别,可以通过数字选择0~18的缩放级别。

Size:

用以定义地图图像的大小,分别用横向和纵向的像素来表示。

Format(可选):

定义生成的影像格式。

默认情况下,静态地图API将生成GIF格式的图像,其他可选的格式类型为JPEG和PNG类型。

相对来说,GIF和PNG格式包含的图像细节更多,但JPEG格式的压缩比更大。

Maptype(可选):

可以选择的地图类型包含有卫星影像、地形图、混合地图及适于便携设备的地图。

在默认情况下,我们获得的是正常的行政交通图。

Markers(可选):

用来定义附加在地图图层之上的一个或多个地点标记,标记之间可以使用标记分隔符(|)进行划分。

Path(可选):

通过两点或多点的链接来定义显示在地图之上的道路路径,同样,一系列的点之间也使用标记(|)来进行分隔。

Frame(可选):

为返回的地图图像添加一个可以设定颜色的边界。

Key:

填入为站点申请的GoogleMapsAPI授权码,这个APIKey与使用GoogleMaps时的授权码相同,可以在Google开发者站点免费申请。

在使用GoogleStaticMapsAPI时,我们还须要注意的是目前GoogleStaticMapsAPI的查询调用限制为每天1000次请求,这样的设定是为了限制用户大量获取静态地图而移作他用。

如果发现有滥用API获取静态地图的站点,Google可能会暂停对站点地图请求的响应。

33.2.2 

GoogleStaticMapsAPI的支持服务

在使用GoogleStaticMapsAPI来获取地图时,往往仅知道请求位置的地址而对其所处的经纬度信息并不了解。

这样,我们可以通过Google提供的地址译码(Geocoding)服务来将用户输入的地址转换成为对应的经纬度坐标。

在GoogleMaps的API之中已经包含了地址译码功能,使用者可以在HTTP请求中调用GClientGeocoder对象来完成地址译码的操作。

在Google提供的官方示例(geocoding-simple.html)中,我们可以使用如下的代码来完成输入地名的地址译码操作,其地址译码界面如图33-3所示。

(点击查看大图)图33-3 

地名到经纬度的地址译码操作

上述的地址译码操作是通过GoogleMapsAPI的调用实现的。

首先,在地图初始化时,通过GMap2类生成一幅新的地图,之后使用GClientGeocoder类创建地理译码器的实例,与Google服务器建立连接来获得地址译码的转换。

代码段如下:

functioninitialize(){

if(GBrowserIsCompatible()){

map=newGMap2(document.getElementById("

map_canvas"

));

map.setCenter(newGLatLng(37.4419,-122.1419),13);

geocoder=newGClientGeocoder();

}

目前,中国国内地图的地址解析器支持市、县、区级别,在美国可以支持到街区门牌号。

在接下来的showAddress函数中,我们取得geocoder返回结果对应的经纬度,进行判断之后将得到的经纬度标注在地图之上。

其代码如下:

functionshowAddress(address){

if(geocoder){

geocoder.getLatLng(

address,

function(point){

if(!

point){

alert(address+"

notfound"

);

}else{

map.setCenter(point,13);

varmarker=newGMarker(point);

map.addOverlay(marker);

marker.openInfoWindowHtml(address);

转换地址到经纬度后,我们就可以根据得到的经纬度设置地图显示的中心位置,以及进行记号点标注等操作。

当然,如果不希望在代码中调用GClientGeocoder类来实现地址译码的功能,还可以直接通过浏览器URL提交的HTTP请求来获得地址译码。

在URL中实现地址译码仅须要将请求提交到:

q(必需):

后面跟将要译码的地址字串。

Key(必需):

申请的GoogleAPI授权码。

output(必需):

生成输出文件的格式,可选的格式为json(默认)、xml、kml、csv。

gl(可选):

可以用来指定国家代码。

下面举例说明。

我们通过请求得到Google总部山景城的经纬度位置如下:

现在得到的输出格式是XML文档的形式,其代码如下:

<

?

xmlversion="

1.0"

encoding="

UTF-8"

?

>

kmlxmlns="

Response>

name>

1600AmphitheatreParkway,MountainView,CA<

/name>

Status>

code>

200<

/code>

request>

geocode<

/request>

/Status>

Placemarkid="

p1"

address>

1600AmphitheatrePkwy,MountainView,CA94043,USA<

/address>

AddressDetailsAccuracy="

8"

xmlns="

urn:

oasis:

names:

tc:

ciq:

xsdschema:

xAL:

2.0"

Country>

CountryNameCode>

US<

/CountryNameCode>

AdministrativeArea>

AdministrativeAreaName>

CA<

/AdministrativeAreaName>

Locality>

LocalityName>

MountainView<

/LocalityName>

Thoroughfare>

ThoroughfareName>

1600AmphitheatrePkwy<

/ThoroughfareName>

/Thoroughfare>

PostalCode>

PostalCodeNumber>

94043<

/PostalCodeNumber>

/PostalCode>

/Locality>

/AdministrativeArea>

/Country>

/AddressDetails>

Point>

coordinates>

-122.085121,37.423088,0<

/coordinates>

/Point>

/Placemark>

/Response>

/kml>

如果不指定输出格式,则按照默认的JSON格式输出内容。

上述内容的JSON格式输出后,我们在JSON格式化工具(

(点击查看大图)图33-4 

JSON格式化后查看包含的内容

除此之外,在GoogleMaps提供的服务中,还包含XML和数据解析服务、使用Flash的方式展现街景图,以及GoogleEarth浏览器插件的支持。

更多的细节可以参考GoogleMaps提供服务的页面:

对于熟悉Ruby和Rails的开发者,进行地图Mashup应用开发可借助名为StaticGmaps(http:

//static-gmaps.rubyforge.org/)的gems封装,它为GoogleStaticMapsAPI提供了Ruby的访问接口,可帮助用户节省开发过程中的工作量。

33.3 

GoogleStaticMapsAPI示例

33.3.1 

开发环境简介

在了解GoolgeStaticMapsAPI基本函数的使用之后,下面着手制作一个可以调用静态地图的小程序,应用所要实现的功能描述如下:

设计一个包含输入框、确认按钮和静态地图图片显示面板的应用程序界面。

应用启动后,用户可以在文本框中输入所要查找的地名。

点击确定按钮之后,组合静态地图的URL请求串,取得请求的静态地图,并显示在窗体之中。

静态地图生成后,可以保存在程序运行的当前位置目录中。

简单的需求描述如上,让我们看看上述嵌入GoolgeStaticMaps的小应用是如何编码实现的。

为了保持应用的简明和趣味性,在这里我们使用Python语言、PyQt图形库,以及NetBeansIDE的NBPython编程环境来完成这个调用静态地图的小例子。

Python语言和Qt图形库开发的应用程序具备跨平台特性,示例中我们使用Windows开发环境,开发所使用的软件环境搭建如下:

NBPythonMilestone6

Python2.5.2Windowsinstaller

http:

//www.python.org

PyQt(PyQt-Py2.5-gpl-4.4.3-1.exe)

//www.riverbankcomputing.co.uk/

在开始之前,让我们对于Qt及程序中将使用的PyQt图形库先有个简单的认识。

Qt是一套成熟稳定的GUI工具箱,Qt跨平台的图形库可以运行在Windows、Linux、MacOSX及多种便携式设备平台之上。

著名的GoogleEarth应用的界面也是使用Qt图形库进行设计的,Qt图形库分别针对Linux、Windows及Mac平台发布了不同的版本。

Qt在设计上具备良好的面向对象结构,以及众多实用的API。

而PyQt则为Python程序员开发基于Qt图形库的跨平台应用搭建了桥梁。

相对于Python默认使用的图形库Tk(由Tkinter绑定),PyQt具备众多的优点,如Qt使用信号/插槽(Signals/Slots)的机制在窗口构件(以及其他对象)之间传递事件和消息,让编写事件触发的代码段变得十分轻松;

并且PyQt包含300多个类和近6000个函数和方法,功能十分强大。

至于PyQt的安装,相对来说较为复杂,通常须要下载源代码之后在本机编译为二进制的代码,编译的过程在Linux环境下出错的概率较小,但在Windows环境下编译时往往须要多尝试几次才可以编译通过。

在环境搭建方面不必有过多的担心,在这里我们使用PyQt提供的已经编译好的二进制安装版本PyQt-Py2.5-gpl-4.4.3-1.exe。

除了Python的解析器须要单独安装之外,这个版本包含了使用PyQt进行应用开发需要的所有要素,包含的主要要素如下:

PyQt库。

Qt库。

QtDesigner(界面设计器)。

QtAssistant(编程助手)。

QtLinguist(国际化翻译工具)。

pyuic4(ui界面文件的编译器)。

QScintilla(Scintilla编辑器类的Qt接口)。

编程环境使用了NetBeans的PythonIDE,NBPython可以作为一个插件加入到NetBeans环境之中,也可以单独下载46MB的NetbeansPython专用IDE。

在这个IDE中,计划添加的Python支持功能有:

语法高亮显示。

代码补全。

Python与Jython的支持。

PyUnit单元测试支持。

Python代码断点调试。

Python类库管理。

Python控制台。

Python脚本执行。

Python版本管理。

NetBeans的PythonIDE同样提供了不同平台下的安装版本,在Windows环境下的运行版本如图33-5所示。

(点击查看大图)图33-5 

NetBeans的PythonIDE

使用Qt进行跨平台GUI应用开发的优势之一就是它有方便的Qt界面设计器,可以很快地设计出美观大方的程序窗体布局。

下面我们打开QtDesigner,新建一个对话框,然后在对话框中添加一个名为Address的Lable标签(QLable)、一个文本输入框(QLineEdit),以及一个确定按钮(QPushButton)。

在应用程序的窗口主体也加入一个Lable标签,用于显示从Google获得的静态地图。

最后使用栅格布局(GridLayout)调整各个部件的位置。

设计好之后的对话框如图33-6所示。

在使用Qt设计器的同时,还可以随时点击"

窗体-预览"

(Ctrl+R)来预览当前窗体的模样。

窗体的预览如图33-7所示。

保存之后,Qt设计器生成了一个拓展名为.ui的文件。

在Qt中,UI文件以XML的格式记录了QTDesigner所生成界面的相关内容,包含在UI文件中的内容如下:

(点击查看大图)图33-6 

Qt设计器中进行应用程序窗体设计

(点击查看大图)图33-7 

Qt设计器中预览设计的窗体

Widget属性,包含的元素(如按钮、文本框、下拉列表,等等),Layout布局方式等相关属性。

引用的头文件(使用C++时会编译生成头文件)。

变量。

槽(Slot)。

函数。

UI文件保存之后,可以使用Qt提供的UIC(userinterfacecompiler)编译器将UI文件内容转换成标准.h和.cpp文件。

在PyQt中,UI文件将被转换为.py文件。

UI文件编译器位于PyQt的安装目录(Windows环境下,通常是C:

\Python25\Lib\site-packages\PyQt4)中,在终端模式的命令行提示符下,使用目录中的pyuic4.bat命令即可将UI文件编译为Python的代码。

使用方法如下:

pyuic4.batUI_FILE-oPY_FILE

在这里,UI_FILE为UI文件的路径,PY_FILE为计划生成的Python文件的路径。

例如,可以使用ui_myapp.py来命名生成的Python文件。

除此之外,pyuic4命令后还可以添加参数。

参数-p(-preview)将会生成UI文件转换后的预览,而不生成代码文件;

参数-x(-execute)生成用来测试和显示类的额外代码;

参数-d(-debug)用以显示调试输出。

我们将UI生成的Python代码命名为ui_staticmap.py。

下面在NetBeans中新建一个工程,为设计的窗体添加事件相应代码。

NetBeans的PythonIDE安装之后,首先须要在菜单Tools-PythonPlatforms中设置Python解释器的路径,如图33-8所示。

(点击查看大图)图33-8 

IDE中设置Python解释器路径

33.3.2 

定制静态地图应用

下面我们在NetBeans的PythonIDE中新建一个Python工程,点击创建工程,出现的界面如图33-9所示。

(点击查看大图)图33-9 

新建Python工程

输入工程的名称为staticmap,PythonIDE会为我们创建名为staticmap.py的代码文件,并将其设定为主文件,如图33-10所示。

(点击查看大图)图33-10 

设定工程名称和存储位置

下面为生成的主文件staticmap.py添加相应的代码,首先在程序的开始加载所需的模块,引用部分代码段如下:

fromPyQt4.QtCoreimport*

fromPyQt4.QtGuiimport*

importurllib

引入QtCore和QtGui所包含的类,PyQt4的基本模块都包含在QtGui中。

由于静态地图的请求还须要对URL地址进行解析,所以再引入urllib类库处理HTTP相关的部分。

主程序部分也不复杂,其代码如下:

defmain():

app=QApplication(sys.argv)

w=MyWindow()

w.show()

sys.exit(app.exec_())

对于PyQt4程序来说,要创建一个application对象。

application类位于QtGui模块中,程序的主体就是这个QApplication,sys.argv用于传入命令行参数。

MyWindow是用于定义窗体的类,w.show()的作用是将定义的窗体显示出来。

最后,主程序会进入application的事件循环。

循环不断从窗口接受要处理的事件,然后将其分发给对应的事件处理方法。

事件循环的终止须要通过调用exit()方法或销毁widget来结束,调用sys.exit()方法可以确保程序正确退出,并且在退出时会告知系统。

由于exec是python的一个关键字,所以在exec_()方法后会有一个下划线来表示与关键字的区别。

在MyWindow类中,我们指定QDialog是刚才在Qt设计器中通过UI文件生成的Ui_Dialog(须要与UI设计器中指定的名称保持一致),其代码如下:

classMyWindow(QDialog):

def__init__(self,*args):

QDialog.__init__(self,*args)

self.ui=Ui_Dialog()

self.ui.setupUi(self)

#createconnection

self.connect(self.ui.pushButton,SIGNAL("

clicked()"

),self.run_command)

__init__内的代码段定制界面的外观,我们引用了Qt设计器中通过UI文件编译生成的Ui_Dialog。

当然,如果不是很复杂的界面,完全可以在函数中通过手工编写来加入窗体中要显示的文本框、按钮等部件。

在这里,我们通过信号槽的机制将确认按钮与接下来执行命令的操作run_command进行连接,也就是说,当按钮被点击时,触发的事件交由run_command函数进行处理。

run_command函数的代

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1