2015-05-29 2 views
0

Я пишу вручную файл KML, пытающийся импортировать некоторые полигоны в MyMaps. Таким образом, работает отлично:JAK создал KML не работает с Google Мои карты

<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Document> 
     <Placemark> 
      <Style> 
       <PolyStyle> 
        <color>#a00000ff</color> 
        <outline>0</outline> 
       </PolyStyle> 
      </Style> 
      <Polygon> 
       <outerBoundaryIs> 
        <LinearRing> 
         <coordinates>9.184254,45.443636 9.183379,45.434288 9.224836,45.431499 9.184254,45.443636</coordinates> 
        </LinearRing> 
       </outerBoundaryIs> 
      </Polygon> 
     </Placemark> 
    </Document> 
</kml> 

Я пытаюсь написать программу Java с помощью JAK, которые генерируют самый possibile равный файл, но он не работает с картами

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<ns3:kml xmlns:atom="http://www.w3.org/2005/Atom" xmlns:ns3="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:xal="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0"> 
    <ns3:Document> 
     <ns3:Placemark> 
      <ns3:Style> 
       <ns3:PolyStyle> 
        <ns3:color>#EABCFF</ns3:color> 
        <ns3:outline>0</ns3:outline> 
       </ns3:PolyStyle> 
      </ns3:Style> 
      <ns3:Polygon> 
       <ns3:innerBoundaryIs> 
        <ns3:LinearRing> 
         <ns3:coordinates>9.184254,45.443636 9.183379,45.434288 9.224836,45.431499 9.184254,45.443636</ns3:coordinates> 
        </ns3:LinearRing> 
       </ns3:innerBoundaryIs> 
      </ns3:Polygon> 
     </ns3:Placemark> 
    </ns3:Document> 
</ns3:kml> 

Это программа :

public static void main(String[] args) throws IOException { 
    // Style 
    PolyStyle polystyle = KmlFactory.createPolyStyle(); 
    polystyle.setColor("#EABCFF"); 
    // polystyle.setFill(true); 
    polystyle.setOutline(false); 
    // 
    Kml kml = KmlFactory.createKml(); 
    Document document = kml.createAndSetDocument(); 
    Placemark pm = document.createAndAddPlacemark(); 
    LinearRing linearRing = pm.createAndSetPolygon().createAndAddInnerBoundaryIs().createAndSetLinearRing(); 
    linearRing.addToCoordinates(9.184254, 45.443636, 0); 
    linearRing.addToCoordinates(9.183379, 45.434288, 0); 
    linearRing.addToCoordinates(9.224836, 45.431499, 0); 
    linearRing.addToCoordinates(9.184254, 45.443636, 0); 
    pm.createAndAddStyle().setPolyStyle(polystyle); 
    // 
    kml.marshal(new FileWriter("D:/prova.kml")); 
} 
+1

Где делает 'NS3: «Из чего? – geocodezip

+0

Здравствуйте, @ stefano-r. Вы нашли решение проблемы? У меня такая же проблема, но у меня есть префикс ns2. Невозможно найти способ избавиться от него. – Surge

+0

Нет, мне пришлось вручную редактировать файлы. –

ответ

0

просмотреть <ns3: в вашем KML это сделать KML недопустим для Google Maps

Попытаться исправить файл

+0

Я не могу или я не знаю, как это сделать в структуре JAK! –

+0

Попробуйте это http://labs.micromata.de/projects/jak/quickstart.html, а затем переформатируйте свой код – scaisEdge

0

У меня была та же проблема.

Вместо использования kml.marshal(new FileWriter("D:/prova.kml")); я это сделал ...

 String name = kml.getClass().getSimpleName(); 
     if ("Kml".equals(name)) { 
      name = name.toLowerCase(); 
     } 

     JAXBContext jaxbContext = JAXBContext.newInstance(Kml.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     // output pretty printed 
     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     jaxbMarshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", new NameSpaceBeautyfier()); 
     JAXBElement<Kml> jaxbKml = new JAXBElement<>(new QName("http://www.opengis.net/kml/2.2", name), (Class<Kml>) kml.getClass(), kml); 
     jaxbMarshaller.marshal(jaxbKml, file); 

С NameSpaceBeautifier, как это ...

private static final class NameSpaceBeautyfier extends NamespacePrefixMapper { 

    private static final String KML_PREFIX = ""; // DEFAULT NAMESPACE 
    private static final String KML_URI= "http://www.opengis.net/kml/2.2"; 

    @Override 
    public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) { 
     if(KML_URI.equals(namespaceUri)) { 
      return KML_PREFIX; 
     } 
     return suggestion; 
    } 

    @Override 
    public String[] getPreDeclaredNamespaceUris() { 
     return new String[] { KML_URI }; 
    } 

    private NameSpaceBeautyfier() { 
    } 
} 

Надеется, что это помогает ..