दिलचस्प पोस्ट
ब्रेस-संलग्न प्रारंभिक सूची निर्माता एक स्ट्रिंग के रूप में एक चर का नाम प्राप्त करना UpdateTargetId में डालने के बजाय नए पृष्ठ पर पुनर्निर्देशित करने के लिए एएसपी.नेट एमवीसी अजाक्स प्रतिक्रिया कैसे प्राप्त करें? बड़ी सीएसवी फ़ाइल पर स्मृति का पायथन (numpy) एएसपी.NET / PHP के मुख्य धारा जावा विकल्प क्या है रसीला प्रमाणीकरण एक साजिश में 4 घटता प्लॉटिंग, 3 वाई-एक्से के साथ एंड्रॉइड: मेरा एप्लिकेशन बहुत बड़ा है और "डेक्स निष्पादित करने में असमर्थ है: विधि आईडी में नहीं है: 65536"? अजगर समारोह के अंदर पैरामीटर नामों की सूची प्राप्त करना एक जार के अंदर लोड फ़ाइल एक JSON फ़ाइल से आर में डेटा आयात करना SQL सर्वर: तालिका में पंक्तियों की अधिकतम संख्या कास्टिंग और रूपांतरण के बीच अंतर क्या है? PostgreSQL में एक अस्थायी फ़ंक्शन कैसे बनाएं? जावास्क्रिप्ट में ब्राउज़र का "ज़ूम" इवेंट पकड़ो

क्यों getSpeed ​​() हमेशा Android पर 0 वापस

मुझे गति प्राप्त करने और जीपीएस से जाने की जरूरत है हालांकि, केवल location.getSpeed() मैं से है location.getSpeed() 0 या कभी कभी उपलब्ध नहीं है। मेरा कोड:

  String provider = initLocManager(); if (provider == null) return false; LocationListener locListener = new LocationListener() { public void onLocationChanged(Location location) { updateWithNewLocation(location, interval, startId); Log.i(getString(R.string.logging_tag), "speed =" + location.getSpeed()); } public void onProviderDisabled(String provider){ updateWithNewLocation(null, interval, startId); } public void onProviderEnabled(String provider) {} public void onStatusChanged(String provider, int status, Bundle extras) {} }; _locManager.requestLocationUpdates(provider, interval, DEFAULT_GPS_MIN_DISTANCE, locListener); private String initLocManager() { String context = Context.LOCATION_SERVICE; _locManager = (LocationManager) getSystemService(context); Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_FINE); criteria.setAltitudeRequired(false); criteria.setBearingRequired(true); criteria.setSpeedRequired(true); criteria.setCostAllowed(true); //criteria.setPowerRequirement(Criteria.POWER_LOW); String provider = _locManager.getBestProvider(criteria, true); if (provider == null || provider.equals("")) { displayGPSNotEnabledWarning(this); return null; } return provider; } 

मैंने मानदंड के साथ खेलने की कोशिश की लेकिन कोई सफलता नहीं मिली। क्या किसी को पता है कि समस्या क्या है?

वेब के समाधान से एकत्रित समाधान "क्यों getSpeed ​​() हमेशा Android पर 0 वापस"

location.getSpeed ​​() केवल स्थान के साथ सेट किया गया है जो देता है .setSpeed ​​() यह एक ऐसा मूल्य है जिसे आप स्थान ऑब्जेक्ट के लिए सेट कर सकते हैं।

जीपीएस का उपयोग करके गति की गणना करने के लिए, आपको थोड़ा गणित करना होगा:

 Speed = distance / time 

तो आपको करने की आवश्यकता होगी:

 (currentGPSPoint - lastGPSPoint) / (time between GPS points) 

सभी फुट / सेक में परिवर्तित हो गए हैं, या फिर आप गति दिखाना चाहते हैं। जब मैंने एक रनर ऐप बनाया, तो मैंने ऐसा किया।

अधिक विशेष रूप से, आपको पूर्ण दूरी के लिए गणना की आवश्यकता होगी:

 (sqrt((currentGPSPointX - lastGPSPointX)^2) + (currentGPSPointY - lastGPSPointY)^2)) / (time between GPS points) 

यह एक नया ट्रैकपॉइंट वर्ग या कुछ और करने में मदद कर सकता है, जो जीपीएस स्थान और समय को अंदर ले जाता है।

