加载kml图层及自动标注

来源:互联网 发布:js实现div显示和隐藏 编辑:程序博客网 时间:2024/04/29 14:03
            private var kml_layer:KML;
            private var zirancun_label:VectorLayer;
            //添加kml文件作为图层(要求必须是利用图层管理器矢量图层下的导出工具生成,kml格式与geoserver导出的不一样)
            //1.用globalmapper工具导出矢量kml文件。
            //2.修改kml文件,参考openscale自带组件图层管理器导出的kml文件格式(!!不是geoserver导出的kml文件,当然可以修改之)。
            //...主要需要替换<kml xmlns:kml="http://www.opengis.net/kml/2.2">
            //...需要删除geomapper导出的kml中的folder目录。
            //3.标注显示乱码问题,用记事本打开kml文件,然后保存kml文件为utf-8格式即可。
            //4.复制kml文件到geoserver的webapps目录,重启geoserver
            protected function button1_clickHandler(event:MouseEvent):void
            {
                kml_layer = new KML("point_zirancun"
                    , "http://localhost:8080/geoserver/point_zirancun.kml");
                kml_layer.maxExtent=new Bounds(113.6528,35.8186,113.7064,35.8410);
                map1.map.addLayer(kml_layer);
                //添加标注图层
                zirancun_label=new VectorLayer("zirancun_label");
                _map.addLayer(zirancun_label);                
            }            
            //产生自动标注图层
            protected function button10_clickHandler(event:MouseEvent):void
            {
                //xml用法示例:
                //var oxml:XML=new XML("<order> <item id='1'> <menuName>burger</menuName><price>3.95</price></item> <item id='2'><menuName>fries</menuName><price>1.45</price> </item> </order>") ;//kml_layer.data;
                //Alert.show(oxml.item[0].@id);  //值== 1
                //Alert.show(oxml.item[0].menuName);  // 值== burger
                //oxml.item.(menuName=="burger").@id=111;  //查找根目录item标签中menuName=burger,并把它的id属性设置为111
                //Alert.show(oxml.item.(menuName=="burger").@id)  //值=111
                //Alert.show(oxml.item);  //选择器返回的是所有标签为item的字符串
                //Alert.show(oxml);  //选择器返回的的是xml内的整个字符串内容。
                //Alert.show(oxml.child("item")[0].@id + "," + oxml.child("item")[0].menuName);
                
                //根据geoserver导出的kml图层格式读取kml文件中的数据。!!!标签尖括号内的叫属性,标签段之间的叫节点。
                var oxml:XML=kml_layer.data;
                //Alert.show(oxml.toString().substr(0,400));
                //Alert.show(oxml.Document.Placemark[0].name);  //!! 路径,然后。。。
                //Alert.show(ft_coordinates);  
                //Alert(oxml.Document.Placemark.children().length().toString());
                //为kml图层添加标注图层
                for each (var placemark:XML in oxml.Document.Placemark)
                {
                    //Alert.show(placemark.name);    
                    var ft_name:String=placemark.name;//oxml.Document.Placemark[0].name;
                    var ft_coordinates:String=placemark.Point.coordinates;//oxml.Document.Placemark[0].Point.coordinates[0];//!! 路径,然后。。。
                    var s:Array=ft_coordinates.split(",");
                    //Alert.show("x=" + s[0] + ",y=" + s[1] + ",name=" + ft_name);
                    var pt:org.openscales.geometry.Point=new org.openscales.geometry.Point(s[0],s[1]);
                    var ft:LabelFeature=new LabelFeature(pt);
                    ft.text=ft_name;  ////标注显示乱码问题,用记事本打开kml文件,然后保存kml文件为utf-8格式即可。
                    zirancun_label.addFeature(ft);
                    zirancun_label.redraw(true);                    
                }

            }


参考kml文件格式:(openscale 的KML对象可以正常加载的格式)

<?xml version="1.0" encoding="iso-8859-1"?>
<kml xmlns:kml="http://www.opengis.net/kml/2.2">
<Document>
    <name>Point Features</name>
  <!-- Begin Style Definitions -->
  <Style id="point1">
    <IconStyle><Icon>kml_ext_files\kml_symbol_dot.png</Icon></IconStyle>
  </Style>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 圪道水 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.6627714406,35.8357811560,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 上茅草坪 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.6828721723,35.8328115865,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 船仓 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.6956112696,35.8312104008,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 五碣谷洞 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.7021266698,35.8287611062,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 寨碣 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.6879315954,35.8271057229,0</coordinates>
      </Point>
    </Placemark>

    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 四水圪节 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.8543131177,35.5287351634,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 东反烟 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>113.8251642195,35.5795422254,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 洪石沟 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>114.0555112391,35.4256741992,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>Unknown Point Feature</description>
      <name><![CDATA[ 许河 ]]></name>
      <styleUrl>#point1</styleUrl>
      <Point>
        <coordinates>114.0308726784,35.1994823471,0</coordinates>
      </Point>
    </Placemark>
</Document>
</kml>