3 月 13 日:跳过所有这些文本和两张漂亮的图片,从带有“2013 年 3 月 13 日编辑:”标签的部分开始阅读。
请说清楚:
您打算使用什么映射 API?googleMaps 将以至少 100 个用户的增量向您收取 25 美元(我收到的最后一次报价),除非它是 100% 免费、无用户的应用程序,且浏览量低于一定数量。
您打算在哪里查看地图(智能手机/平板电脑或网络)?
我建议您使用 OpenLayers。有很多例子可以帮助你理解它的工作方式。
如果你想做的是这样的:
您将需要使用具有开放端口或使用非常不安全的“post to http”策略的 LAMP 服务器(linux、apache、mysql、php),以及使用“刷新策略”的 openlayers。
如果您想要这样的静态地图(对不起,开头有一个标志,但我没有任何图像 - 相信我,它就在那里,就在框架之外):
那么你就不会使用刷新策略了,但是,这不是在公园里散步(技术很简单,调试的是一只母狗)。
不想在你的游行上下雨,但是,这可能不是周末项目,除非你想让它工作,但只是有点......
注意:在这两种情况下,我都使用 KML 源来获取地理数据(从智能手机上的 gps 或 wifi 收集的 MySQL 存储数据解析 - 实际上我的应用程序也集成了 RFID 和车辆跟踪器)。请查看我关于该主题的其他帖子(使用正确的代码说明如何操作)。
2013 年 3 月 13 日
在您解释后编辑,这是使用 googleMaps API 的方法(根据您在下面的评论):
在您的地图上创建几个叠加层
mapOverlays.add(new MapOverlayTrip(pathTrip));
mapOverlays.add(new MapOverlayPointer(location));
//redraw map
mapView.invalidate();
flagMapRedraw = false;
...
public class MapOverlayTrip extends Overlay implements TextToSpeech.OnInitListener, OnTouchListener {`
例如(如果您的应用不说话,您可以删除 TTS)。...
@Override
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
...
PathPoint pathPointTemp;
Path pathScreenNewArea = new Path();
Path pathScreen = new Path();
Point p1 = new Point(0,0);
Point p2 = new Point(0,0);
projection = (Projection) mapv.getProjection();
for (int j = 0; j < pathTrip.size();j++) {
p1 = new Point();
projection.toPixels(pathTrip.get(j),p1);
if (j == 0) {
pathScreen.moveTo(p1.x, p1.y);
p2 = (Point) p1;
} else {
pathScreen.lineTo(p1.x, p1.y);
}
使用 PathPoint 类
public class PathPoint {
public float x;
public float y;
在我的主要活动中更新
public void onLocationChanged(Location locationIn) {
location = locationIn;
//redraw map
geoPoint = locationConvert(location);
geoPointLast = pathTrip.get(pathTrip.size()-1);
if (your conditions compare current displacement) {
pathTrip.add(geoPoint);
这些是在 android 屏幕上进行绘图的全功能代码的摘录。
对于更新,我不喜欢 http 帖子,我更信任套接字,但是,我有两个解决方案并行工作 6 个月,并且它们的性能非常相似(命中/未命中率)。这是我用来同时调用套接字和 http 的通用解决方案
public boolean geoPointInsert (GeoLocPoint geoPointIn) {
boolean flagOK = false;
if (geoPointIn != null) {
try {
String webPostAnswer = deviceIdCheck(deviceUuid, geoPointIn);
这是处理 http 帖子的代码
try {
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
//Log.v(TAG, "okok deviceId = "+deviceUuidIn +" latitude "+geoPointIn.latitude);
String uri = "http://www.yourdomain.net/tracker/" +
"trackPointListener.php";
uri = addLocationToUrl(uri, geoPointIn);
request.setURI(new URI(uri));
//Log.i(TAG,uri);
HttpResponse response = client.execute(request);
//Log.d(TAG, "php answered> "+response);
恕我直言,http 比套接字连接承担更大的责任,尽管两者都可能受到拒绝服务攻击。
正如我所说,不是周末项目。