将坐标集合datatable 存为googleearth可打开的kml文件

将坐标集合datatable 存为googleearth可打开的kml文件

SaveFileDialog saveFile = new SaveFileDialog();
            saveFile.Filter = "Google地图轨迹(*.kml)|所有文件(*.*)";
            saveFile.ShowDialog();
            if (saveFile.FileName.Trim() == "") return;                                    
            string filename = saveFile.FileName + ".kml";
            // Create the file and writer.
            FileStream fs = new FileStream(filename, FileMode.Create);
            XmlTextWriter w = new XmlTextWriter(fs, Encoding.UTF8);
            // Start the document.
            w.WriteStartDocument();
            w.WriteStartElement("kml", "http://earth.google.com/kml/2.1");
            w.WriteStartElement("Document");
            w.WriteStartElement("name");
            w.WriteString(filename);
            w.WriteEndElement();
            w.WriteStartElement("open");
            w.WriteString("1");
            w.WriteEndElement();
            //style
            w.WriteStartElement("Style");
            w.WriteAttributeString("id", "normalPlacemark");
            w.WriteStartElement("IconStyle");
            w.WriteStartElement("Icon");
            w.WriteStartElement("href");
            w.WriteString("F:/img/aws0.gif");
            w.WriteEndElement();//style
            w.WriteEndElement();//iconStyle
            w.WriteEndElement();//icon
            w.WriteEndElement();//href

            //stylemap
            w.WriteStartElement("StyleMap");
            w.WriteAttributeString("id", "exampleStyleMap");
            w.WriteStartElement("Pair");
            w.WriteStartElement("key");
            w.WriteString("normal");
            w.WriteEndElement();
            w.WriteStartElement("styleUrl");
            w.WriteString("#normalPlacemark");
            w.WriteEndElement();//styleUrl
            w.WriteEndElement();//pair
            w.WriteEndElement();//StyleMap


            w.WriteStartElement("Placemark");
            w.WriteStartElement("Name");
            w.WriteString(filename);
            w.WriteEndElement();
            //write styleurl
            w.WriteStartElement("styleUrl");
            w.WriteString("#exampleStyleMap");
            w.WriteEndElement();


            // Write Point element
            w.WriteStartElement("LineString");
            w.WriteStartElement("coordinates");
            string points = "";
            for (int i = 0; i < _dtHistoryPoints.Rows.Count; i++)
            {
                string lng = _dtHistoryPoints.Rows[i]["Longitude"].ToString();
                string lat = _dtHistoryPoints.Rows[i]["Latitude"].ToString();
                 points += lng + "," + lat + ",0 ";
            }
            w.WriteString(points);
            w.WriteEndElement();
            w.WriteEndElement();

            w.WriteEndElement(); // Placemark
            w.WriteEndElement();//document
            w.WriteEndElement(); // kml

            // Ends the document.
            w.WriteEndDocument();

            // close writer
            w.Close();

