私のアプリはサーバーからKMLファイルを受け取り、すべての目印を地図に表示します。しかし、あまりにも多くのデータが前後に行き渡っているので、サーバーから短い文字列(lat、数点のlang)だけを受け取りたい。AndroidでKMLファイルを作成する方法は?
は、それは私がSimple XMLライブラリを使用してきました。今のAndroidでうまく動作する任意のKMLライブラリがあるようには思えないAndroidデバイス(このための任意のAPI?
私のアプリはサーバーからKMLファイルを受け取り、すべての目印を地図に表示します。しかし、あまりにも多くのデータが前後に行き渡っているので、サーバーから短い文字列(lat、数点のlang)だけを受け取りたい。AndroidでKMLファイルを作成する方法は?
は、それは私がSimple XMLライブラリを使用してきました。今のAndroidでうまく動作する任意のKMLライブラリがあるようには思えないAndroidデバイス(このための任意のAPI?
にKMLファイルを作成することが可能です
ただし、既にデータを単純な形式で受け取っているため、Google Maps APIを自分で直接使用する方がはるかに優れています。これにより、ビルドする手間が省けますKMLをGoogleに送信してレンダリングした地図を取得します。ここではチュートリアルを開始します:http://developer.android.com/resources/tutorials/views/hello-mapview.html
public class CreateKmlFileActivity extends FragmentActivity {
private GoogleMap googleMap;
private SupportMapFragment supportMapFragment;
private ArrayList<LatLng> latLngArrayList = new ArrayList<>();
private ArrayList<LatLng> latLngArrayListLine = new ArrayList<>();
private Button button, buttonLine;
private XmlSerializer xmlSerializer;
private boolean flag = false;
private Handler handler;
private Runnable runnable;
GPSTracker gpsTracker;
private double lat;
private double lng;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_task3);
init();
listener();
}
private void init() {
button = (Button) findViewById(R.id.btn_find);
buttonLine = (Button) findViewById(R.id.btn_line);
supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
googleMap = supportMapFragment.getMap();
gpsTracker = new GPSTracker(this);
lat = gpsTracker.latitude;
lng = gpsTracker.longitude;
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
gpsTracker.getLocation();
if (lat != gpsTracker.latitude || lng != gpsTracker.longitude) {
latLngArrayListLine.add(new LatLng(gpsTracker.latitude, gpsTracker.longitude));
lat = gpsTracker.latitude;
lng = gpsTracker.longitude;
}
handler.postDelayed(runnable, 1000 * 60);
}
};
if (!gpsTracker.getIsGPSTrackingEnabled()) {
gpsTracker.showSettingsAlert();
}
//gpsTracker.latitude
}
private void listener() {
googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
if (!flag)
latLngArrayList.add(latLng);
else
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
}
});
buttonLine.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(runnable);
flag = false;
try {
FileOutputStream fileOutputStream = openFileOutput("testLine.kml", Context.MODE_PRIVATE);
xmlSerializer = XmlPullParserFactory.newInstance().newSerializer();
xmlSerializer.setOutput(fileOutputStream, "UTF-8");
xmlSerializer.startDocument(null, null);
xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);
xmlSerializer.startTag(null, "kml");
xmlSerializer.startTag(null, "Document");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("kmlFile");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "Style");
xmlSerializer.attribute(null, "id", "transGreenPoly");
xmlSerializer.startTag(null, "LineStyle");
xmlSerializer.startTag(null, "width");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "width");
xmlSerializer.startTag(null, "color");
xmlSerializer.text("7dff0000");
xmlSerializer.endTag(null, "color");
xmlSerializer.startTag(null, "colorMode");
xmlSerializer.text("random");
xmlSerializer.endTag(null, "colorMode");
xmlSerializer.endTag(null, "LineStyle");
xmlSerializer.endTag(null, "Style");
xmlSerializer.startTag(null, "Folder");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("Google Campus");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "visibility");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "visibility");
xmlSerializer.startTag(null, "description");
xmlSerializer.text("Your Data");
xmlSerializer.endTag(null, "description");
xmlSerializer.startTag(null, "Placemark");
xmlSerializer.startTag(null, "name");
xmlSerializer.text("Data");
xmlSerializer.endTag(null, "name");
xmlSerializer.startTag(null, "visibility");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "visibility");
xmlSerializer.startTag(null, "styleUrl");
xmlSerializer.text("#transRedPoly");
xmlSerializer.endTag(null, "styleUrl");
xmlSerializer.startTag(null, "LineString");
xmlSerializer.startTag(null, "extrude");
xmlSerializer.text("1");
xmlSerializer.endTag(null, "extrude");
xmlSerializer.startTag(null, "altitudeMode");
xmlSerializer.text("relativeToGround");
xmlSerializer.endTag(null, "altitudeMode");
//xmlSerializer.startTag(null, "outerBoundaryIs");
// xmlSerializer.startTag(null, "LinearRing");
xmlSerializer.startTag(null, "coordinates");
for (int i = 0; i < latLngArrayListLine.size(); i++) {
if (isPointInPolygon(latLngArrayListLine.get(i), latLngArrayList))
xmlSerializer.text(latLngArrayListLine.get(i).longitude + "," + latLngArrayListLine.get(i).latitude + ",17 \n");
}
xmlSerializer.endTag(null, "coordinates");
// xmlSerializer.endTag(null, "LinearRing");
//xmlSerializer.endTag(null, "outerBoundaryIs");
xmlSerializer.endTag(null, "LineString");
xmlSerializer.endTag(null, "Placemark");
xmlSerializer.endTag(null, "Folder");
xmlSerializer.endTag(null, "Document");
xmlSerializer.endTag(null, "kml");
xmlSerializer.endDocument();
xmlSerializer.flush();
fileOutputStream.close();
} catch (IOException | XmlPullParserException e) {
e.printStackTrace();
}
}
});
}
}
説明のないコードの束はほとんど答えではありません。 – m02ph3u5
KMLから複数の目印を表示する最も簡単な方法は、インテントを介してである:ウリURI1 = Uri.parse( "GEO:0,0 Q = HTTP:/ urlOfKML")。 final Intent mapIntent =新しいインテント(Intent.ACTION_VIEW、uri1); startActivity(mapIntent);そのため、私はデバイス上にKMLを作成する必要があります。 – DixieFlatline
詳細は私の回答を更新します。 IMHO、KMLを作成するのではなく、マップAPIを直接使用する方がよいでしょう。 – elevine
あなたが正しいです、私は受け取った座標からオーバーレイアイテムを作成し、マップに配置する必要があります。 – DixieFlatline