写在前面:

出去玩免不了挤公交、等地铁,不知道乘车方案当然不行,用官方APP吧,缺点一大堆,手机浏览器在线查的话既慢又麻烦...为了解决这些问题,我们来做一个简版的出行助手,嘛嘛再也不用担心我会迷路了_\^o^/_

(一)功能需求分析

[基础功能]

1.能够根据起点站和终点站查询乘车方案,并显示多种乘车方案

2.能够根据公交路线号查询沿途站点(防止坐过站...)

[扩展功能]

3.GPS定位获取起点站(距离当前位置最近的站点名)[后来放弃了,费电,费流量...]

4.显示地图[后来也放弃了,地图对用户来说好像没什么太大用处(当然喜欢走路的另当别论),至少对本人来说地图没什么用]

(二)可实现性分析

1.百度地图开放平台提供的API可以实现乘车方案查询

2.3.4.同上,结论:完全可以实现需要的所有功能

(三)开发前提

1.需要BaiDuMap的开发者账号

2.需要key(现在新版的地图key与App唯一绑定)

3.需要官方提供的jar包

搜索一下“百度地图开发”,上面的三件事情分分钟搞定

[说到这里不得不赞一下这极低的门槛了,腾讯、新浪微博...的开发者账号就很难认证,有的甚至需要上传身份证复印件...]

(四)研究API文档以及Demo

API文档说实话做得不怎么样,函数详解都只有一句话,建议直接看Demo,附有大量注释,简单易懂

(五)开始编码(下面给出的源码都亲测可用,并附有最详细的注释)

[SearchPlan.java---MainActivity]

