Android Baidu지도는 포인트와 트랙을 그립니다.

1. 제목

Android Baidu지도는 포인트와 트랙을 그립니다.

2. 환경

win10 AndroidStudio

셋, 코드 구현

참고 : 주석 처리 된 부분은 코드가 정상적으로 실행되는지 확인하고 예상 한 결과를 얻을 수 있는지 확인하기 위해 이전에 데이터를 직접 수정 한 것입니다. 댓글이 없습니다. JSON 문자열을 데이터 매체로 사용합니다.

마크 포인트의 일부를 그립니다.

package com.example.adressandtrace;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.model.LatLng;
import org.json.JSONException;
import java.util.List;

import Entity.Address;

public class MainActivity extends AppCompatActivity {
    
    
    private MapView mMapView = null;
    private BaiduMap mBaiduMap = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
        //定义Maker坐标点
//        mBaiduMap= mMapView.getMap();
//        LatLng point = new LatLng(39.963175, 116.400244);
构建Marker图标
//        BitmapDescriptor bitmap = BitmapDescriptorFactory
//                .fromResource(R.drawable.icon_marka);
构建MarkerOption,用于在地图上添加Marker
        OverlayOptions option = new MarkerOptions()
                .position(point)
                .icon(bitmap);
//        Log.v("MY1","Has Done");
//        OverlayOptions option = new MarkerOptions().icon(bitmap).position(point);
在地图上添加Marker,并显示
//        Log.v("MY2","Has Done");
//        mBaiduMap.addOverlay(option);
//        Log.v("MY3","Has Done");


        Intent intent = getIntent();
        String jsonString = intent.getStringExtra("jsonString");
        Log.i("jsonString",jsonString);
        Log.i("jsonString","这是绘制点activity");
        JieXiJson jieXiJson = new JieXiJson();
        List<Address> list = null;
        try {
    
    
            list = jieXiJson.getAddress(jsonString);
            Log.i("jsonString",list.toString());
            Log.i("jsonString","map输出后的检查语句");
        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }
//        定义Maker坐标点
        mBaiduMap= mMapView.getMap();
        if(list!= null ){
    
    
            for(Address address : list){
    
    
                double latitude = Double.valueOf(address.getLatitude());
                double longitude = Double.valueOf(address.getLongitude());
                LatLng point = new LatLng(latitude, longitude);
                System.out.println(latitude);
                BaiduMap mBaiduMap = mMapView.getMap();
                //定义Maker坐标点
//        LatLng point = new LatLng(27.904198, 112.930552);七栋比较准确的位置
//        LatLng point = new LatLng(27.901332, 112.92163);
                //构建Marker图标
                BitmapDescriptor bitmap = BitmapDescriptorFactory
                        .fromResource(R.drawable.icon_gcoding);
                //构建MarkerOption,用于在地图上添加Marker
                OverlayOptions option = new MarkerOptions()
                        .position(point)
                        .icon(bitmap);
                //在地图上添加Marker,并显示
                mBaiduMap.addOverlay(option);
            }

        }else{
    
    
            Toast.makeText(MainActivity.this, "没有获取到位置信息或者位置数据库为空!", Toast.LENGTH_LONG).show();
        }



    }
    @Override
    protected void onResume() {
    
    
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
    
    
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
    
    
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
}


추적의 일부 :

package com.example.adressandtrace;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MarkerOptions;
import com.baidu.mapapi.map.Overlay;
import com.baidu.mapapi.map.OverlayOptions;
import com.baidu.mapapi.map.PolylineOptions;
import com.baidu.mapapi.model.LatLng;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import Entity.Address;

