Android 安卓最接近的地方
我的目标是寻找离我当前职位最近的地方 我有一个XML文件,其中包含不同的地方的经度和纬度 我创建了一个代码来确定我的当前位置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
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+高度;