package com.ayqy.app_gowithme;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast; import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.search.MKAddrInfo;
import com.baidu.mapapi.search.MKBusLineResult;
import com.baidu.mapapi.search.MKDrivingRouteResult;
import com.baidu.mapapi.search.MKLine;
import com.baidu.mapapi.search.MKPlanNode;
import com.baidu.mapapi.search.MKPoiInfo;
import com.baidu.mapapi.search.MKPoiResult;
import com.baidu.mapapi.search.MKRoute;
import com.baidu.mapapi.search.MKSearch;
import com.baidu.mapapi.search.MKSearchListener;
import com.baidu.mapapi.search.MKShareUrlResult;
import com.baidu.mapapi.search.MKSuggestionResult;
import com.baidu.mapapi.search.MKTransitRoutePlan;
import com.baidu.mapapi.search.MKTransitRouteResult;
import com.baidu.mapapi.search.MKWalkingRouteResult; public class SearchPlan extends Activity{ BMapManager mBMapMan = null; ListView list;
private MKSearch mSearch = null; // 搜索模块,也可去掉地图模块独立使用
private String city;//城市
private String start;//起点
private String end;//终点
EditText txtCity;
EditText txtStart;
EditText txtEnd;
Button btnSearch; ArrayList<String> plans;//方案列表
ArrayList<String> details;//详细方案 @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//获取SDK使用权限
mBMapMan=new BMapManager(getApplication());
mBMapMan.init("MzKbxcvX7gBEqpeW2kdmOqhx", null);
//注意:上面方法的第一个参数必须要填自己申请的key
//因为App的PackageName--Shell值--key都唯一对应
//用别人的key肯定会出现授权失败的错误,结果就是什么API都别想用 this.setContentView(R.layout.query); //关联控件
list = (ListView) findViewById(R.id.List);
txtCity = (EditText) findViewById(R.id.txtCity);
txtStart = (EditText) findViewById(R.id.txtStart);
txtEnd = (EditText) findViewById(R.id.txtEnd);
btnSearch = (Button) findViewById(R.id.btnSearch);
//设置按钮半透明
btnSearch.getBackground().setAlpha(204);
//
txtStart.setText("小居安");
// btnSearch.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
//搜索乘车方案
//判空
start = txtStart.getText().toString().trim();
end = txtEnd.getText().toString().trim();
city = txtCity.getText().toString().trim();
if("".equals(start) || "".equals(end) || "".equals(city))
{
Toast.makeText(SearchPlan.this, "...到底想去哪里", Toast.LENGTH_SHORT).show();
return;
}
else
{
//搜索方案
searchPlans();
}
}
}); // 初始化搜索模块,注册事件监听
mSearch = new MKSearch();
mSearch.init(mBMapMan, new MKSearchListener() { @Override
public void onGetPoiDetailSearchResult(int type, int error) {
} public void onGetDrivingRouteResult(MKDrivingRouteResult res,
int error) {
} public void onGetTransitRouteResult(MKTransitRouteResult res,
int error) { if (error != 0 || res == null) {
showError(error);
return;
} // 得到解决方案
int maxPlanNum = res.getNumPlan();//方案数
//显示方案列表
plans = new ArrayList<String>();
details = new ArrayList<String>();
for(int i = 0;i < maxPlanNum;i++)
{
//得到详细方案
MKTransitRoutePlan routePlan = res.getPlan(i);
//获取时耗
int time = routePlan.getTime() / 60;
int hour = time / 60;
int min = time % 60;
// 公交线路
MKLine mkLine = routePlan.getLine(0);
//记录方案详细信息
StringBuilder sb = new StringBuilder();
sb.append("[预计耗时:");
if(hour > 0)sb.append(hour + " 小时 ");
sb.append(min);
sb.append("分钟]\n\n乘坐:");
sb.append(mkLine.getTitle());
MKPoiInfo mkOnPoiInfo = mkLine.getGetOnStop();
MKPoiInfo mkOffPoiInfo = mkLine.getGetOffStop();
sb.append("\n从");
sb.append(mkOnPoiInfo.name);
sb.append("上车,在");
sb.append(mkOffPoiInfo.name);
sb.append("下车\n[途经 ");
sb.append(mkLine.getNumViaStops());
sb.append(" 站]");
if (routePlan.getNumLines() > 0) {
// 循环当前方案公交路线
for (int j = 1; j < routePlan.getNumLines(); j++) {
// 公交线路
mkLine = routePlan.getLine(j);
sb.append("\n换乘:");
sb.append(mkLine.getTitle());
mkOnPoiInfo = mkLine.getGetOnStop();
mkOffPoiInfo = mkLine.getGetOffStop();
sb.append("\n从");
sb.append(mkOnPoiInfo.name);
sb.append("上车,在");
sb.append(mkOffPoiInfo.name);
sb.append("下车\n[途经 ");
sb.append(mkLine.getNumViaStops());
sb.append(" 站]");
}
}
//填充详细方案列表
details.add(sb.toString()); //填充方案列表
plans.add("方案 " + (i + 1));
}
//显示方案列表
showPlans();
} public void onGetWalkingRouteResult(MKWalkingRouteResult res,
int error) {
} public void onGetAddrResult(MKAddrInfo res, int error) {
} //线路查询相关
public void onGetPoiResult(MKPoiResult res, int type, int error) {
// 错误号可参考MKEvent中的定义
if (error != 0 || res == null) {
showError(error);
return;
}
// 找到公交路线poi node
MKPoiInfo curPoi = null;
int totalPoiNum = res.getNumPois();
for (int idx = 0; idx < totalPoiNum; idx++) {
curPoi = res.getPoi(idx);
// ePoiType-->poi类型,0:普通点,1:公交站,2:公交线路,3:地铁站,4:地铁线路
if (2 == curPoi.ePoiType) {
break;
}
}
mSearch.busLineSearch(curPoi.name, curPoi.uid);
} //线路查询相关
public void onGetBusDetailResult(MKBusLineResult result, int error) {
if (error != 0 || result == null) {
showError(error);
return;
}
//获取详细路线
MKRoute route = result.getBusRoute();
int num = route.getNumSteps();//关键点数量
//循环获取关键点描述
String[] arrInfo = new String[num + 1];
for(int i = 0;i < num;i++)
arrInfo[i + 1] = route.getStep(i).getContent();
//获取运营时间信息
String busName = result.getBusName();
String startTime = result.getStartTime();
String endTime = result.getEndTime();
arrInfo[0] = busName + "\n首班:" + startTime + "\n末班:" + endTime; //将数据装入Bundle
Bundle data = new Bundle();
data.putStringArray("routeInfo", arrInfo);
//新建Intent
Intent intent = new Intent(SearchPlan.this,ShowRoute.class);
intent.putExtras(data);
//启动对应Activity
startActivity(intent);
} @Override
public void onGetSuggestionResult(MKSuggestionResult res, int arg1) {
// TODO Auto-generated method stub
} @Override
public void onGetShareUrlResult(MKShareUrlResult arg0, int arg1,
int arg2) {
// TODO Auto-generated method stub
}
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(android.view.MenuItem item){
if(item.getItemId() == R.id.searchRoute)
{//显示线路查询对话框
//创建Builder对象
Builder builder = new Builder(SearchPlan.this);
builder.setTitle("查询线路详情");
builder.setIcon(R.drawable.search);
//设置对话框内容
LinearLayout view = new LinearLayout(SearchPlan.this);
view.setOrientation(LinearLayout.HORIZONTAL);
TextView lbl1 = new TextView(SearchPlan.this);
lbl1.setText("查询");
lbl1.setTextSize(18);
final EditText txtCity = new EditText(SearchPlan.this);
txtCity.setHint("城市名");
txtCity.setText("西安");
TextView lbl2 = new TextView(SearchPlan.this);
lbl2.setText("公交");
lbl2.setTextSize(18);
final EditText txtBus = new EditText(SearchPlan.this);
txtBus.setInputType(InputType.TYPE_CLASS_NUMBER);//限输入数字
txtBus.setSingleLine();//单行
txtBus.setHint("线路名");
TextView lbl3 = new TextView(SearchPlan.this);
lbl3.setText("路");
lbl3.setTextSize(18);
view.addView(lbl1);
view.addView(txtCity);
view.addView(lbl2);
view.addView(txtBus);
view.addView(lbl3);
builder.setView(view);
//添加按钮
builder.setPositiveButton("查询", new DialogInterface.OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
//查询路线信息
//判空
String city = txtCity.getText().toString().trim();
String bus = txtBus.getText().toString().trim();
if("".equals(city) || "".equals(bus))
{
Toast.makeText(SearchPlan.this, "...到底想查询什么", Toast.LENGTH_SHORT).show();
return;
} //显示提示信息
showTip();
//POI搜索
mSearch.poiSearchInCity(city, bus);
}
});
builder.setNegativeButton("取消", null);
//显示对话框
builder.create().show();
} if(item.getItemId() == R.id.exit)
finish();//退出程序 return true;
}; //自定义方法
private void searchPlans()
{//搜索乘车方案 //对起点终点的name进行赋值,也可以直接对坐标赋值,赋值坐标则将根据坐标进行搜索
MKPlanNode stNode = new MKPlanNode();
stNode.name = start;
MKPlanNode enNode = new MKPlanNode();
enNode.name = end; //显示提示信息
showTip();
//搜索
mSearch.transitSearch(city, stNode, enNode);
} private void showPlans()
{
//为ListView绑定Adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
, android.R.layout.simple_list_item_multiple_choice
, plans);
list.setAdapter(adapter);
list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //为ListView添加ItemClick事件监听
list.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> arg0, View arg1, int index,
long arg3) {
//跳转到ListActivity,同时传递索引参数 //创建Intent
Intent intent = new Intent(SearchPlan.this
,ShowDetail.class);
//创建Bundle携带数据
Bundle bundle = new Bundle();
bundle.putInt("index", index);
bundle.putString("detail", details.get(index));
//数据绑定
intent.putExtras(bundle);
//启动Intent对应的Activity
startActivity(intent);
}
});
} private void showError(int error)
{
String msg = null;
switch(error)
{
case 2:msg="T_T网络连接错误...";break;
case 3:msg="T_T网络数据错误...";break;
case 4:msg="T_T路线搜索起点或终点有歧义...";break;
case 100:msg="T_T未找到搜索结果...";break;
case 300:msg="T_T授权验证失败...";break;
default:msg="T_T未知错误...";
}
Toast.makeText(SearchPlan.this, msg,
Toast.LENGTH_LONG).show();
} private void showTip()
{//显示提示信息
Toast.makeText(SearchPlan.this
, "(*>.<*)正在拼命搜索..."
, Toast.LENGTH_LONG).show();
} //重写baiduMap中的方法
@Override
protected void onDestroy() {
mSearch.destory(); if(mBMapMan!=null){
mBMapMan.destroy();
mBMapMan=null;
} super.onDestroy();
} @Override
protected void onPause(){
if(mBMapMan!=null){
mBMapMan.stop();
}
super.onPause();
} @Override
protected void onResume(){
if(mBMapMan!=null){
mBMapMan.start();
}
super.onResume();
} }

