精华内容
下载资源
问答
  • 通过GPS获取位置信息

    千次阅读 2016-07-12 17:50:09
    通过GPS获取位置信息.自己封装了一个单例工具类,用来获取GPS位置信息

    通过GPS获取位置信息

    自己封装了一个单例工具类,用来获取GPS位置信息

    package com.e7wifi.colourmedia.Util;
    
    import android.app.PendingIntent;
    import android.content.Context;
    import android.content.Intent;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.net.Uri;
    import android.os.Bundle;
    
    /**
     * Created by 135 on 2016/7/8.
     */
    public class GpsUtils {
        private static GpsUtils instance = null;
        Context context;
        LocationManager locationManager;
        String locationProvider;
        FinishLocationListener finishLocationListener;
        public double[] locations=new double[2];
        private GpsUtils(Context context){
            this.context=context;
        }
    
        public static GpsUtils getInstance(Context context) {
            if (instance == null) {
                synchronized (GpsUtils.class) {
                    if (instance == null) {
                        instance = new GpsUtils(context);
                    }
                }
            }
            return instance;
        }
    
        /**
         * 开始定位手机位置
         */
        public  void  startGetGps()
        {
            setBestGps();
            //获取Location
            Location location = locationManager.getLastKnownLocation(locationProvider);
                if(location!=null) {
                    locations[0] = location.getLatitude();
                    locations[1] = location.getLongitude();
                }
                locationManager.requestLocationUpdates(locationProvider, 2000, 10, locationListener);
    //            if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
    //            {
    //                toggleGPS();
    //            }
            }
    //获取做好的定位方式并设置
        private void setBestGps() {
            Criteria criteria = new Criteria();
            criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
            criteria.setAltitudeRequired(false);//无海拔要求
            criteria.setBearingRequired(false);//无方位要求
            criteria.setCostAllowed(true);//允许产生资费
            criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
            locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
            locationProvider=locationManager.getBestProvider(criteria,false);
        }
    
    
        /**
         * 移除位置监听
         */
       public void removeGpsListener()
       {
           locationManager.removeUpdates(locationListener);
       }
    
        /**
         * 开启位置监听
          */
       public void openUpdateListener(int minTime,int minDistance)
       {
           locationManager.requestLocationUpdates(locationProvider, minTime, minDistance, locationListener);
       }
    
    
    //打开GPS,这个API已经无法使用了。现在的权限机制,这个方法已经无法代码打开GPS
        private void toggleGPS() {
    
            Intent gpsIntent = new Intent();
    
            gpsIntent.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider");
    
            gpsIntent.addCategory("android.intent.category.ALTERNATIVE");
    
            gpsIntent.setData(Uri.parse("custom:3"));
    
            try {
    
                PendingIntent.getBroadcast(context, 0, gpsIntent, 0).send();
    
            } catch (PendingIntent.CanceledException e) {
    
                e.printStackTrace();
    
                locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, locationListener);
    
                Location location1 = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
    
                if (location1 != null) {
    
                    locations[0] = location1.getLatitude(); // 经度
    
                    locations[1] = location1.getLongitude(); // 纬度
    
                }
    
            }
    
        }
    
        /**
         * 获取位置经纬度坐标
         * @return 经纬度坐标latitude,longitude;
         */
        public double[] getLocations()
        {
            return locations;
        }
    
    
        private  double[]   updateWithNewLocation(Location location) {
    
            double[] locations =new double[2] ;
    
            if (location != null) {
                double lat = location.getLatitude();
                double lng = location.getLongitude();
                locations[0]=lat;
                locations[1]=lng;
            }
            return locations;
        }
    
        public void setfinishLocationListener(FinishLocationListener listener)
        {
            finishLocationListener=listener;
        }
    
    //位置信息更新时的回调接口
        public interface FinishLocationListener
        {
            void alreadyFinishLocation(Location location);
        }
    
    
        private  LocationListener locationListener = new LocationListener() {
            public void onLocationChanged(Location location) {
                locations=updateWithNewLocation(location);
                if(finishLocationListener!=null) {
                    finishLocationListener.alreadyFinishLocation(location);
                    finishLocationListener=null;
                }
            }
    
            public void onProviderDisabled(String provider) {
                setBestGps();
            }
    
            public void onProviderEnabled(String provider) {
    
            }
    
            public void onStatusChanged(String provider, int status, Bundle extras) {
                setBestGps();
            }
    
        };
    
    }
    展开全文
  • GPS从入门放弃(七) --- GPS卫星位置解算

    万次阅读 多人点赞 2019-10-09 15:44:24
    GPS从入门放弃(七) — GPS卫星位置解算 上一篇讲了开普勒轨道参数,根据这些参数就可以确定卫星的位置,这一篇我们来实际计算一下。 WGS-84基本参数 首先给出几个WGS-84坐标系中的基本参数: a=6378137[m]...

    GPS从入门到放弃(七) — GPS卫星位置解算

    上一篇讲了开普勒轨道参数,根据这些参数就可以确定卫星的位置,这一篇我们来实际计算一下。

    WGS-84基本参数

    首先给出几个WGS-84坐标系中的基本参数:

    • a = 6378137 [ m ] a = 6378137[m] a=6378137[m] # 基准椭球体长半径
    • f = 1 / 298.257223563 f = 1/298.257223563 f=1/298.257223563 # 基准椭球体扁率
    • Ω ˙ e = 7.2921151467 × 1 0 − 5 [ r a d / s ] \dot{\Omega}_e = 7.2921151467\times10^{-5}[rad/s] Ω˙e=7.2921151467×105[rad/s] # 地球自转角速度
    • μ = 3.986005 × 1 0 14 [ m 3 / s 2 ] \mu = 3.986005\times10^{14}[m^3/s^2] μ=3.986005×1014[m3/s2] # 地球引力常数GM
    • c = 2.99792458 × 1 0 8 [ m / s ] c = 2.99792458\times10^8[m/s] c=2.99792458×108[m/s] # 真空中的光速

    Python代码如下:

    # WGS-84基本参数
    a = 6378137 # 基准椭球体长半径(m)
    f = 1/298.257223563 # 基准椭球体扁率
    Omega_e_Dot = 7.2921151467e-5 # 地球自转角速度(rad/s)
    mu = 3.986005e14 # 地球引力常数GM(m^3/s^2)
    c = 2.99792458e8 # 真空中的光速(m/s)
    

    星历参数

    • t o e t_{oe} toe # 星历参考时间
    • A \sqrt{A} A # 卫星轨道半长轴A的平方根
    • e e e # 卫星轨道偏心率
    • i 0 i_0 i0 # t o e t_{oe} toe时的轨道倾角
    • Ω 0 \Omega_0 Ω0 # 周内时为0时的轨道升交点赤经
    • ω \omega ω # 近地点角距
    • M 0 M_0 M0 # t o e t_{oe} toe时的平近点角
    • Δ n \Delta_n Δn # 卫星平均角速度校正值
    • i ˙ \dot{i} i˙ # 轨道倾角的变化率
    • Ω ˙ \dot{\Omega} Ω˙ # 轨道升交点赤经的变化率
    • C u c C_{uc} Cuc # 升交点角距余弦调和校正振幅
    • C u s C_{us} Cus # 升交点角距正弦调和校正振幅
    • C r c C_{rc} Crc # 轨道半径余弦调和校正振幅
    • C r s C_{rs} Crs # 轨道半径正弦调和校正振幅
    • C i c C_{ic} Cic # 轨道倾角余弦调和校正振幅
    • C i s C_{is} Cis # 轨道倾角正弦调和校正振幅

    从网站 ftp://cddis.nasa.gov/gnss/data 下载2019年国庆(10月1日)当天的星历数据,可以得到星历参数的值,Python代码如下:

    # 星历参数
    t_oe = 2.016000000000E+05
    A_sqrt = 5.153681812286E+03
    e = 1.475233526435E-02
    i_0 = 9.590228562257E-01
    Omega_0 = -1.091936976129E-01
    omega = 6.837269280624E-01
    M_0 = 1.699075304872E+00
    Delta_n = 4.599120143243E-09
    i_Dot = -3.957307694893E-10
    Omega_Dot = -8.244629136182E-09
    Cuc = -5.902722477913E-06
    Cus = 9.264796972275E-06
    Crc = 2.046875000000E+02
    Crs = -1.155625000000E+02
    Cic = -3.259629011154E-07
    Cis = 5.774199962616E-08
    

    下面开始计算。

    计算卫星轨道半长轴

    A = A_sqrt**2 # 卫星轨道半长轴
    print("A={}".format(A))
    

    可得 A=26560436.222287513(米)

    计算规化时间

    假设我们要计算这个星历发射时刻 t = 1.993680000000 E + 05 t = 1.993680000000E+05 t=1.993680000000E+05 的卫星位置,设规化时间为 t k t_k tk,即为 t t t 时刻与参考时间 t o e t_{oe} toe 之间的差异:
    t k = t − t o e t_k = t - t_{oe} tk=ttoe
    要注意 t t t 值应该在 t o e t_{oe} toe 前后两小时之间才算有效。
    代码如下:

    A = A_sqrt**2 # 卫星轨道半长轴
    t = 1.993680000000E+05
    t_k = t - t_oe
    if t_k > 302400:
        t_k -= 604800
    if t_k < -302400:
        t_k += 604800
    if -7200 <= t_k and t_k <= 7200:
        print("t_k={}".format(t_k))
    else:
        print("time t={} is not valid".format(t))
    

    可得 t k = − 2232.0 t_k=-2232.0 tk=2232.0s(秒)

    计算校正后的卫星平均角速度

    校正后的卫星平均角速度 n = n 0 + Δ n n = n_0 + \Delta_n n=n0+Δn,其中 n 0 n_0 n0 为卫星平均角速度,可由 n 0 = μ A 3 n_0 = \sqrt{\frac{\mu}{A^3}} n0=A3μ 求得。代码如下:

    import math
    n_0 = math.sqrt(mu/A**3) # 卫星平均角速度
    n = n_0 + Delta_n # 校正后的卫星平均角速度
    print("n={}".format(n))
    

    可得 n = 0.00014585785029794723 n=0.00014585785029794723 n=0.00014585785029794723(弧度/秒)

    计算近点角

    1. 平近点角 M k M_k Mk

    M k = M 0 + n t k M_k = M_0 + n t_k Mk=M0+ntk,其范围在0~2 π \pi π 之间。

    1. 偏近点角 E E E

    由开普勒方程,有
    M = E − e sin ⁡ E M = E - e \sin E M=EesinE
    可得
    E = M + e sin ⁡ E E = M + e \sin E E=M+esinE
    为便于计算机求解,利用迭代算法
    E j + 1 = M + e sin ⁡ E j E_{j+1} = M + e \sin E_j Ej+1=M+esinEj
    当误差 ∣ E j + 1 − E j ∣ < 1 0 − 8 |E_{j+1}-E_j|<10^{-8} Ej+1Ej<108 时停止迭代。

    1. 真近点角 ν k \nu_k νk


    cos ⁡ ν k = cos ⁡ E k − e 1 − e cos ⁡ E k \cos\nu_k = \frac{\cos E_k - e}{1-e\cos E_k} cosνk=1ecosEkcosEke
    sin ⁡ ν k = 1 − e 2 sin ⁡ E k 1 − e cos ⁡ E k \sin\nu_k = \frac{\sqrt{1-e^2}\sin E_k}{1-e\cos E_k} sinνk=1ecosEk1e2 sinEk
    可得
    ν k = arctan ⁡ ( 1 − e 2 sin ⁡ E k cos ⁡ E k − e ) \nu_k = \arctan\left(\frac{\sqrt{1-e^2}\sin E_k}{\cos E_k - e}\right) νk=arctan(cosEke1e2 sinEk)

    代码如下:

    # 平近点角
    M_k = M_0 + n*t_k
    if M_k < 0:
        M_k += 2*math.pi
    if M_k > 2*math.pi:
        M_k -= 2*math.pi
    print("M_k={}".format(M_k))
    
    # 偏近点角
    E_old = M_k
    E_new = M_k + e*math.sin(E_old)
    i = 1
    while abs(E_new - E_old)>1e-8:
        print("i={},E={}".format(i, E_new))
        E_old = E_new
        E_new = M_k + e*math.sin(E_old)
        i += 1
        if (i>10):
            break
    
    E_k = E_new
    print("E_k={}".format(E_k))
    
    # 真近点角
    cosNu_k = (math.cos(E_k) - e) / (1 - e*math.cos(E_k))
    sinNu_k = (math.sqrt(1-e**2)*math.sin(E_k)) / (1 - e*math.cos(E_k))
    print("cosNu_k={}".format(cosNu_k))
    print("sinNu_k={}".format(sinNu_k))
    
    if cosNu_k == 0:
        if sinNu_k > 0:
            Nu_k = math.pi/2
        else:
            Nu_k = -math.pi/2
    else:
        Nu_k = math.atan(sinNu_k/cosNu_k)
    
    if cosNu_k < 0:
        if sinNu_k >= 0:
            Nu_k += math.pi
        else:
            Nu_k -= math.pi
    
    print("Nu_k={}".format(Nu_k))
    

    可得:
    平近点角 M k = 1.3735205830069819 M_k=1.3735205830069819 Mk=1.3735205830069819(弧度),
    偏近点角 E k = 1.3880272058351995 E_k=1.3880272058351995 Ek=1.3880272058351995(弧度),
    真近点角 ν k = 1.4025538389890888 \nu_k=1.4025538389890888 νk=1.4025538389890888(弧度)。

    计算升交点角距 Φ k \Phi_k Φk

    Φ k = ν k + ω \Phi_k=\nu_k+\omega Φk=νk+ω

    Phi_k = Nu_k + omega
    print("Phi_k={}".format(Phi_k))
    

    得到 Φ k = 2.086280767051489 \Phi_k=2.086280767051489 Φk=2.086280767051489(弧度)

    计算摄动校正后的升交点角距 u k u_k uk、卫星矢径长度 r k r_k rk、轨道倾角 i k i_k ik

    根据以下关系计算
    u k = Φ k + δ u k u_k = \Phi_k + \delta u_k uk=Φk+δuk
    r k = A ( 1 − e cos ⁡ E k ) + δ r k r_k = A(1-e\cos E_k)+\delta r_k rk=A(1ecosEk)+δrk
    i k = i 0 + i ˙ ⋅ t k + δ i k i_k = i_0 + \dot{i}\cdot t_k + \delta i_k ik=i0+i˙tk+δik
    其中
    δ u k = C u s sin ⁡ 2 Φ k + C u c cos ⁡ 2 Φ k \delta u_k = C_{us}\sin2\Phi_k + C_{uc}\cos2\Phi_k δuk=Cussin2Φk+Cuccos2Φk
    δ r k = C r s sin ⁡ 2 Φ k + C r c cos ⁡ 2 Φ k \delta r_k = C_{rs}\sin2\Phi_k + C_{rc}\cos2\Phi_k δrk=Crssin2Φk+Crccos2Φk
    δ i k = C i s sin ⁡ 2 Φ k + C i c cos ⁡ 2 Φ k \delta i_k = C_{is}\sin2\Phi_k + C_{ic}\cos2\Phi_k δik=Cissin2Φk+Ciccos2Φk
    代码如下:

    delta_u_k = Cus*math.sin(2*Phi_k) + Cuc*math.cos(2*Phi_k)
    delta_r_k = Crs*math.sin(2*Phi_k) + Crc*math.cos(2*Phi_k)
    delta_i_k = Cis*math.sin(2*Phi_k) + Cic*math.cos(2*Phi_k)
    print("delta_u_k={}".format(delta_u_k))
    print("delta_r_k={}".format(delta_r_k))
    print("delta_i_k={}".format(delta_i_k))
    
    u_k = Phi_k + delta_u_k
    r_k = A*(1-e*math.cos(E_k)) + delta_r_k
    i_k = i_0 + i_Dot*t_k + delta_i_k
    print("u_k={}".format(u_k))
    print("r_k={}".format(r_k))
    print("i_k={}".format(i_k))
    

    可得校正后的:
    升交点角距 u k = 2.086275853661298 u_k=2.086275853661298 uk=2.086275853661298(弧度),
    卫星矢径长度 r k = 26489214.0423851 r_k=26489214.0423851 rk=26489214.0423851(米),
    轨道倾角 i k = 0.9590238575068554 i_k=0.9590238575068554 ik=0.9590238575068554(弧度)。

    坐标转换

    由升交点角距和卫星矢径长度即可确定卫星在轨道平面的位置,当然,是用极坐标表示的。我们将其转换为直角坐标系:
    x k ′ = r k cos ⁡ u k y k ′ = r k sin ⁡ u k z k ′ = 0 x'_k = r_k\cos u_k \\ y'_k = r_k\sin u_k \\ z'_k = 0 xk=rkcosukyk=rksinukzk=0
    然后计算升交点赤经 Ω k \Omega_k Ωk
    Ω k = Ω 0 + ( Ω ˙ − Ω ˙ e ) t k − Ω ˙ e t o e \Omega_k = \Omega_0 + (\dot{\Omega} - \dot{\Omega}_e) t_k - \dot{\Omega}_e t_{oe} Ωk=Ω0+(Ω˙Ω˙e)tkΩ˙etoe
    最后将卫星在轨道直角坐标系中的坐标 ( x k ′ , y k ′ , z k ′ ) (x'_k, y'_k, z'_k) (xk,yk,zk) 转换为在WGS-84坐标系中的坐标 ( x k , y k , z k ) (x_k, y_k, z_k) (xk,yk,zk)
    x k = x k ′ cos ⁡ Ω k − y k ′ cos ⁡ i k sin ⁡ Ω k y k = x k ′ sin ⁡ Ω k + y k ′ cos ⁡ i k cos ⁡ Ω k z k = y k ′ sin ⁡ i k x_k = x'_k\cos\Omega_k - y'_k\cos i_k \sin \Omega_k \\ y_k = x'_k\sin\Omega_k + y'_k\cos i_k \cos \Omega_k \\ z_k = y'_k\sin i_k xk=xkcosΩkykcosiksinΩkyk=xksinΩk+ykcosikcosΩkzk=yksinik
    代码如下:

    x_p_k = r_k * math.cos(u_k)
    y_p_k = r_k * math.sin(u_k)
    print("x_p_k={}".format(x_p_k))
    print("y_p_k={}".format(y_p_k))
    
    Omega_k = Omega_0 + (Omega_Dot - Omega_e_Dot)*t_k - Omega_e_Dot*t_oe
    print("Omega_k={}".format(Omega_k))
    
    x_k = x_p_k*math.cos(Omega_k) - y_p_k*math.cos(i_k)*math.sin(Omega_k)
    y_k = x_p_k*math.sin(Omega_k) + y_p_k*math.cos(i_k)*math.cos(Omega_k)
    z_k = y_p_k*math.sin(i_k)
    print("x_k={}".format(x_k))
    print("y_k={}".format(y_k))
    print("z_k={}".format(z_k))
    

    最后得到卫星在WGS-84坐标系中的位置坐标为:
    [ x k y k z k ] = [ 17927326.1391382 4931779.063749035 18867087.569379408 ] ( 米 ) \left[ \begin{array}{ll} x_k \\ y_k \\ z_k \end{array} \right]= \left[ \begin{array}{ll} 17927326.1391382 \\ 4931779.063749035 \\ 18867087.569379408 \end{array} \right](米) xkykzk=17927326.13913824931779.06374903518867087.569379408()

    展开全文
  • 实现了一个GPS信息记录器,实时上传GPS信息,可以设定记录周期,也可以选择记录文件也可以通过http上传server上
  • Unity获取GPS地理位置信息

    千次阅读 2019-08-21 23:10:27
    因为项目功能需要,需要获取用户当前的位置信息,百度了一下,很多资料,发现都不能满足直自己的需求。于是整合了网上的资料,才满足自己的需求,说说需求吧:需要定位玩家具体位置,具体街道信息。 获取经纬度 ...

    unity获取地理位置

    因为项目功能需要,需要获取用户当前的位置信息,百度了一下,很多资料,发现都不能满足直自己的需求。于是整合了网上的资料,才满足自己的需求,说说需求吧:需要定位到玩家具体位置,具体到街道信息。

    获取经纬度

    获取经纬的方式我使用自带API, 官方说明;http://docs.unity3d.com/Documentation/ScriptReference/LocationService.Start.html在这里插入图片描述
    几个重要的参数;

    1. isEnabledByUser – 检测用户设置里的定位服务是否启用(首次会弹出提示,询问用户是否同意。如果不同意,定位会失败)
    2. lastData – 最近一次测量的地理位置(LocationInfo lastData; 也就是要和 LocationInfo 关联了)
    3. status – 定位服务的状态
    4. 其他属性,自行看文档,毕竟看官方文档是我们学习知识最好和最快的方式之一,

    代码如下

        IEnumerator Start()
        {
            if (!Input.location.isEnabledByUser)
            {
                Input.location.Start();
    
                yield break;
            }
               
            // Start service before querying location
            Input.location.Start();
    
            // Wait until service initializes
            int maxWait = 20;
            while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
            {
                yield return new WaitForSeconds(1);
                maxWait--;
            }
    
            // Service didn't initialize in 20 seconds
            if (maxWait < 1)
            {
                print("Timed out");
                yield break;
            }
    
            // Connection has failed
            if (Input.location.status == LocationServiceStatus.Failed)
            {
                print("Unable to determine device location");
                yield break;
            }
            else
            {
                // Access granted and location value could be retrieved
                print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
    
                //取出位置的经纬度
                string str = Input.location.lastData.longitude + "," + Input.location.lastData.latitude;
                Debug.Log("定位信息" +  GetLocationByLngLat(str)); 
            }
    
            // Stop service if there is no need to query location updates continuously
            Input.location.Stop();
        }
    

    地址解析 Geocoder

    地址解析类用于在地址和经纬度之间进行转换的服务。 本功能以异步方式将检索条件发送至服务器,通过您自定义的回调函数将结果返回,也就是说我们可以通过经纬度换算出我们的位置详情,
    代码如下;

      const string key = "6bda73179a87a92394489045b32a0f46";		//去高德地图开发者申请 这个key的流量不知道被哪位同学用完了,
    
        /// <summary>
        /// 根据经纬度获取地址
        /// </summary>
        /// <param name="LngLatStr">经度纬度组成的字符串 例如:"113.692100,34.752853"</param>
        /// <param name="timeout">超时时间默认10秒</param>
        /// <returns>失败返回"" </returns>
        public string GetLocationByLngLat(string LngLatStr, int timeout = 10000)
        {
            string url = $"http://restapi.amap.com/v3/geocode/regeo?key={key}&location={LngLatStr}";
            return GetLocationByURL(url, timeout);
        }
    
        /// <summary>
        /// 根据经纬度获取地址
        /// </summary>
        /// <param name="lng">经度 例如:113.692100</param>
        /// <param name="lat">维度 例如:34.752853</param>
        /// <param name="timeout">超时时间默认10秒</param>
        /// <returns>失败返回"" </returns>
        public string GetLocationByLngLat(double lng, double lat, int timeout = 10000)
        {
            string url = $"http://restapi.amap.com/v3/geocode/regeo?key={key}&location={lng},{lat}";
            return GetLocationByURL(url, timeout);
        }
        /// <summary>
        /// 根据URL获取地址
        /// </summary>
        /// <param name="url">Get方法的URL</param>
        /// <param name="timeout">超时时间默认10秒</param>
        /// <returns></returns>
        private string GetLocationByURL(string url, int timeout = 10000)
        {
            string strResult = "";
            try
            {
                HttpWebRequest req = WebRequest.Create(url) as HttpWebRequest;
                req.ContentType = "multipart/form-data";
                req.Accept = "*/*";
                //req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
                req.UserAgent = "";
                req.Timeout = timeout;
                req.Method = "GET";
                req.KeepAlive = true;
                HttpWebResponse response = req.GetResponse() as HttpWebResponse;
                using (StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
                {
                    strResult = sr.ReadToEnd();
                }
                int formatted_addressIndex = strResult.IndexOf("formatted_address");
                int addressComponentIndex = strResult.IndexOf("addressComponent");
                int cutIndex = addressComponentIndex - formatted_addressIndex - 23;
                int subIndex = formatted_addressIndex + 20;
                return strResult;
            }
            catch (Exception)
            {
                strResult = "";
            }
            return strResult;
        }
    

    结果如下;

    {"status":"1","regeocode":{"addressComponent":{"city":"福州市","province":"福建省","adcode":"350121","district":"闽侯县","towncode":"350121107000","streetNumber":{"number":"6号","location":"119.213622,26.0423319","direction":"东南","distance":"114.359","street":"高新大道"},"country":"中国","township":"上街镇","businessAreas":[[]],"building":{"name":[],"type":[]},"neighborhood":{"name":[],"type":[]},"citycode":"0591"},"formatted_address":"福建省福州市闽侯县上街镇高新大道"},"info":"OK","infocode":"10000"} 
    
    展开全文
  • gps定位获取此时的位置信息。但是gps的特点,需要在空旷的地方才能定位。在楼层中的话要看人品了。楼下百分百能获取信息。给大家分享一下。
  • 最近在做一个 Android 项目,需要用到GPS获取位置信息 API 查了一下,发现获取位置信息仅需极其简单的一句即可getLastKnownLocation(LocationManager.GPS_PROVIDER)郁闷的是一直为null,于是搜集整理下,晒出来...
  • EXIF JPEG图片中提取GPS位置信息

    万次阅读 2014-06-21 01:54:30
    图片中附带GPS信息

    符合EXIFJPEG标准的图片,除了记录图片压缩数据之外,在存储了拍摄参数,其中包括拍摄时GPS参数信息,因此,可以利用程序从EXIF元数据信息中解析提取GPS位置信息。

     

    1. Java读取EXIF信息

    Metadata Extractor是一个开源的Java用具解析图片元数据的库,可以用来识别JPEG图片的EXIF信息,具体信息参见:http://code.google.com/p/metadata-extractor/

    下载地址为:http://code.google.com/p/metadata-extractor/downloads/list

    import java.io.File;
    import java.io.IOException;
    import java.util.Collection;
    
    import com.drew.imaging.ImageProcessingException;
    import com.drew.imaging.jpeg.JpegMetadataReader;
    import com.drew.metadata.Metadata;
    import com.drew.metadata.MetadataException;
    import com.drew.metadata.Tag;
    import com.drew.metadata.exif.GpsDirectory;
    
    public class Main {
    	public static void main(String[] args) throws ImageProcessingException,
    			IOException, MetadataException {
    		File jpegFile = new File("01.jpg");
    		Metadata meta = JpegMetadataReader.readMetadata(jpegFile);
    		GpsDirectory gps = meta.getDirectory(GpsDirectory.class);
    		if (gps != null) {
    			Collection<Tag> tags = gps.getTags();
    			for (Tag tag : tags) {
    				System.out.println(tag);
    			}
    		}
    	}
    }
    
    输出结果如下:

    [GPS] GPS Version ID - 2.200
    [GPS] GPS Latitude Ref - N
    [GPS] GPS Latitude - 40.0° 0.0' 16.999999999993065"
    [GPS] GPS Longitude Ref - E
    [GPS] GPS Longitude - 116.0° 22.0' 44.99999999998636"
    [GPS] GPS Altitude Ref - Below sea level
    [GPS] GPS Altitude - 0 metres
    [GPS] GPS Time-Stamp - 8:29:45 UTC
    [GPS] GPS Processing Method - 65 83 67 73 73 0 0 0
    [GPS] GPS Date Stamp - 2014:06:16
    


    2. 在Android中提取GPS信息

    Android API提供解析EXIF,具体可以参见这里:

    http://blog.csdn.net/whucyl/article/details/9103171

     


    展开全文
  • Android GPS获取当前位置信息

    千次阅读 2013-09-07 11:55:51
    package com.example.gpstest; import org.apache.http.util.LangUtils; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import
  • Android GPS应用:动态获取位置信息

    万次阅读 2013-07-20 14:18:42
    在上文中,介绍了GPS概念及Android开发GPS应用涉及的常用类和方法。在本文中,开发一个小应用,实时获取定位信息,包括用户所在的纬度、经度、高度、方向、移动速度等。代码如下: Activity: pa...
  • 照片的GPS位置信息读取

    千次阅读 2019-06-18 15:36:02
    一、照片的 EXIF信息 手机、相机拍摄的照片会自带一些诸如拍摄时间、地点、镜头型号、曝光度、图像尺寸等附加信息,在Windows上可以通过右键文件属性查看和修改相关参数。...二、 照片的 GPS信息 照片EX...
  • 今天小编就为大家分享一篇Android6.0获取GPS定位和获取位置权限和位置信息的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 原理: javascript访问手机GPS位置信息 链接: http://14.18.103.46:8000/location/index (电信某云无法直接开启80端口,坑 ̄へ ̄) 使用方法: (注册什么的就不说了) 主界面 进入定位平台 目标用户访问链接,就能...
  • 车辆GPS位置信息分析-大数据项目

    千次阅读 2019-05-20 10:04:29
    本实验所用数据为江苏省南京市出租车2010年9月1日2日的GPS位置数据,包含了7,726辆出租车的共33,042,225条位置记录。数据集已经存放在HDFS上,路径为“/data/13/1/gps/gps.csv”,各字段以制表符分隔。数据集还...
  • PiaolinPlatformV2.0.0 - 获取手机或电脑GPS位置信息(定位平台) 前言 飘零定位平台于 2019/02/07 正式上线第一代(地址),上线后反响良好,每日都有新增用户,但由当时技术水平限制,后续运营难以接续以及平台扩展...
  • android gps位置读取

    2011-01-27 12:45:27
    android平台读取GPS位置,读取GPS卫星位置,修正之前版本控制台输出位置信息
  • GPS实时定位位置共享

    2016-08-19 20:51:44
    可以通过网络基站和gps三重定位,位置信息更准确。移动的时候定位信息会跟着变动。可以做到类似微信的实时位置共享。
  • GPS

    万次阅读 2021-03-22 18:54:45
    <p>GPS定位技术 作者:闫国梁 最后修改时间:2020年8月30日 关键词:GPS 概述">1 概述 <p>GPS
  • 基于惯性导航芯片ADIS16003,在GPS信号中断的...DSP利用信号中断前的有效GPS信息,通过相关位置检测算法,计算出GPS经纬度信息,由HPI接口上报高层,保证了移动物体全天候位置感知能力,已在某大型通信系统中得到应用。
  • MFC串口读取GPS信息

    2016-01-14 09:56:21
    MFC通过电脑串口接收GPS信息,并查看
  • python读取图片信息gps位置

    千次阅读 2019-11-13 17:40:06
    # 利用百度全球逆地理编码服务(Geocoder)Web API接口服务将经纬转换为位置信息 def convert_gps_to_address ( GPS ) : secret_key = 'zbLsuDDL4CS2U0M4KezOZZbGUY9iWtVf' # 百度密钥 lat , lng = ...
  • 利用百度鹰眼功能实现记录GPS位置,轨迹,路径信息等。运行环境为android studio.
  • 武汉大学遥感专业必修课之GPS应用技术 解算GPS卫星空间位置
  • 由于需要通过iPhone手机上报校友的位置信息,需要在iPhone手机地图上显示世界各地的校友位置,所以对iOS平台的GPS与地图功能做了很深入的研究,最终顺利完成了校友位置上报与校友位置在地图上标注的功能。...
  • gps实时位置的展示

    千次阅读 2018-04-07 13:33:54
    概述 很多时候,我们有这样的使用场景:外业人员在外作业,我们需要知道人员的当前的实时位置和人员信息,如何实现呢?...大多时候,设备传输过来的位置信息数需要做存储的,除了个别情况外。因...
  • adb 命令行模拟GPS位置信息

    万次阅读 2014-04-28 17:28:33
    查看模拟器序列号 ...http://stackoverflow.com/questions/2279647/how-to-emulate-gps-location-in-the-android-emulator http://developer.android.com/tools/debugging/ddms.html#ops-location ...
  • 刚完成一个需要通过GPS获取位置信息的项目(内网项目),所以根据LocationManager获取Providers会出现依旧能判断有网络连接,debug获取providers为[passive, gps, network, local_database]。 ...
  • GPS 接收的详细设备信息和 PVT 将打印屏幕上并保存文件“gpspvt.log”中。 在设备“GARMIN GPSmap 76CSx”(船用型,手持 GPS)上进行测试,该设备具有 Garmin GPS Product_ID:292 和 Garmin GPS 软件...
  • Android如何模拟器获得GPS信息

    千次阅读 2013-12-27 20:08:53
    今天在开发的时候需要调用Android API获得GPS信息,但是网上按照获得GPS信息的方法将代码写好后,打开虚拟机后运行程序,死活都获得不了GPS信息,纠结了好久,终于有所了解,最后发现犯了很低级的错误(本人是...
  • 这个简单的应用程序可让您照片中添加,修改或删除GPS位置信息。 例如,如果您使用不包含GPS信息的电话或设备拍摄了照片。 您只需在地图上移动并点按一个位置,或将GPS坐标复制该应用即可轻松添加位置。 保存并瞧...
  • 根据GPS获取手机位置

    千次阅读 2018-04-18 09:14:45
    根据GPS获取手机位置坐标的类package com.wjy.project.railway.tools; import android.Manifest; import android.app.Service; import android.content.Intent; import android.content.SharedPreferences; import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 43,636
精华内容 17,454
关键字:

从gps到位置信息