使用Groovy将XML转换为GeoJson

时间:2016-02-03 13:37:24

标签: mongodb groovy geojson

我一直在尝试使用这个伟大的example来读取XML文件,将它们转换为GeoJson并最终将它们导入MongoDB。

我的示例XML文件如下所示:

<AName att1="sequence" att2="xx" att3="xxx">
    <Loc1>0</Loc1>
    <Loc2>0</Loc2>
</AName> 

<AName att1="sequence" att2="xx" att3="xxx">
    <Loc1>3</Loc1>
    <Loc2>6</Loc2>
</AName> 

...

我的GEOJson结构应该看起来像这样(典型的Polygon with a Single Ring):

{
  type: "Polygon",
  name: "sequence",
  coordinates: [ [ [ 0 , 0 ] , [ 3 , 6 ] , [ 6 , 1 ] , [ 0 , 0  ] ] ]
}

我已经开始使用Groovy(之前我从未使用过),但我不确定实际的GeoJson创建是否与我的要求相似(我实际上并不认为它有效)。

    //Here I am using the XmlSlurper() to parse the xml file

    def file=  new XmlSlurper().parse(new File('MyFile.xml'));
    def a = file.AName[0].@att1;
    println("AName " + a);
    def loc1= file.depthFirst().find() {it.name() == 'Loc1'};
    def loc2= file.depthFirst().find()  {it.name() == 'Loc2'};

   //Here I am converting the Java representation of my XML file to a GeoJson format

file.node.each {child ->
    Map myMap= [type: 'Polygon',
        name : a,
        loc: [coordinates: 
               [Double.valueOf(loc1),  Double.valueOf(loc2)],
               ]]

  //Finally I am inserting the BasicDBObject and creating the 2dsphere index

  collection.insert(new BasicDBObject(myMap));
  collection.createIndex(new BasicDBObject('loc', '2dsphere'));

创建索引时,我的集合中没有记录。我的代码中有明显的错误吗?映射是否以递归方式在我的Polygon中添加坐标数组?有没有办法更好地解决它正在发生的事情? (我目前正在使用mongo-java-driver-3.2.1)

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:1)

所以,想出了这个:

$('#contact').slidetoggle(500);

做你想要的(我认为)