-2

我正在为我的同事创建一个地图路由应用程序来跟踪他们的位置作为旅行。我该如何执行以下操作:

当应用程序启动并创建一个标记时,我得到他们的当前位置,当他们开始驾驶时,我想从开始标记画一条线并跟随他们的行程进入工作,然后用另一个标记结束行程。

我正在使用Google API v1。我的公司有用户许可证。. 我看过很多使用 RouteOverlay 的帖子,但这对我来说从来没有用过。我只想在开车时跟随司机的路线。

我为一家公司工作,该公司是一个内置位置等的 m2m 平台。这里已经有一个苹果用户使用的 IOS 应用程序。他们打开应用程序,它会获得一个位置,当他们开车时,它会向我们的平台发送一个 httppost。www.axeda.com

我试图在 Android 上模仿这一点,我在其中启动应用程序,它获取当前位置并将其发布到我们的服务器,然后在我开车时,每 200 英尺它会发布位置,直到我停止旅行。我正在尝试从起点绘制路径/路线,直到旅行结束。我希望能澄清它。(DB、Tomcat、WebApp等是我们的业务)

如果您可以从显示位置 A 到 B 的一些代码开始我有一条路线,然后我将更改的位置模拟到 C 并路由到那里,我会顺利进行

4

1 回答 1

1

3 月 13 日:跳过所有这些文本和两张漂亮的图片,从带有“2013 年 3 月 13 日编辑:”标签的部分开始阅读。

请说清楚:

  1. 您打算使用什么映射 API?googleMaps 将以至少 100 个用户的增量向您收取 25 美元(我收到的最后一次报价),除非它是 100% 免费、无用户的应用程序,且浏览量低于一定数量。

  2. 您打算在哪里查看地图(智能手机/平板电脑或网络)?

我建议您使用 OpenLayers。有很多例子可以帮助你理解它的工作方式。

如果你想做的是这样的:

动画 OPENLAYERS MAP

您将需要使用具有开放端口或使用非常不安全的“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 比套接字连接承担更大的责任,尽管两者都可能受到拒绝服务攻击。

正如我所说,不是周末项目。

于 2013-03-07T17:27:20.793 回答