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