Android 安卓最接近的地方

Android 安卓最接近的地方,android,Android,我的目标是寻找离我当前职位最近的地方 我有一个XML文件,其中包含不同的地方的经度和纬度 我创建了一个代码来确定我的当前位置 package com.geoo; import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.Loc

我的目标是寻找离我当前职位最近的地方

我有一个XML文件,其中包含不同的地方的经度和纬度

我创建了一个代码来确定我的当前位置

    package com.geoo;

import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.Toast;

public class localisation extends ActivityBase{

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);
setContentView(R.layout.localisation);

/* Use the LocationManager class to obtain GPS locations */

LocationManager mlocManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);

LocationListener mlocListener = new MyLocationListener();

mlocManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, mlocListener);

}

/* Class My Location Listener */

public class MyLocationListener implements LocationListener

{

@Override

public void onLocationChanged(Location loc)

{

loc.getLatitude();

loc.getLongitude();

String Text = "My current location is: " + "Latitud = " + loc.getLatitude()+  "Longitud = " + loc.getLongitude();
Toast.makeText( getApplicationContext(),Text, Toast.LENGTH_SHORT).show();
}

@Override

public void onProviderDisabled(String provider)
{
Toast.makeText( getApplicationContext(),"Gps Disabled",Toast.LENGTH_SHORT ).show();
}

@Override

public void onProviderEnabled(String provider)
{
Toast.makeText( getApplicationContext(),"Gps Enabled",Toast.LENGTH_SHORT).show();
}

@Override

public void onStatusChanged(String provider, int status, Bundle extras)

{
}
}/* End of Class MyLocationListener */

}/* End of UseGps Activity */
我还创建了一个XML解析器,下面是代码

package xmlparse;


import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class QueryXML {
    public void query() throws ParserConfigurationException, SAXException,
            IOException, XPathExpressionException {
        // Standard of reading a XML file
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder builder;
        Document doc = null;
        XPathExpression expr = null;
        builder = factory.newDocumentBuilder();
        doc = builder.parse("a.xml");  //C:\\Users\\aymen\\Desktop\\

        // Create a XPathFactory
        XPathFactory xFactory = XPathFactory.newInstance();

        // Create a XPath object
        XPath xpath = xFactory.newXPath();

        // Compile the XPath expression
        expr = xpath.compile("/postes/poste[gouvernourat='Tunis']/longitude/text()");
        // Run the query and get a nodeset
        Object result = expr.evaluate(doc, XPathConstants.NODESET);

        // Cast the result to a DOM NodeList
        NodeList nodes = (NodeList) result;
        for (int i=0; i<nodes.getLength();i++){
            System.out.println(nodes.item(i).getNodeValue());
        }
    }

    public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
        QueryXML process = new QueryXML();
        process.query();
    }
}
包xmlparse;
导入java.io.IOException;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.xpath.xpath;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.Document;
导入org.w3c.dom.NodeList;
导入org.xml.sax.SAXException;
公共类QueryXML{
public void query()引发ParserConfiguration异常,SAXException,
IOException,XPathExpressionException{
//读取XML文件的标准
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
文档生成器;
单据单据=空;
XPathExpression expr=null;
builder=factory.newDocumentBuilder();
doc=builder.parse(“a.xml”);/C:\\Users\\aymen\\Desktop\\
//创建XPathFactory
XPathFactory xFactory=XPathFactory.newInstance();
//创建XPath对象
XPath=xFactory.newXPath();
//编译XPath表达式
expr=xpath.compile(“/postes/poste[gouvernourat='Tunis']/longitude/text()”;
//运行查询并获取节点集
Object result=expr.evaluate(doc,XPathConstants.NODESET);
//将结果强制转换为DOM节点列表
节点列表节点=(节点列表)结果;

对于(int i=0;i假设您有两组坐标,您可以使用该方法或来计算近距。

纬度是一个恒定的距离(约110公里/度),但距离经度取决于纬度。我认为您最好将坐标转换为XYZ笛卡尔坐标(单位为米)然后用一个简单的距离方程找到最近的位置

距离=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2)

要将Lat长高度转换为XYZ(米),我使用以下方法

R=6378100//地球半径(米)

纬度=纬度*pi/180

LON=经度*pi/180

x=-R*cos(LAT)*cos(LON)

y=R*sin(纬度)


z=R*cos(横向)*sin(纵向)

我认为我的方法计算量较小。Arcin/arccos/arctan函数使用了大量的杯形幂。您只需对每个现有位置执行一次。在使用距离方程之前,您可能需要添加一个步骤,将X和Y值与if语句进行比较。您可能还需要执行R=R+高度;