2017-09-03 126 views
-2

出口KML数据我正在开发一个RESTful Web服务其中的一个特征是,该服务将获取的用户当前位置,并显示他附近的餐馆如何通过/从Java

直到现在,我从有关谷歌地图API的得到JSON数据完成这个任务,并分析相关数据,并将其传递到客户端/消费者。 但是现在不用文字/ JSON数据,我想通过KML附近餐馆的数据,这样消费者可以根据地图而不是简单的文字在表格中显示它。

我创造我的KML数据similiar方式follwing代码执行:

package de.micromata.jak.examples; 

import java.io.File; 
import java.io.FileNotFoundException; 

import de.micromata.opengis.kml.v_2_2_0.Document; 
import de.micromata.opengis.kml.v_2_2_0.Folder; 
import de.micromata.opengis.kml.v_2_2_0.Icon; 
import de.micromata.opengis.kml.v_2_2_0.Kml; 
import de.micromata.opengis.kml.v_2_2_0.Placemark; 
import de.micromata.opengis.kml.v_2_2_0.Style; 

/** 
* This example generates a KML file with a placemark and a chart for each continent. The chart is generated with the Google Chart API and 
* show the area (surface of the earth) of each continent. 
* 
* Google Chart API example: http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World 
*/ 
public class Example1 { 

    public static void main(String[] args) throws FileNotFoundException { 
     final Kml kml = new Kml(); 
     Document doc = kml.createAndSetDocument().withName("JAK Example1").withOpen(true); 

     // create a Folder 
     Folder folder = doc.createAndAddFolder(); 
     folder.withName("Continents with Earth's surface").withOpen(true); 

     // create Placemark elements 
     createPlacemarkWithChart(doc, folder, 93.24607775062842, 47.49808862281773, "Asia", 30); 
     createPlacemarkWithChart(doc, folder, 19.44601806124206, 10.13133611111111, "Africa", 20); 
     createPlacemarkWithChart(doc, folder, -103.5286299241638, 41.26035225962401, "North America", 17); 
     createPlacemarkWithChart(doc, folder, -59.96161780270248, -13.27347674076888, "South America", 12); 
     createPlacemarkWithChart(doc, folder, 14.45531426360271, 47.26208181151567, "Europe", 7); 
     createPlacemarkWithChart(doc, folder, 135.0555272486322, -26.23824399654937, "Australia", 6); 

     // print and save 
     kml.marshal(new File("advancedexample1.kml")); 
    } 


/** 
* The createPlacemarkWithChart()-method generates and set a placemark object, with the given statistical data . The Icon and Style 
* objects (color and size of the text and icon) are saved to the root element. The placemark is created and set to the given folder. 
* 
* @param document structure of the KML file 
* @param folder to add continent 
* @param longitude of the continent 
* @param latitude of the continent 
* @param continentName or name of the placemark 
* @param coveredLandmass in percent 
*/ 
private static void createPlacemarkWithChart(Document document, Folder folder, double longitude, double latitude, 
    String continentName, int coveredLandmass) { 

    int remainingLand = 100 - coveredLandmass; 
    Icon icon = new Icon() 
     .withHref("http://chart.apis.google.com/chart?chs=380x200&chd=t:" + coveredLandmass + "," + remainingLand + "&cht=p&chf=bg,s,ffffff00"); 
    Style style = document.createAndAddStyle(); 
    style.withId("style_" + continentName) // set the stylename to use this style from the placemark 
     .createAndSetIconStyle().withScale(5.0).withIcon(icon); // set size and icon 
    style.createAndSetLabelStyle().withColor("ff43b3ff").withScale(5.0); // set color and size of the continent name 

    Placemark placemark = folder.createAndAddPlacemark(); 
    // use the style for each continent 
    placemark.withName(continentName) 
     .withStyleUrl("#style_" + continentName) 
     // 3D chart imgae 
     .withDescription(
      "<![CDATA[<img src=\"http://chart.apis.google.com/chart?chs=430x200&chd=t:" + coveredLandmass + "," + remainingLand + "&cht=p3&chl=" + continentName + "|remaining&chtt=Earth's surface\" />") 
     // coordinates and distance (zoom level) of the viewer 
     .createAndSetLookAt().withLongitude(longitude).withLatitude(latitude).withAltitude(0).withRange(12000000); 

    placemark.createAndSetPoint().addToCoordinates(longitude, latitude); // set coordinates 
} 

} 

现在,我应该怎么通过这个生成的KML数据,以我的消费?

以前,对于JSON数据,我创建了ArrayList并将数据放入其中,最后将ArrayList的对象返回给使用者。但我不知道如何使用KML数据完成相同的任务。

任何帮助将不胜感激。

请提出任何其他更好的办法解决上述问题。

谢谢!

+0

什么是背后downvote原因在地图上? –

回答

0

如果您公开服务的KML,你可以加载它与KmlLayer

+0

在Map上加载KML数据是下一步,现在我只想将这个KML数据传递给我的Web服务使用者。 (注意:KML将根据用户的位置动态生成) –