2011-01-07 9 views
1

私のアプリはサーバーからKMLファイルを受け取り、すべての目印を地図に表示します。しかし、あまりにも多くのデータが前後に行き渡っているので、サーバーから短い文字列(lat、数点のlang)だけを受け取りたい。AndroidでKMLファイルを作成する方法は?

は、それは私がSimple XMLライブラリを使用してきました。今のAndroidでうまく動作する任意のKMLライブラリがあるようには思えないAndroidデバイス(このための任意のAPI?

答えて

2

にKMLファイルを作成することが可能です

ただし、既にデータを単純な形式で受け取っているため、Google Maps APIを自分で直接使用する方がはるかに優れています。これにより、ビルドする手間が省けますKMLをGoogleに送信してレンダリングした地図を取得します。ここではチュートリアルを開始します:http://developer.android.com/resources/tutorials/views/hello-mapview.html

+0

KMLから複数の目印を表示する最も簡単な方法は、インテントを介してである:ウリURI1 = Uri.parse( "GEO:0,0 Q = HTTP:/ urlOfKML")。 final Intent mapIntent =新しいインテント(Intent.ACTION_VIEW、uri1); startActivity(mapIntent);そのため、私はデバイス上にKMLを作成する必要があります。 – DixieFlatline

+0

詳細は私の回答を更新します。 IMHO、KMLを作成するのではなく、マップAPIを直接使用する方がよいでしょう。 – elevine

+0

あなたが正しいです、私は受け取った座標からオーバーレイアイテムを作成し、マップに配置する必要があります。 – DixieFlatline

1

あなたはlibkmlを使用できますが、それはネイティブライブラリであり、あなたのAndroidプロジェクトに含めることができるJavaライブラリであるNDKまたはgekmllib が必要です。

-1
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(); 
       } 
      } 
     }); 



    } 


} 
+0

説明のないコードの束はほとんど答えではありません。 – m02ph3u5

関連する問題