2011-01-07 7 views
1

내 앱이 서버에서 KML 파일을 받고 모든 위치 표시를지도에 표시합니다. 하지만 너무 많은 데이터가 앞뒤로 이동하므로 이제 서버에서 짧은 문자열 (lat, 몇 포인트의 lang) 만 수신하려고합니다. Android에서 KML 파일을 만드는 방법은 무엇입니까?

은? 안드로이드 장치 (이것에 대한 어떤 API에 KML 파일을 만들

답변

2

. 나는 Simple XML 라이브러리를 사용하고 지금 안드로이드와 함께 잘 작동합니다 어떤 KML 라이브러리있을 것 같지 않습니다 그것이 가능 KML을 파싱하기 위해 노력하고 있습니다.

그러나 단순한 형식으로 데이터를 이미 받고 있기 때문에 직접 Google Maps API를 직접 사용하는 것이 좋습니다. KML을 Google에 전송 한 다음 렌더링 된지도를 다시 가져 오는 것입니다. 여기에서 자습서를 시작하면 도움이됩니다. http://developer.android.com/resources/tutorials/views/hello-mapview.html

+0

KML 여러 위치 표시를 표시하는 가장 간단한 방법을 통해 의도이다 우리당가 uri1 = Uri.parse ("지역 : Q = 0,0 HTTP :/urlOfKML"); final 인 텐트 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

관련 문제