Need precise positioning and scribing algorithm~~~ God help---
package com.curiousby.demo.running; import java.util.ArrayList; import java.util.Date; import java.util.List; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Toast; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; 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.MapStatus; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfiguration; import com.baidu.mapapi.map.OverlayOptions; import com.baidu.mapapi.map.Polyline; import com.baidu.mapapi.map.PolylineOptions; import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.model.LatLng; import com.curiousby.demo.BaiduLBSUtil; import com.curiousby.demo.R; public class RunningMainFragment extends Fragment { // positioning related LocationClient mLocClient; public MyLocationListenner myListener = new MyLocationListenner(); MapView mMapView = null; BaiduMap mBaiduMap; private LocationMode mCurrentMode; //BitmapDescriptor mCurrentMarker; private View mBaseView; Polyline mPolyline; Polyline mColorfulPolyline; Polyline mTexturePolyline; boolean isFirstLoc = true; // Whether to locate the first time private static final int accuracyCircleFillColor = 0xAAFFFF88; private static final int accuracyCircleStrokeColor = 0xAA00FF00; static BitmapDescriptor mGreenTexture ; private double mLatitude; private double mLongitude; private long mTime; private double currentLatitude; private double currentLongitude; private long currentTime; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { SDKInitializer.initialize(getActivity().getApplicationContext()); mCurrentMode = LocationMode.FOLLOWING; //mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher); mGreenTexture = BitmapDescriptorFactory.fromAsset("icon_road_green_arrow.png"); mBaseView = LayoutInflater.from(getActivity()).inflate(R.layout.running_tab_main,null); mMapView = (MapView) mBaseView.findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); // mCurrentMarker = BitmapDescriptorFactory .fromResource(R.drawable.icon_geo); mBaiduMap .setMyLocationConfigeration(new MyLocationConfiguration( mCurrentMode, true, null)); // open the positioning layer mBaiduMap.setMyLocationEnabled(true); // positioning initialization mLocClient = new LocationClient(getActivity().getApplicationContext()); mLocClient.registerLocationListener(myListener); LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // open gps option.setCoorType("bd09ll"); // set the coordinate type option.setScanSpan(2000); mLocClient.setLocOption(option); mLocClient.start(); return mBaseView; } public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // After the map view is destroyed, it does not process the new received position if (location == null || mMapView == null) { return; } currentLatitude = location.getLatitude(); currentLongitude = location.getLongitude(); currentTime = new Date().getTime(); if(currentLatitude==4.9E-324||currentLatitude==4.9E-324){ return ; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // Set the direction information obtained by the developer here, clockwise 0-360 .direction(100) .latitude(currentLatitude) .longitude(currentLongitude) .build(); mBaiduMap.setMyLocationData(locData); if (mLatitude == 0.0 || mLongitude == 0.0) { //return ; }else{ LatLng p1 = new LatLng(mLatitude, mLongitude); LatLng p2 = new LatLng(currentLatitude,currentLongitude ); double distance = BaiduLBSUtil.getDistance(p1, p2); double speed =distance / (currentTime - mTime == 0 ? 1:(currentTime - mTime )/1000); Log.e("baoyou", speed + ""); if ( speed > 10) { return ; } List<LatLng> points = new ArrayList<LatLng>(); points.add(p1); points.add(p2); OverlayOptions ooPolyline11 = new PolylineOptions().width(10) .points(points).dottedLine(true).customTexture(mGreenTexture); mTexturePolyline = (Polyline) mBaiduMap.addOverlay(ooPolyline11); } mLatitude = currentLatitude; mLongitude = currentLongitude; mTime = currentTime; Toast.makeText(getActivity().getApplication(), " currentLatitude =-"+currentLatitude +"currentLongitude =-"+currentLongitude , Toast.LENGTH_SHORT ).show(); Log.e("baoyou", "currentLatitude =-"+currentLatitude +"currentLongitude =-"+currentLongitude); if (isFirstLoc) { isFirstLoc = false; LatLng ll = new LatLng(currentLatitude,currentLongitude); MapStatus.Builder builder = new MapStatus.Builder(); builder.target(ll).zoom(18.0f); mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build())); } } public void onReceivePoi(BDLocation poiLocation) { } } @Override public void onPause() { mMapView.onPause(); super.onPause(); } @Override public void onResume() { mMapView.onResume(); super.onResume(); } @Override public void onDestroy() { // Destroy the location on exit mLocClient.stop(); // Turn off the positioning layer mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy (); mGreenTexture.recycle(); mMapView = null; super.onDestroy (); } }
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.curiousby.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="18" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <uses-permission android:name="android.permission.DISABLE_KEYGUARD" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.curiousby.demo.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.curiousby.demo.running.RunningMainActivity"></activity> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > </service> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="gubKYsssq9ePIdVpBhz0VBfwx2PoMoYr" /> </application> </manifest>
Donate to developers
Driven by interest, I write 免费
something with joy and sweat. I hope you like my work and can support it at the same time. Of course, if you have money to support a money field (the love sign in the upper right corner, support Alipay and PayPal donations), if you have no money to support a personal field, thank you.
Thank you for your sponsorship, I will do better!