http://www.doyouhike.net/forum/comm_nav/325548,0,0,1.html 求助 如何使用 Google Earth 做一条线路图 放进GPS 以前看见有一个帖子,上面写着有一位仁兄在偷 Google Earth 的高程数据,做等高线地图,于是在 Baidu 这样搜索 “Google Earth site:www.doyouhike.net”,搜索磨房里面所有有关“Google Earth”的帖子,那个帖子没有找到,却发现了本帖子。由于自己有时候带队,还有就是喜欢琢磨 GPS,就自己生成 KML 格式的轨迹。在“Google Earth”里面找到自己要去的地方,通过别人的资料,看看看看大致的路线,然后取一些坐标点。取点的时候,把鼠标放在“Google Earth”上,然后按“Print Screen/SysRq”键来截屏,之后,粘贴在画图里面,之后,就录入这个点的经纬度,海拔一般情况下的价值不大,就省略了。之后,把这些点导入 WPS的电子表格,利用公式把“114,31,00.18”格式的经纬度转换为“114.516716”格式,就着就手工生成 KML文件了,最后,利用 gpsbabel-1.3.6 转换成我的 GPS 识别的格式。想省钱,就在 TAOBAO 买了一个二手杂牌的 GPS,Lowrance Hunt C,不支持中文,于是采用了英文菜单,地名只好采用拼音了。这样做起来实在累,一般生成一条比较短的轨迹,花两个小时是很正常的事情。前一阵子,在学习《WINDOWS 程序设计》,于是就想参照上面的例程写一个小程序,让它自动生成我需要的轨迹。 《WINDOWS 程序设计》的第八章的 WHATCLR 程序,它运行时候,就可以以点的方式改变其它程序的颜色,既然要改变这些点,就要知道它们相对于屏幕左上角的坐标。既然是这样,那利用相似三角形的原理,我在 “Google Earth”这样描点,知道起点和终点的坐标后,就很容易地生成一条所需要的 KML 格式的轨迹了。之后,把它导入“Google Earth”以检验这条轨迹,不合乎自己要求就重描一条,几分钟就搞定了。看来,“懒人推动社会进步”,这句话非常有道理。 其中一个问题就是,需要用按键或者鼠标来控制程序描点的开始和结束,于是参考了第六章的 KEYVIEW1 和 第七章的 BLOKOUT1,最后决定使用“a”(小写字母)座位控制键!本来想以鼠标右键来控制的,后来没有搞定,就放弃了。 最后碰到的一个令人头疼的问题就是保存文件,开始想参考第十一章的 POPPAD 程序,看来没有把这个程序吃透,就放弃了。准备使用《WINDOWS 核心编程》上面的文本框来输出生成的经纬度文件,当我安装号运行程序库并配置好,忽然发现它是 C++ 的程序,晕死了。期间还尝试过使用 C++ 的文件指针 FP,后来发现不支持!就放弃了,时间不允许我先去吃透 C++ 再来完成这个程序。后来,发现《WINDOWS 程序设计》的例程,包含的头文件是这种:#include <windows.h>,而 C++ 格式包含的头文件是:#include <iostream>,通常没有“.h”,感觉《WINDOWS 程序设计》应该还支持 Turbo C 2.0 格式下的文件读写,于是找到谭浩强同志的《C 语言程序设计》,看看它怎么弄的。之后,在 VC++ 6.0下测试了一把,通过,于是程序就基本完工了。 程序的使用,把附件的压缩包解压缩的你的硬盘的任意一个角落,在 C 盘的根目录下生成一个文本文件“START.txt”,不知道怎么生成就问你的电脑启蒙老师了。压缩包里面有一个 START.txt,可以直接修改了!然后运行 WHATCLR.exe,按一下小写字母“a”,C 盘的根目录下就生成了 startstop.kml,(可能需要刷新一下),将其导入“Google Earth”,就会发现2个点,“start”和“stop”,点 WHATCLR.exe 让它在最前面,之后把鼠标放在 “start” 处,“start” 会变大,再按一下小写字母“a”,按住鼠标左键沿着路径拖动就开始生成轨迹,当鼠标拖到 “stop”点的时候,“stop”变大,松开鼠标,同时按一下小写字母“a”完成轨迹的生成。注意,生成轨迹的时候,必须让 WHATCLR.exe 始终处在各个窗口的最前面,也就是它获得焦点!这时,在 C 盘的根目录就会发现2个 KML 文件:“GPSDATA.KML”和“GPSDATA2.KML”,把“GPSDATA.KML”导入到“Google Earth”,看是否合乎你的要求,不合要求就重来一遍,直到合乎你的要求为止。用 gpsbabel-1.3.6 把转换为你的 GPS 所支持的格式即可。 注意:由于是习作,KML 文件保存的位置默认为 C 盘,如果想存储在其它地方,可以自行修改程序。 压缩包里附有源代码。如果想知道程序为什么这么写,请问 Bill·Gates 或者是 Charles·Petzold。如果想知道 KML 文件怎么生成,请联系 Google 或者 zGPSconv.exe 的作者,我是参照 zGPSconv.exe 生成的 KML 文件来生成 KML 文件的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值