从开始,驾驶和终点开始路线定位

时间:2013-03-07 17:07:52

标签: android google-maps gps

我正在为同事创建一个地图路由应用程序来跟踪他们作为旅行的位置。 我该怎么做:

获取当前位置当应用启动时创建标记,当他们开始开车时,我想从画一条线从开始标记和跟随他们的旅行进入工作,然后用另一个标记结束旅行。

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

我在一家m2m平台上工作,该平台内置了位置等。苹果用户已经有了一个IOS应用程序。 他们打开应用程序,获取位置,当他们开车时,它会对我们的平台进行httppost 。 www.axeda.com

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

如果您可以通过一些代码显示位置A到B有一条路线,然后我将一个更改的位置模拟到C并且它在那里路线,那么我就可以开始使用

1 个答案:

答案 0 :(得分:1)

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

请澄清:

  1. 您打算使用哪种映射API? googleMaps将向您收取每人25美元的收费,至少100个用户(我收到的最后一个报价)的增量,除非它是一个100%免费,无用户的应用程序,具有一定数量的综合浏览量。

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

  3. 我建议你使用OpenLayers。有many examples可帮助您了解其工作方式。

    如果您想要做的事情是这样的:

    animated OPENLAYERS MAP

    你需要使用LAMP服务器(linux,apache,mysql,php),使用开放端口或使用非常不安全的“post to http”策略,以及使用“刷新策略”的openlayers。

    如果你想要一个静态地图,就像这样(抱歉,开头有一面旗帜,但我没有任何形象 - 相信我,它就在那里,就在画面之外):

    map with track

    然后你不会使用刷新策略,但仍然,这不是在公园散步(技术很容易,调试是一只母狗)。

    不想在你的游行中下雨,但是,这可能不是一个周末项目,除非你想要它起作用,但只是排序......

    注意:在这两种情况下,我都使用地理数据的KML源代码(从智能手机上的gps或wifi收集的MySQL存储数据中解析 - 实际上我的应用程序也集成了RFID和车辆跟踪器)。请查看有关主题的my other post(使用正确的代码进行操作)。

    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 post,我更信任套接字,但是,我有两个解决方案并行工作6个月,并且它们的性能非常相似(命中/未命中率)。这是我用来同时调用BOTH套接字和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比套接字连接更有责任,但两者都可能受到拒绝服务攻击。

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