2013-10-17 34 views
2

我是KML的新手我必須製作一個KML文件,其中包含有關某個地點的一些信息,並且該數據應顯示在Google地圖中。我已經在java中編寫了一個代碼,它將生成一個KML作爲輸出,但是我遇到了一些問題,KML沒有生成。 java.io.FileNotFoundException:C:\ PlaceMarkers.kml(訪問被拒絕)這是我的錯誤.. 這是我迄今所做..如何從java製作動態kml

import java.io.*; 
    import java.io.IOException; 
    import java.io.PrintWriter; 
    import java.sql.Connection; 
    import java.sql.DriverManager; 
    import java.sql.ResultSet; 
    import java.sql.Statement; 
    import javax.xml.parsers.DocumentBuilder; 
    import javax.xml.parsers.DocumentBuilderFactory; 
    import javax.xml.transform.Result; 
    import javax.xml.transform.Source; 
    import javax.xml.transform.Transformer; 
    import javax.xml.transform.TransformerFactory; 
    import javax.xml.transform.dom.DOMSource; 
    import javax.xml.transform.stream.StreamResult; 

    import org.w3c.dom.Document; 
    import org.w3c.dom.Element; 

    public class GenKMLPlaceMarker { 

public int id; 
public String name; 
public String address; 
public float lat; 
public float lng; 
public String type; 

public static void main(String[] args) { 

    Statement stmt; 
    ResultSet rs; 
    GenKMLPlaceMarker KML = new GenKMLPlaceMarker(); 

    try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String url = "jdbc:mysql://localhost:3306/homeland"; 
     Connection con = DriverManager.getConnection(url, "root", "root"); 
     DocumentBuilderFactory factory = DocumentBuilderFactory 
       .newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     TransformerFactory tranFactory = TransformerFactory.newInstance(); 
     Transformer aTransformer = tranFactory.newTransformer(); 
     Document doc = builder.newDocument(); 
     Element root = doc.createElement("kml"); 
     root.setAttribute("xmlns", "http://earth.google.com/kml/2.1"); 
     doc.appendChild(root); 
     Element dnode = doc.createElement("Document"); 
     root.appendChild(dnode); 
     Element rstyle = doc.createElement("Style"); 
     rstyle.setAttribute("id", "restaurantStyle"); 
     Element ristyle = doc.createElement("IconStyle"); 
     ristyle.setAttribute("id", "restaurantIcon"); 
     Element ricon = doc.createElement("Icon"); 
     Element riconhref = doc.createElement("href"); 
     riconhref 
       .appendChild(doc 
         .createTextNode("http://maps.google.com/mapfiles/kml/pal2/icon63.png")); 
     rstyle.appendChild(ristyle); 
     ricon.appendChild(riconhref); 
     ristyle.appendChild(ricon); 
     dnode.appendChild(rstyle); 
     Element bstyle = doc.createElement("Style"); 
     bstyle.setAttribute("id", "barStyle"); 
     Element bistyle = doc.createElement("IconStyle"); 
     bistyle.setAttribute("id", "barIcon"); 
     Element bicon = doc.createElement("Icon"); 
     Element biconhref = doc.createElement("href"); 
     biconhref 
       .appendChild(doc 
         .createTextNode("http://maps.google.com/mapfiles/kml/pal2/icon27.png")); 
     bstyle.appendChild(bistyle); 
     bicon.appendChild(biconhref); 
     bistyle.appendChild(bicon); 
     dnode.appendChild(bstyle); 
     stmt = con.createStatement(); 
     rs = stmt.executeQuery("SELECT * FROM markers"); 
     while (rs.next()) { 
      KML.id = rs.getInt("id"); 
      KML.name = rs.getString("name"); 
      KML.address = rs.getString("address"); 
      KML.lat = rs.getFloat("lat"); 
      KML.lng = rs.getFloat("lng"); 
      KML.type = rs.getString("type"); 
      Element placemark = doc.createElement("Placemark"); 
      dnode.appendChild(placemark); 
      Element name = doc.createElement("name"); 
      name.appendChild(doc.createTextNode(KML.name)); 
      placemark.appendChild(name); 
      Element descrip = doc.createElement("description"); 
      descrip.appendChild(doc.createTextNode(KML.address)); 
      placemark.appendChild(descrip); 
      Element styleUrl = doc.createElement("styleUrl"); 
      styleUrl.appendChild(doc.createTextNode("#" + KML.type 
        + "Style")); 
      placemark.appendChild(styleUrl); 
      Element point = doc.createElement("Point"); 
      Element coordinates = doc.createElement("coordinates"); 
      coordinates.appendChild(doc.createTextNode(KML.lng + "," 
        + KML.lat)); 
      point.appendChild(coordinates); 
      placemark.appendChild(point); 
     } 
     Source src = new DOMSource(doc); 
     Result dest = new StreamResult(new File("c:/PlaceMarkers.kml")); 
     aTransformer.transform(src, dest); 
     System.out.println("Completed....."); 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
    } 
} 

} 
+1

在尋求幫助之前,您應該分析一下您的問題。您收到的錯誤與KML無關,並且不會由KML API糾正。 – SJuan76

+0

儘管消息的輸出應該告訴你正在發生什麼,但圍繞try/catch中的所有代碼幾乎沒有幫助。我建議或者讓try/catch更加針對目標,或者在catch塊中使用e.printStackTrace()來精確地告訴你代碼失敗的位置。然後從那裏工作... – Smalltown2k

回答

4

您可以使用Java API for KML
用於KML的Java API的目標是提供用於輕鬆訪問KML(Keyhole標記語言)數據的Java接口。

KML的Java API(JAK)的主要目標是提供由OGC的KML標準和Google的GX擴展定義的KML對象模型的自動生成的完整參考實現。它是一個面向對象的API,可以在現有的Java環境中方便和方便地使用KML。

+0

你的意思是我需要一些瓶子來做到這一點? ..我是這個kml的新手。 – lucifer

+0

您可以使用插件http://code.google.com/p/xjcpluginjavaapiforkml/ –

+0

欲瞭解更多詳情,請訪問http://labs.micromata.de/display/jak/Home –