[ShowDetail.java---显示乘车方案详情]

package com.ayqy.app_gowithme;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class ShowDetail extends ListActivity{ ListView root; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState); //设置背景
root = getListView();
root.setBackgroundResource(R.drawable.blue_bg); //获取数据
Intent intent= getIntent();
Bundle bundle = intent.getExtras();
int index = bundle.getInt("index") + 1;
String detail = bundle.getString("detail"); //设置Adapter
String[] arr = new String[]{"方案 " + index + " 详情:", detail};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
, android.R.layout.simple_list_item_1
, arr);
this.setListAdapter(adapter);
}
}

[ShowRoute.java---显示路线详情(沿途站点信息)]

package com.ayqy.app_gowithme;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class ShowRoute extends ListActivity{ ListView root; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState); //设置背景
root = getListView();
root.setBackgroundResource(R.drawable.blue_bg); //获取数据
Intent intent= getIntent();
Bundle bundle = intent.getExtras();
String[] arrInfo = bundle.getStringArray("routeInfo"); //设置Adapter
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
, android.R.layout.simple_list_item_1
, arrInfo);
this.setListAdapter(adapter);
}
}

[布局文件query.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:background="@drawable/blue_bg"
android:orientation="vertical" > <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
> <TextView
android:text="@string/city"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> <EditText
android:id="@+id/txtCity"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/cityHint"
android:text="@string/XiAn"
android:singleLine="true"
/> </LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
> <TextView
android:text="@string/start"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> <EditText
android:id="@+id/txtStart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/stationHint"
android:singleLine="true"
/> </LinearLayout> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
> <TextView
android:text="@string/end"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/> <EditText
android:id="@+id/txtEnd"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/stationHint"
android:singleLine="true"
/> </LinearLayout> <Button
android:id="@+id/btnSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="@string/searchPlan"
/> <ListView android:id="@+id/List"
android:layout_width="match_parent"
android:layout_height="wrap_content"
> </ListView> </LinearLayout>

P.S.源码都在上面,如有疑问请在下方留言

(六)显示地图

[最先实现的就是这个(第一次开发地图有点激动,想看看地图长什么样子...),在需求中本没打算设计,虽然后来放弃了,但下面的源码仍然亲测无误]

[ShowMap.java---显示地图]

package com.ayqy.app_gowithme;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TextView;
import android.widget.Toast; import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint; public class ShowMap extends Activity { BMapManager mBMapMan = null;
MapView mMapView = null;
MapController mMapController = null; TextView txt;
boolean pressAgain = false;
long pressTime = 0; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); mBMapMan=new BMapManager(getApplication());
mBMapMan.init("MzKbxcvX7gBEqpeW2kdmOqhx", null);
//注意:请在试用setContentView前初始化BMapManager对象,否则会报错 setContentView(R.layout.activity_main);
mMapView=(MapView)findViewById(R.id.bmapsView);
mMapController=mMapView.getController(); //txt = (TextView) findViewById(R.id.txt); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point =new GeoPoint((int)(34.151884* 1E6),(int)(108.882024* 1E6));
//34.151884,108.882024西北大学16级别
//用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.enableClick(true);//设置地图响应点击事件
mMapController.setCenter(point);//设置地图中心点
mMapController.setZoom(16);//设置地图zoom级别
mMapView.setBuiltInZoomControls(false);//不显示内置缩放控件 //创建MKMapViewListener
MKMapViewListener listener = new MKMapViewListener() { @Override
public void onMapMoveFinish() {
// TODO Auto-generated method stub } @Override
public void onMapLoadFinish() {
} @Override
public void onMapAnimationFinish() {
// TODO Auto-generated method stub } @Override
public void onGetCurrentMap(Bitmap arg0) {
// TODO Auto-generated method stub } @Override
public void onClickMapPoi(MapPoi arg0) {
//点到地图标注时显示详细
if(arg0 != null)
{
GeoPoint point = arg0.geoPt;//获取GEO坐标
mMapController.setCenter(point);//设置地图中心点
mMapController.zoomIn();//放大一个级别
}
}
};
//为map注册监听器
mMapView.regMapViewListener(mBMapMan, listener);
} @Override public void onBackPressed() {
//按下返回键,缩小地图
float min = 12f;//设置最小缩放级别
if(mMapView.getZoomLevel() > min)
mMapController.zoomOut();//缩小一个级别
else
{
if(pressAgain && (System.currentTimeMillis() - pressTime < 1000))
super.finish();//一秒内再按结束程序
else
pressAgain = false;
if(!pressAgain)
{
Toast.makeText(ShowMap.this, "再按一次退出...", Toast.LENGTH_SHORT).show();
pressTime = System.currentTimeMillis();//获取第一次按下的时间
pressAgain = true;
}
}
}; @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(android.view.MenuItem item){
if(item.getItemId() == R.id.exit)
finish();//退出程序 return true;
}; //重写baiduMap中的方法
@Override
protected void onDestroy() {
mMapView.destroy();
if(mBMapMan!=null){
mBMapMan.destroy();
mBMapMan=null;
} super.onDestroy();
} @Override
protected void onPause(){
mMapView.onPause();
if(mBMapMan!=null){
mBMapMan.stop();
}
super.onPause();
} @Override
protected void onResume(){
mMapView.onResume();
if(mBMapMan!=null){
mBMapMan.start();
}
super.onResume();
}
}

[布局文件activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:scrollbars="none" > <com.baidu.mapapi.map.MapView
android:id="@+id/bmapsView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" /> </LinearLayout>

(七)离线地图

离线地图好处多多,但若是要开发需要推广给众多用户的App的话,建议要么做下载离线地图包功能(Demo中有例程,很容易),要么考虑在App第一次运行的时候把APK资源文件中的离线地图复制到用户SD卡中(理论上可以实现),当然这样的话地图适用范围会受到限制,开发有明确地域限制的App可以选用(例如:西安出行助手)。

离线地图是这样用的:

1.把从官网下载的文件夹整个复制到手机SDCARD指定路径(具体放哪里请看压缩包中的ReadMe.txt介绍)

2.在程序中需要对离线地图包进行scan初始化(其本质是对地图包的解析,把一个大文件变成了几个小文件,所以,不进行解析的话地图包是不能用的)

3.貌似显示地图的方法会自动判断(优先使用离线地图,如果有的话)

(八)运行界面截图

Android开发基于百度地图的乘车助手的更多相关文章

  1. 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明

    前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...

  2. Android开发之百度地图--环境搭建

    这篇文章总结自极客学院张浩老师的android教学课程,在此对张浩老师和崔爽老师表示非常感谢. (一)基础知识 在申请百度地图开发密钥的时候需要用到数字签名证书的内容,所以这里先对此做一下介绍. (1 ...

  3. android 开发之 百度地图的使用

    好久没写博客了,最近遇到个新需求 需要用到百度地图的基础地图,定位,理论上应该还会用到鹰眼的功能吧.具体还很难说.我现在 刚动工,就从头开始记录吧. 首先是先申请一个百度地图api的key 流程官网很 ...

  4. android 开发(百度地图)

    百度地图开放平台:http://lbsyun.baidu.com/ 百度地图API:http://developer.baidu.com/map/reference/ Android地图SDK 百度地 ...

  5. Android开发之百度地图的简单使用

    越来越多的App运用到了定位,导航的这些功能,其实实现一个自己的百度地图也是非常的简单,这篇博客将会教你简单的实现一个百度地图.看一下效果图: 第一步:要使用百度地图,必须要有百度地图的Key,要获得 ...

  6. [github项目]基于百度地图二次开发实现的车辆监管(包含车辆定位、车辆图片和方向控制,电子围栏,图形绘制等功能)前端实现(不包含后端实现)

    前言:基于百度地图javascript版本开发,百度地图中所用的key已承诺仅用于测试,不用于商业用途 注:本文所有代码可以到github上进行下载,github地址:http://map.eguid ...

  7. Android定位&地图&导航——基于百度地图实现的定位功能

    一.问题描述 LBS位置服务是android应用中重要的功能,应用越来越广泛,下面我们逐步学习和实现lbs相关的应用如定位.地图.导航等,首先我们看如何基于百度地图实现定位功能 二.配置环境 1.注册 ...

  8. Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK

    原文:Android学习-- 基于位置的服务 LBS(基于百度地图Android SDK)--定位SDK 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  9. [置顶] Xamarin android如何调用百度地图入门示例(一)

    在Xamarin android如何调用百度地图呢? 首先我们要区分清楚,百度地图这是一个广泛的概念,很多刚刚接触这个名词"百度地图api",的确是泛泛而谈,我们来看一下百度地图的 ...

随机推荐

  1. Spring简单获得实体类的实例, 使用ApplicationContext()方法的几点注意事项

    今天接触了Spring的初步用法, 感觉跟实例化实体类没啥区别, 像这种简单的代码还不如直接实例化来的方便, 这样使用Spring的话总共需要三个文件 第一个当然是一个实体类了, 定义好属性, get ...

  2. dreamwave基础

    WEBcs架构需要在客户段安装程序, 需要安装程序, 工作量会比较大, 需要安装和维护, 比如以后系统升级, 会很麻烦. 优点是一些业务逻辑可以在客户端, 可以减少服务器的一些压力, 客户端的界面操作 ...

  3. 微信公众平台开发之基于百度 BAE3.0 的开发环境搭建(采用 Baidu Eclipse)

    3.通过 SVN 检入工程     在 bae 上的应用添加部署成功后,如图 7     点击“点击查看”按钮,会打开一个新页面,页面上会打印 “hello world” ,这是因为我们的应用包含有示 ...

  4. 虚拟机安装Centos6.5服务器系统

    前言: 工作需要,研究Linux数日,写下此教程,意在给其他初学者参考学习,亦是给自己留作备用.好记性不如烂笔头,毕竟只是偶尔使用,留下教程,以备不时之需. 对于学习研究Linux的新手,个人推荐VM ...

  5. LeetCode包括main函数的答题框架(Java+Eclipse)

    http://zhangnai.xin/2016/09/20/LeetCode-Framework/ 目录结构: LeetCode ——项目名称,方便Eclipse内置Git对代码进行管理和多终端同步 ...

  6. 简单的几个Boost定时器

    boost的asio库里有几个定时的器,老的有 deadline_timer , 还有三个可配合 C++11 的 chrono 使用的 high_resolution_timer  . steady_ ...

  7. Django基础教程

    实例练习1-提交数据并展示 1.app_01下的views.py info_list=[] def userInfor(req): if req.method=="POST": u ...

  8. 有关gitlab的神秘操作.....version&&domain设置...

    在使用gitlab的时候,如果服务器IP变动,之前的domain写入了配置文件了,如下路径: [root@gitlab-server ~]# vim /var/opt/gitlab/gitlab-ra ...

  9. vim之quickfix

    [vim之quickfix] quickfix功能将编译过程中产生的错误信息保存到文件中,然后vim利用这些信息跳转到源文件的对应位置,我们就可以进行错误的修正,之后跳到下一个错误重复上述操作,从而极 ...

  10. 洛谷 P2986 [USACO10MAR]伟大的奶牛聚集(树形动规)

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...