Google Geocoding API 请求必须采用以下形式:
http://maps.google.com/maps/api/geocode/output?parameters
中,output 可以是json或xml
Google Geocoding API 使用以下网址参数定义地址查询请求:
latlng- 您希望获取的、距离最近的、可人工读取地址的纬度/经度文本值。
address-要查询的地址
sensor- 指示地址解析请求是否来自装有位置传感器的设备。该值必须为 true 或 false。
1. 知道地址获取经纬度
http://maps.googleapis.com/maps/api/geocode/json?address=地址&sensor=false
2. 知道经纬度获取地址
http://maps.google.com/maps/api/geocode/xml?latlng=36.60991,114.49401&language=zh-CN&sensor=false
经纬度书写的顺序为(纬度,经度)。
[文章作者]曾健生
[作者邮箱]zengjiansheng1@126.com
[作者QQ]190678908
[博客] http://blog.csdn.net/newjueqi
http://blog.sina.com.cn/h6k65
一:数组NSArray
NSArray可以存储任何objective-c的对象。当然对于int,float这些对象无法保存,另外nil对象也不能保存。
+ (id)arrayWithObjects:(id)firstObj, ...这个是产生一个数组的通常方法。
通过索引获取数组中的一个对象。- (id)objectAtIndex:(NSUInteger)index
遍历数组,会通过下面的例子来说明:
NSArray * array = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];
NSString * tmp = [array objectAtIndex:2];
//遍历数组
for (NSString * string in array) {
NSLog(@"array:%@",string);
}
二:可变数组:
跟NSString和NSMutableString的关系一样,如果需要对数组的值进行删除或者重置操作,需要用到可变数组 NSMutableArray。
+ (id)arrayWithCapacity:(NSUInteger)numItems 创建一个指定初始化长度的数组。
- (void)addObject:(id)anObject 添加一个元素。
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index 在指定位置添加一个元素。
- (void)removeObjectAtIndex:(NSUInteger)index 删除一个数组元素。
这里注意一点的是创建数组指定的参数并不是说数组的最大容量,系统只是根据这个值来分配一个初始的内存大小,如果有更多的元素,只管加就是了,下面的例子演示了添加更多的元素是完全ok的。
NSMutableArray * array2 = [NSMutableArray arrayWithCapacity:3];
for (int i=0; i<5; i++)
{
NSString * test = [NSString stringWithFormat:@"object %d",i];
[array2 addObject:test];
}
for (NSString * tmp in array2)
{
NSLog(@"array:%@",tmp);
}
输出:
array:object 0
array:object 1
array:object 2
array:object 3
array:object 4
上面的例子中,初始化指定的长度是3,我们实际添加了5个元素。
三:NSDictionary和NSMutableDictionary。字典又称散列表或者关联数组
不用我说,你大概就明白了,NSMutableDictionary 于NSDictionary的区别是可变。
dictionaryWithObjectsAndKeys: 创建一个字典。
- (id)objectForKey:(id)aKey 获取相应关键字的值。
NSMutableDictionary常用的几个函数:
+ dictionaryWithCapacity: 创建一个字典
setObject:forKey: 增加一个元素,若该key存在,则替换
removeObjectForKey: 删除一个元素。
四:如何往NSArray和NSDictionary中添加基本类型数据。
我们说了,NSArray和NSDictionary只能保存对象,不能保存基本数据类型,如int,float,或者struct,要保存这些的话,就需要对其进行封装一下:
这里介绍两个封装类:
1:NSNumber。
+ numberWithChar:
+ numberWithFloat:
+ numberWithInt:
+ numberWithBool:
对应的获得方法:
– charValue
– floatValue
– intValue
– boolValue
例子:
NSNumber * number;
number = [NSNumber numberWithInt:34];
[array addObject:number];
2:NSValue
通常用来包装NSSzie,NSRect,NSPoint,和你自己创建的struct。
+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type 创建一个value。
传递的第一个参数是你想要包装数值的地址。第二个参数是描述这个数据类型的字符串,不需要自己来想这个头痛的参数,使用@encode指令就ok了。
例子:
NSMutableArray * array2 = [NSMutableArray arrayWithCapacity:3];
CGRect rect = CGRectMake(1,2,30,50);
CGRect rect = CGRectMake(1,2,30,50);
NSValue * value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect) ];
[array2 addObject:value]; NSValue * tmpValue = [array2 lastObject];
CGRect tmpRect;
CGRect tmp2Rect;
[tmpValue getValue:&tmpRect];
tmp2Rect = [tmpValue CGRectValue ];
NSLog(@"Rect width:%@",tmpRect.size.width);
五:NSNull
不能在NSArray和NSDictionary中放入nil值。有些时候,确实没值放入,怎么办呢,那就使用NSNull。例子:
NSMutableDictionary * profile = [NSMutableDictionary dictionaryWithCapacity:3];
[profile setObject:[NSNull null] forKey:@"phoneNumber"];
id number = [profile objectForKey:@"phoneNumber"];
if(number == [NSNull null]){
NSLog(@"the value is nil");
}
视频链接:http://www.verycd.com/files/d630c01ecba00982ababcd884afb74d984718080
接上篇 百度地图之一百度地图搭建开发环境(老罗视频笔记整理)
显示交通地图
//显示交通地图 mapView.setTraffic(true);
显示卫星地图
//显示卫星地图 mapView.setSatellite(true);
如何给地图覆盖物概述:
所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图象元素(包括:折线和多变形和圆)、定位图标等覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,他们会相应的移动。
地图API提供了如下几种覆盖物:
Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。
MyLoactionOverlay:一个负责显示用户当前位置的Overlay。
ItemizedOverlay<Item extends OverlayItem>: Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条Overlay,通过继承此类,将一组兴趣点显示在地图上。
PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“公园”,通过此公园显示在地图上。
RouteOverlay:步行、驾车导航线路图层,将步行、驾车出行方案的路线及关键点显示在地图上。
TransitOverlay:公交换乘线路图层,将某一特定地区的公交出行方案的路线及换乘位置显示在地图上;
实战案例之一:演示地图覆盖物的描述
package com.android.android_baidu_myoverlay; import com.android.android_baidu_myoverlay.R; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.GeoPoint; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.MapActivity; import com.baidu.mapapi.MapController; import com.baidu.mapapi.MapView; import com.baidu.mapapi.Overlay; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Point; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends MapActivity { //添加百度地图的相关控件 private MapView mapView; //加载地图的引擎 private BMapManager bMapManager; //百度地图的key private String KeyString = "8C426377B3526B6BF3672C9BA3BB544D1E8289CD"; //在百度地图上添加一些控件,比如是放大或者缩小的控件 private MapController mapController; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mapView = (MapView) this.findViewById(R.id.bmapView); bMapManager = new BMapManager(MainActivity.this ); //必须要加载key bMapManager.init(KeyString, new MKGeneralListener() { public void onGetPermissionState(int arg0) { if(arg0==300){ Toast.makeText(MainActivity.this, "输入的key有错,请核实!!", 1).show(); } } public void onGetNetworkState(int arg0) { } }); this.initMapActivity(bMapManager); //表示可以设置缩放功能 mapView.setBuiltInZoomControls(true); mapController = mapView.getController(); mapController.setZoom(12); mapView.getOverlays().add(new MyOverlay()); } public class MyOverlay extends Overlay{ //构建在地图上的一个点 GeoPoint geoPoint = new GeoPoint((int)(39.915*1E6),(int)(116.404*1E6)); //声明一个画笔的工具 private Paint paint = new Paint(); @Override public void draw(Canvas arg0, MapView arg1, boolean arg2) { super.draw(arg0, arg1, arg2); Point point = mapView.getProjection().toPixels(geoPoint, null); arg0.drawText("*这里是天安门", point.x, point.y, paint); } } @Override protected void onDestroy() { super.onDestroy(); if(bMapManager!=null){ bMapManager.destroy(); bMapManager = null; } } @Override protected void onResume() { super.onResume(); if(bMapManager!=null){ bMapManager.start(); } } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); if(bMapManager!=null){ bMapManager.stop(); } } @Override protected boolean isRouteDisplayed() { // TODO Auto-generated method stub return false; } }
源代码下载地址: http://download.csdn.net/detail/wenquan125/4786167