मेरी कस्टम स्थाननिष्वर है जो स्पीड मैन्युअल रूप से और स्थान वस्तु द्वारा गति प्राप्त करने के लिए इस्तेमाल किया जाता है।

  new LocationListener() { private Location mLastLocation; @Override public void onLocationChanged(Location pCurrentLocation) { //calcul manually speed double speed = 0; if (this.mLastLocation != null) speed = Math.sqrt( Math.pow(pCurrentLocation.getLongitude() - mLastLocation.getLongitude(), 2) + Math.pow(pCurrentLocation.getLatitude() - mLastLocation.getLatitude(), 2) ) / (pCurrentLocation.getTime() - this.mLastLocation.getTime()); //if there is speed from location if (pCurrentLocation.hasSpeed()) //get location speed speed = pCurrentLocation.getSpeed(); this.mLastLocation = pCurrentLocation; //////////// //DO WHAT YOU WANT WITH speed VARIABLE //////////// } @Override public void onStatusChanged(String s, int i, Bundle bundle) { } @Override public void onProviderEnabled(String s) { } @Override public void onProviderDisabled(String s) { } }; 

गोलाकार ग्रह दूरी पर इन फ़ार्मुलों के साथ गणना की जानी चाहिए:

 private static Double distance(Location one, Location two) { int R = 6371000; Double dLat = toRad(two.getLatitude() - one.getLatitude()); Double dLon = toRad(two.getLongitude() - one.getLongitude()); Double lat1 = toRad(one.getLatitude()); Double lat2 = toRad(two.getLatitude()); Double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.sin(dLon / 2) * Math.sin(dLon / 2) * Math.cos(lat1) * Math.cos(lat2); Double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); Double d = R * c; return d; } private static double toRad(Double d) { return d * Math.PI / 180; } 

Imbru का जवाब वास्तव में अच्छा लग रहा है, लेकिन यह बहुत उपयोगी नहीं है अगर आप इकाइयों के साथ काम कर रहे हैं

मीटर प्रति सेकंड (एम / एस) में गति की गणना करने के लिए मैंने यह किया है।

 new LocationListener() { private Location lastLocation = null; private double calculatedSpeed = 0; @Override public synchronized void onLocationChanged(Location location) { if (lastLocation != null) { double elapsedTime = (location.getTime() - lastLocation.getTime()) / 1_000; // Convert milliseconds to seconds calculatedSpeed = lastLocation.distanceTo(location) / elapsedTime; } this.lastLocation = location; double speed = location.hasSpeed() ? location.getSpeed() : calculatedSpeed; /* There you have it, a speed value in m/s */ . . . } . . . } 

getspeed () ठीक काम करता है आपको दूरी सूत्र का उपयोग कर गणित करने की ज़रूरत नहीं है। यह पहले से ही उपलब्ध हो गया है, जब तक अक्षांश और देशांतर नहीं है, वहाँ एक गति हो जाएगा,

(1) मेरा मानना ​​है कि आप requestLocationUpdates() विधि का उपयोग कर सकते हैं और फिर एक getListener वर्ग को getSpeed() प्रदर्शित करने के लिए निर्धारित onLocationChange विधि के साथ बना सकते हैं। इस तरह मैंने हाल ही में यह स्थान के साथ किया.गेटलाइटिट्यूड और स्थान। मात्रात्मकता, इसलिए मुझे लगता है कि आप सिर्फ getSpeed ​​() उसी तरह का उपयोग कर सकते हैं, सही है?

(2) ग्रहण विवरण खिड़की को पढ़ने के बाद, हालांकि, मुझे लगता है कि यह कहता है कि पिछला व्यक्ति क्या कहता है: "यदि हैस्प स्पीड () झूठा है, तो 0.0f लौटाया गया है।" लेकिन शायद यह मदद करेगा: http://www.ehow.com/how_5708473_convert-latitude-feet.html 🙂

मुझे भी इस समस्या का सामना करने से पहले, मुझे आशा है कि यह मदद कर सकता है

यह 0 देता है क्योंकि आपका डिवाइस जीपीएस पर लॉक नहीं ला सकता है, या जीपीएस से कनेक्ट नहीं हो सकता।

मैंने एक बड़े लेनोवो डिवाइस का इस्तेमाल करने की गति प्राप्त करने की कोशिश की और यह 0 देता है क्योंकि यह जीपीएस पर लॉक नहीं कर सकता।

मैंने एक सैमसंग आकाशगंगा गठजोड़ का उपयोग करने की कोशिश की और यह मेरी गति (एक बेहतर जीपीएस सेंसर) लौटा।

आपके फोन में जीपीएस सेंसर अच्छा नहीं हो सकता है या आप उस क्षेत्र में हैं जहां एक कमजोर जीपीएस सिग्नल है जैसे घर या इमारत के अंदर।

मैं मूल रूप से तात्कालिक गति की गणना करता हूं और फिर सेट स्पीड () विधि का उपयोग स्थान में जोड़ने के लिए करता हूं। इसकी बहुत सटीक क्योंकि मैंने इसे एक वाहन के अंदर तुलना की थी जहां मैं टेक्मीमीटर की जांच कर सकता था।

 private double calculateInstantaneousSpeed(Location location) { double insSpeed = 0; if (y1 == null && x1 <= -1) { //mark the location y1 at time x1 y1 = location; x1 = duration.getDurationAsSeconds(); } else { //mark the location y2 at time x2 y2 = location; x2 = duration.getDurationAsSeconds(); //calculate the slope of the curve (instantaneous speed) dy = y1.distanceTo(y2); dx = x2 - x1; insSpeed = dy / dx; y1 = y2; x1 = x2; } Singleton.getInstance().instantaneousSpeedSamples.add(insSpeed); //System.out.println("Instantaneous Speed m/s: "+insSpeed); return insSpeed; }