我想知道我如何在谷歌地图V2上显示包含在KML文件中的路线?
我能够在KML文件中提取字段“坐标”的值,但我不知道为什么我的类不显示映射组件的路径。
这是我的班级:
public class Mappa extends FragmentActivity implements LocationListener {
private GoogleMap googleMap;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mappa);
// Getting Google Play availability status
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext());
if(status != ConnectionResult.SUCCESS) {
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, requestCode);
dialog.show();
}
else {
// Getting reference to the SupportMapFragment of activity_main.xml
SupportMapFragment fm = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
// Getting GoogleMap object from the fragment
googleMap = fm.getMap();
// Enabling MyLocation Layer of Google Map
googleMap.setMyLocationEnabled(true);
// Getting LocationManager object from System Service LOCATION_SERVICE
LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
// Creating a criteria object to retrieve provider
Criteria criteria = new Criteria();
// Getting the name of the best provider
String provider = locationManager.getBestProvider(criteria, true);
// Getting Current Location
Location location = locationManager.getLastKnownLocation(provider);
if(location!=null){
onLocationChanged(location);
}
locationManager.requestLocationUpdates(provider, 20000, 0, this);
new LoadPath().execute(Environment.getExternalStorageDirectory().getPath() + "FILE.kml");
}
}
@Override
public void onLocationChanged(Location location) {
// Getting latitude of the current location
double latitude = location.getLatitude();
// Getting longitude of the current location
double longitude = location.getLongitude();
// Creating a LatLng object for the current location
LatLng latLng = new LatLng(latitude, longitude);
// Showing the current location in Google Map
googleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
// Zoom in the Google Map
googleMap.animateCamera(CameraUpdateFactory.zoomTo(15));
}
@Override
public vo id onProviderDisabled(String provider) { }
@Override
public void onProviderEnabled(String provider) { }
@Override
public void onStatusChanged(String provider, int status, Bundle extras) { }
private class LoadPath extends AsyncTask<String, Void, Void>{
Vector<PolylineOptions> path;
Vector<Vector<LatLng>> path_fragment;
Vector<Polyline> lines;
@Override
p rotected void onPreExecute() {
super.onPreExecute();
path_fragment = new Vector<Vector<LatLng>>();
path = new Vector <PolylineOptions>();
lines = new Vector<Polyline>();
}
@Override
protected Void doInBackground(String... params) {
try {
InputStream inputStream = new FileInputStream(params[0]);
DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = docBuilder.parse(inputStream);
NodeList listCoordinateTag = null;
if (document == null) {
return null;
}
listCoordinateTag = document.getElementsByTagName("coordinates");
for (int i = 0; i < listCoordinateTag.getLength(); i++) {
String coordText = listCoordinateTag.item(i).getFirstChild().getNodeValue().trim();
String[] vett = coordText.split("\\ ");
Vector<LatLng> temp = new Vector<LatLng>();
for(int j=0; j < vett.length; j++){
temp.add(new LatLng(Double.parseDouble(vett[j].split("\\,")[0]),Double.parseDouble(vett[j].split("\\,")[1])));
}
path_fragment.add(temp);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
googleMap.clear();
for(int i=0; i < path_fragment.size(); i++){
// Poliline options
PolylineOptions temp = new PolylineOptions();
for(int j=0; j< path_fragment.get(i).size(); j++)
temp.add(path_fragment.get(i).get(j));
path.add(temp);
}
for(int i = 0; i < path.size(); i++)
lines.add(googleMap.addPolyline(path.get(i)));
for(int i = 0; i < lines.size(); i++){
lines.get(i).setWidth(4);
lines.get(i).setColor(Color.RED);
lines.get(i).setGeodesic(true);
lines.get(i).setVisible(true);
}
}
}
}
这样,我可以通过以下方式获得所有不同的坐标:
经纬度高度
xxxxxxxx-xxxxxxxx-xxxxxxxx
YYYYYY-YYYYYY-YYYYYY
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
但是我不能在地图上显示它们。你能帮帮我吗?
我从自己身上发现了问题!
在上面的代码中,经度和纬度是交换的。。。
这是正确的事情要做的AsyncWG类:
temp.add(new LatLng(Double.parseDouble(vett[j].split("\\,")[**1**]),Double.parseDouble(vett[j].split("\\,")[**0**])));
在KML文件中,坐标是以这种方式给出的,长度-纬度-高度,这就是我交换索引的原因!
很抱歉问你这个问题!
问题内容: 我可以解析kml文件以便在Android中显示路径或点吗?请你能帮我吗? 这是我想在Android Google Map中显示的kml示例代码: 当我将此文件加载到标准网络google map时,它会很好地显示它,但是当我尝试使用android google map进行相同的操作时,它不会这样做。它只是带我到某些地方,仅此而已。我当时正在考虑更改监听器类。当前看起来像这样: 请有人能告
问题内容: 是否有将SVG文件绘制到HTML5画布上的默认方法?GoogleChrome支持将SVG加载为图像(并简单地使用),但是开发者控制台会对此进行警告。 我知道将SVG转换为canvas命令的可能性,但是我希望这不是必需的。我不在乎较旧的浏览器(因此,如果FireFox 4和IE 9支持某些功能,那就足够了)。 问题答案: 编辑2019年12月16日 现在所有主要浏览器都支持Path2D
2D 绘制上下文支持很多在画布上绘制路径的方法。通过路径可以创造出复杂的形状和线条。要绘制路径,首先必须调用beginPath()方法,表示要开始绘制新路径。然后,再通过调用下列方法来实际地绘制路径。 arc(x, y, radius, startAngle, endAngle, counterclockwise):以(x,y)为圆心绘制一条弧线,弧线半径为radius,起始和结束角度(用弧度表示
我想使用R从一个数组中读取“when”值。由Google My tracks创建的kml文件(摘录如下): 节点“when”是“与位置相对应的时间值(在gx:coord元素中指定)”。“gx:coord”是“由经度、纬度和高度三个值组成的坐标值”。(https://developers.google.com/kml/documentation/kmlreference#gxtrack) 我想要的值
操作步骤: ①进入编辑界面,选择线路图层,点击右上角线路,选择"添加线路"按钮。 ②在地图上进行添加,点击确定起点。 注意 ●添加线路不可少于2个点。 ③添加完成后,双击结束绘制。 ④点击"完成",线路添加成功。 操作动图: [查看原图]
我在java swing中有一个UI需求,其中我需要实现以下内容: 顶部的两个按钮放在一个JPanel中。我需要画一条线通过该面板的中心,直到两个按钮的开始。下面的面板是以卡片布局排列的面板的容器。当按钮被点击时,卡片被切换显示另一个面板。 因此,在所有方面,它看起来都像一个JTabbedPane,但有一点不同,选项卡是排列在选项卡窗格中心的按钮。我需要为我正在构建的UI提供这种差异。 正如您所看