Elton's Blog

Tag: Google

在Mac OSX下安装和使用GO语言

by on 八.13, 2010, under Agile Web Development, Mac

Go语言是Google新推出的结合了动态语言和静态语言优势的一个新兴的语言。下面介绍一下如何在Mac系统下安装和使用这个语言。

设置环境变量

$GOROOT
GO语言的根目录,通常是$HOME/go,当然也可以是任何其他目录。

$GOOS 和 $GOARCH
标明GO语言所在的系统和处理器类型。$GOOS可以是linux, freebsd, darwin (Mac OS X 10.5 or 10.6)和 nacl (Native Client, an incomplete port)。$GOARCH可以是amd64 (64-bit x86, the most mature port), 386 (32-bit x86), arm (32-bit ARM, an incomplete port)。

你可以在你的shell profile中设置这些变量,我是放在了~/.bash_profile里了。

1
2
3
4
export GOROOT=$HOME/go
export GOARCH=amd64
export GOOS=darwin
export PATH=$PATH:$GOROOT/bin

其中, $GOROOT/bin是GO默认的可执行文件的目录,加入到path中方便使用go的各种命令。

再执行

1
source ~/.bash_profile

使最新的配置文件生效。

获得源文件

如果你的系统中没有安装Mercurial(没有安装它,你就无法使用hg命令),那么使用这个命令来安装它:

1
$ sudo easy_install mercurial

然后使用下面的命令,还获得GO语言的源文件

1
$ hg clone -r release https://go.googlecode.com/hg/ $GOROOT

安装GO语言

1
2
$ cd $GOROOT/src
$ ./all.bash

如果一切正常,你应该可以在最后看到类似的结果:

1
2
--- cd ../test
N known bugs; 0 unexpected bugs

撰写第一个Hello,World

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ cat >hello.go <<EOF
package main
 
import "fmt"
 
func main() {
	fmt.Printf("hello, worldn")
}
EOF
 
$ 6g hello.go
$ 6l hello.6
$ ./6.out
hello, world
$

日后更新

Go是一个发展中的语言,它的版本会经常进行更新,可以使用以下命令,保持GO语言是最新版本的

1
2
3
4
$ cd $GOROOT/src
$ hg pull
$ hg update release
$ ./all.bash

Go的官方网站是:http://golang.org

15 Comments :, , , more...

iPhone SDK 3.0 MAPKit使用入门(1) 创建一个MKMapView实例

by on 六.21, 2009, under iPhone

iPhone OS 3.0发布了,MAPKit是其中新增的API,但是Apple并没有公布相应的guide,只有一个相关函数的API。 再网上参考了其他人的例子,试着照猫画虎的做了几个例子。

MAPKit主要的类是MKMapView,它提供了一个嵌入式的地图接口,就像在自带的Maps程序里提供的那样。你可以使用这个类在你的程序中显示地图和操作地图

当你初始化一个map view(MKMapView的实例)的时候,你需要指定一个region(MKCoordinateRegion类型)给这个地图。你可以通过指定map view实例的region属性来设置它的值。region定义了一个中央点和水平和垂直的距离,这个区域显示的大小和比例是根据一个span来调节的。

span(MKCoordinateSpan)定义了指定中央点(point)的map能显示多少内容以及比例尺。 一个大的span的值,将可以展现更多的内容和更小的放大级别,反之则展现更细节的内容和更大的放大级别。

你可以通过设置map view的scrollEnabled 和 zoomEnabled属性来设置是否允许滚动地图和放大缩小地图。

我们先来看一个例子:
创建一个utility application应用程序,在MainViewController.h中引入MapKit/MapKit.h头文件,定义一个MKMapView实体变量

1
2
3
4
5
6
7
8
9
10
#import "FlipsideViewController.h"
#import <mapKit/MapKit.h>
 
@interface MainViewController : UIViewController <flipsideViewControllerDelegate> {
	MKMapView *mapView;
}
 
- (IBAction)showInfo;
 
@end

在MainViewController.m中,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#import "MainViewController.h"
#import "MainView.h"
 
 
@implementation MainViewController
 
 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        // Custom initialization
    }
    return self;
}
 
 
 
 // Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
 - (void)viewDidLoad {
 [super viewDidLoad];
	 mapView = [[MKMapView alloc] initWithFrame:self.view.bounds];
	 mapView.showsUserLocation=TRUE;
	 [self.view insertSubview:mapView atIndex:0];
 }
 
...

就是初始化了一个MKMapView实例,并将它显示在主视图上。
之后就可以执行了, 你可以看到一个标有你当前位置点的小程序。

4 Comments :, , , , more...

Google MAP API 初步尝试

by on 六.17, 2009, under Javascrip

今天看了一下午Google的API,发现还挺简单的。稍微懂点Javascript就可以了。
写了个小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<script src="http://ditu.google.cn/maps?file=api&amp;v=2&amp;key=your_Google_API_key&sensor=true"
            type="text/javascript"></script>
    <script type="text/javascript">
 
    var map = null;
    var geocoder = null;
 
    function initialize() {
      if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        map.setCenter(new GLatLng(31.22, 121.48), 13);
        geocoder = new GClientGeocoder();
 
        showAddress("上海市淮海中路300号");
      }
    }
 
    function createMarker(point,msg) {
    	var marker = new GMarker(point);
  		var message = msg;
  		GEvent.addListener(marker, "click", function() {
    		var myHtml = msg;
    		map.openInfoWindowHtml(point, myHtml);
  		});
  		return marker;
	}
 
    function showAddress(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert("不能解析: " + address);
            } else {
              map.setCenter(point, 15);
              var marker = createMarker(point,address);
              map.addOverlay(marker);
            }
          }
        );
      }
    }