public class TraceActivity extends AppCompatActivity {
    
    
    private MapView mMapView = null;
    private BaiduMap mBaiduMap = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        SDKInitializer.initialize(getApplicationContext());
        setContentView(R.layout.activity_main);
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
        //获取地图控件引用
        mMapView = (MapView) findViewById(R.id.bmapView);
//        Intent intent = getIntent();
//        String jsonString = intent.getStringExtra("jsonString");
//        JieXiJson jieXiJson = new JieXiJson();
//        Address address = jieXiJson.getAddress(jsonString);
        定义Maker坐标点
//        mBaiduMap= mMapView.getMap();
//        double latitude = Double.valueOf(address.getLatitude());
//        double longitude = Double.valueOf(address.getLongitude());
//         LatLng point1 = new LatLng(latitude, longitude);
//        LatLng point1 = new LatLng(27.101299, 112.94076);
//        LatLng point2 = new LatLng(27.901299, 112.94076);
        Intent intent = getIntent();
        String jsonString = intent.getStringExtra("jsonString");
        JieXiJson jieXiJson = new JieXiJson();
        List<Address> list = null;
        try {
    
    
            list = jieXiJson.getAddress(jsonString);
            Log.i("jsonString",list.toString());
            Log.i("jsonString","map输出后的检查语句");
        } catch (JSONException e) {
    
    
            e.printStackTrace();
        }
        if(list != null){
    
    
            BaiduMap mBaiduMap = mMapView.getMap();
            //构建Marker图标
            BitmapDescriptor bitmap1 = BitmapDescriptorFactory
                    .fromResource(R.drawable.icon_marka);
            BitmapDescriptor bitmap2 = BitmapDescriptorFactory
                    .fromResource(R.drawable.icon_markb);
//构建MarkerOption,用于在地图上添加Marker
//        OverlayOptions option = new MarkerOptions()
//                .position(point)
//                .icon(bitmap);
            Log.v("MY1","Has Done");
            Address address1 = list.get(0);
            Address address2 = list.get(list.size()-1);
            double latitude1 = Double.valueOf(address1.getLatitude());
            double longitude1 = Double.valueOf(address1.getLongitude());
            LatLng point1= new LatLng(latitude1, longitude1);
            double latitude2 = Double.valueOf(address2.getLatitude());
            double longitude2 = Double.valueOf(address2.getLongitude());
            LatLng point2 = new LatLng(latitude2, longitude2);
            OverlayOptions option1 = new MarkerOptions().icon(bitmap1).position(point1);
            OverlayOptions option2 = new MarkerOptions().icon(bitmap2).position(point2);
//在地图上添加Marker,并显示
            Log.v("MY2","Has Done");
            mBaiduMap.addOverlay(option1);
            mBaiduMap.addOverlay(option2);
            Log.v("MY3","Has Done");
            List<LatLng> points = new ArrayList<LatLng>();
            for(Address address :list) {
    
    
                //定义Maker坐标点
//        LatLng point = new LatLng(27.904198, 112.930552);七栋比较准确的位置
                double latitude = Double.valueOf(address.getLatitude());
                double longitude = Double.valueOf(address.getLongitude());
                LatLng point = new LatLng(latitude, longitude);
                points.add(point);
            }
                //设置折线的属性
                OverlayOptions mOverlayOptions = new PolylineOptions()
                        .width(10)
                        .color(0xAAFF0000)
                        .points(points);
                //在地图上绘制折线
                //mPloyline 折线对象
                Overlay mPolyline = mBaiduMap.addOverlay(mOverlayOptions);

        }else{
    
    
            Toast.makeText(TraceActivity.this, "没有获取到位置信息或者位置数据库为空!", Toast.LENGTH_LONG).show();
        }
    }
    @Override
    protected void onResume() {
    
    
        super.onResume();
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
        mMapView.onResume();
    }
    @Override
    protected void onPause() {
    
    
        super.onPause();
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
        mMapView.onPause();
    }
    @Override
    protected void onDestroy() {
    
    
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        mMapView.onDestroy();
    }
}


넷, 실험 스크린 샷

실시간 위치 (즉, 데이터베이스의 마지막 데이터)를 본 후 브라우저 페이지에 표시되는 json 배열입니다.
json

이것은 제가 야외에서 찾은 데이터입니다. 데이터는 정확하고 오류는 매우 적습니다.
(추신 : 에뮬레이터가 레이어를 켰을 때 화면 중앙은 기본적으로 베이징이므로 에뮬레이터를 사용할 때는 대략적인 위치를 파악한 다음지도에서 찾아야합니다.)
마크 포인트



궤적을 그리는 실험적인 스크린 샷입니다. 데이터를 전송하기 위해 로컬 서버를 사용하기 때문에 휴대폰과 컴퓨터가 동일한 근거리 통신망에 연결되어 있어야합니다. 데이터 수집이 편리하지 않기 때문에 MySQL에 경도 및 위도 정보를 입력하여 시뮬레이션합니다. 따라서 데이터베이스 저장 위치 정보의 데모가 필요한 소규모 파트너가있는 경우 클라우드 서버 또는 클라우드 서비스를 시도하는 것이 좋습니다. 이러한 종류의 데이터는 동일한 근거리 통신망에있을 필요가 없습니다. 직접 트래픽으로 업로드 할 수 있습니다.

이 그림은 입력 기간을 보여주고 Baidu지도는 해당 기간의 궤적을 보여줍니다.
시각

아래 그림에서 A 지점은 시작 시간의 위치 인 시작 지점을 나타냅니다.
지점 B는 종료 시간의 위치 인 종료 지점을 나타냅니다.
과정

질문이 있으시면 교환 메시지를 남겨주세요!

추천

출처blog.csdn.net/weixin_43752257/article/details/113041298