</script>
...
<body onload="initialize()" onunload="GUnload()">
 
	<form action="#" onsubmit="showAddress(this.address.value); return false">
      <p style="margin:0">
        <input type="text" size="38" name="address" value="上海市卢湾区" />
        <input type="submit" value="Go!" />
      </p>
      <div id="map_canvas" style="width: 320px; height: 400px"></div>
    </form>
 
...

第一个script是来加载Google Map的库

1
2
3
<script src="http://ditu.google.cn/maps?file=api&v=2&key=abcdefg&sensor=true_or_false"
        type="text/javascript">
</script>

http://ditu.google.cn/maps?file=api&v=2&key=abcdefg 网址指向包含使用 Google 地图 API 所需所有符号和定义的 JavaScript 文件的位置。您的页面必须包含指向此网址的 script 标签,使用注册 API 时收到的密钥。在此示例中,该密钥显示为“abcdefg”。

请注意,我们也传递 sensor 参数以指明此应用程序是否使用传感器来确定用户位置。在此示例中,我们将其设为变量“true_or_false”以强调您必须显式地将此值设置为 true 或 false。

设置地图 DOM 元素

1
<div id="map_canvas" style="width: 320px; height: 400px"></div>

要让地图在网页上显示,必须为其留出一个位置。通常,我们通过创建名为 div 的元素并在浏览器的文档对象模型 (DOM) 中获取此元素的引用执行此操作。

在上述示例中,我们定义名为“map_canvas”的 div,并使用样式属性设置其尺寸。地图会自动使用容器尺寸调整自身的尺寸,除非使用构造函数中的 GMapOptions 显式地为地图指定尺寸。

GMap2 – 基本对象

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

GMap2 类是表示地图的 JavaScript 类。此类的对象在页面上定义单个地图。(可以创建此类的多个实例,每个对象将在页面上定义一个不同的地图。)我们使用 JavaScript new 操作符创建此类的一个新实例。

当创建新的地图实例时,在页面中指定一个 DOM 节点(通常是 div 元素)作为地图的容器。HTML 节点是 JavaScript document 对象的子对象,而且我们通过 document.getElementById() 方法获得该元素的引用。

初始化地图

1
map.setCenter(new GLatLng(31.22, 121.48), 13);

通过 GMap2 构造函数创建地图后,我们需要再做一件事:将其初始化。初始化通过地图的 setCenter() 方法完成。setCenter() 方法要求有 GLatLng 坐标和缩放级别,而且必须先发送此方法,然后再在地图上执行其他任何操作,包括设置地图本身的其他任何属性。

setCenter()的第二个参数表示放大级别,从0到20,0是最小,20是最大。

加载地图

1
<body onload="initialize()" onunload="GUnload()">

当 HTML 页面显示时,文档对象模型 (DOM) 即会扩展,接收其他外部图像和脚本并将其合并到 document 对象中。为确保我们的地图仅放置在完全加载后的页面上,我们仅在 HTML 页面的 元素收到 onload 事件后才执行构造 GMap2 对象的函数。这样做可以避免出现不可预期的行为,并使我们可以对地图绘制的方式和时间进行更多控制。

onload 属性是事件处理程序的示例。Google 地图 API 还提供了大量事件可以用来“监听”状态变化。请参阅地图事件和事件监听器以了解更多信息。

GUnload() 函数是用来防止内存泄漏的实用工具函数。

地址解析

GClientGeocoder类用来解析地址到经纬度,需要先创建这个类的实例

1
geocoder = new GClientGeocoder();

然后调用getLatLng(address:String, callback:function)方法来在地图上定位。

getLatLng(address:String, callback:function) 向 Google 服务器发送请求,对指定的地址进行地址解析。如果地址已成功定位,则用 GLatLng 点调用用户指定的回调函数。否则,向回调函数提供一个 null 点。如果地址不明确,则仅向回调函数传递最匹配的点。

1
2
3
4
5
6
7
8
9
10
11
12
geocoder.getLatLng(
          address,
          function(point) {
            if (!point) {
              alert("不能解析: " + address);
            } else {
              map.setCenter(point, 15);
              var marker = createMarker(point,address);
              map.addOverlay(marker);
            }
          }
        );

GMarker类用来生成标记,就是地图中的那个红点,它可以有一个信息窗口,通过openInfoWindow方法来打开。

1
var marker = new GMarker(point);

通过调用GMap2类的addOverlay(overlay:GOverlay) 方法,给地图添加一个叠加层,用来显示上面定义的标记。

通过GEvent类的addListener方法,为标记添加鼠标点击事件的监听,当在标记上按下鼠标的时候,显示信息窗口。

1
2
3
4
GEvent.addListener(marker, "click", function() {
    		var myHtml = msg;
    		map.openInfoWindowHtml(point, myHtml);
  		});

可以在这里查看效果

4 Comments :, , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit my friends!

A few highly recommended friends...