Java生成KML文件,用OpenLayers技术显示在地图上.
来源:互联网 发布:php exec 没有执行 编辑:程序博客网 时间:2024/04/29 03:15
Java类:
/**
* @description 生成XML文件
* @author NJX
* @time 09/08/06
*/
public class DomXmlDemo {
private static String fileName;
private Document document;
// 构造方法传递文件的完整路径
public DomXmlDemo(String name) {
fileName = name;
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder builder = factory.newDocumentBuilder();
this.document = builder.newDocument();
} catch (ParserConfigurationException e) {
System.out.println(e.getMessage() + "构造方法执行正确.");
e.printStackTrace();
}
}
/**
* 创建XML文件
*/
public void createXml() {
// 创建XML文件中的第一个节点<KML>
Element xml = this.document.createElement("XML");
this.document.appendChild(xml);
// 创建根节点<POINTS>
Element points = this.document.createElement("POINTS");
// 构造的第一个<POINT>节点
Element point = this.document.createElement("POINT");
// 构造<POINT>下的第一个NAME子节点
Element name = this.document.createElement("NAME");
name.appendChild(this.document.createTextNode("First Point"));
point.appendChild(name);
// 构造<POINT>下的二个<COLOR>子节点
Element color = this.document.createElement("COLOR");
color.appendChild(this.document.createTextNode("#000066"));
point.appendChild(color);
// 构造<POINT>下的第三个<LONGITUDE>子节点
Element longitude = this.document.createElement("LONGITUDE");
longitude.appendChild(this.document.createTextNode("-75.0822680013139"));
point.appendChild(longitude);
// 构造<POINT>下的第四个<LAIITUDE>子节点
Element latitude = this.document.createElement("LATITUDE");
latitude.appendChild(this.document.createTextNode("56.09825589333556"));
point.appendChild(latitude);
// 将所有的<POINT>子节点都添加给<POINTS>节点
points.appendChild(point);
// 将POINTS节点添加给XML节点
xml.appendChild(points);
}
/**
* 保存XML文件
*/
public void saveXml() {
TransformerFactory tf = TransformerFactory.newInstance();
try {
Transformer transformer = tf.newTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
DOMSource source = new DOMSource(document);
// 将文件输出
FileOutputStream fs = new FileOutputStream(fileName);
// 读取文件
PrintWriter pw = new PrintWriter(fs);
// 存储文件
StreamResult result = new StreamResult(pw);
// 接收文件
transformer.transform(source, result);
} catch (TransformerConfigurationException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (TransformerException e) {
System.out.println(e.getMessage());
e.printStackTrace();
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
public static void main(String[] args) {
DomXmlDemo dxd = new DomXmlDemo("F:/XmlLAndOpenLayers1/examples/xml/AAxml.xml");
dxd.createXml();
dxd.saveXml();
System.out.println("XML文件已生成请查看 " + fileName + " 目录下的XML文件");
}
}
--------------------------------------------------------------------
生成的ML文件:
<?xml version="1.0" encoding="UTF-8"?>
<XML>
<POINTS>
<POINT>
<NAME>First Point</NAME>
<COLOR>#000066</COLOR>
<LONGITUDE>-75.0822680013139</LONGITUDE>
<LATITUDE>56.09825589333556</LATITUDE>
</POINT>
</POINTS>
</XML>
---------------------------------------------------------------------
JavaScript代码:
<html>
<head>
<title>OpenLayers Example</title>
<link rel="stylesheet" href="../theme/default/style.css" type="text/css" />
<script src="../lib/OpenLayers.js"></script>
<style type="text/css">
#map {width:950px;height:483px;border:1px solid black;} /*dashed 虚线 solid 实线*/
</style>
<script type="text/javascript">
function test(lg,lt,sname,scolor)
{
var pointE=new OpenLayers.Geometry.Point(lg,lt);
var pointFeatureE=new OpenLayers.Feature.Vector(pointE);
pointFeatureE.attributes={name:sname,favColor:scolor,align:"rt"};
return pointFeatureE;
}
//解析XML文件
var pointElementSize;
var outName=Array(),outColor=Array(),outlg=Array(),outlt=Array();
function parseXML()
{
try{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}catch(e){
try{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e){
alert(e.message);
return;
}
}
xmlDoc.async=false;
//获取xml文件
xmlDoc.load("F:/XmlLAndOpenLayers1/examples/xml/BBxml.xml");
//获取所有POINT节点的个数
pointElementSize=xmlDoc.getElementsByTagName("POINT").length;
//循环显示所有POINT下节点下的子节点的值
for(var i=0;i<pointElementSize;i++){
outName[i]=xmlDoc.getElementsByTagName("NAME")[i].childNodes[0].nodeValue;
outColor[i]=xmlDoc.getElementsByTagName("COLOR")[i].childNodes[0].nodeValue;
outlg[i]=xmlDoc.getElementsByTagName("LONGITUDE")[i].childNodes[0].nodeValue;
outlt[i]=xmlDoc.getElementsByTagName("LATITUDE")[i].childNodes[0].nodeValue;
}
}
//获取地图层
function inits(){
parseXML();
var map;
map=new OpenLayers.Map('map');
var layer=new OpenLayers.Layer.WMS("OpenLayers WMS","http://labs.metacarta.com/wms/vmap0",{layers:'basic'});
map.addLayer(layer);
var renderer=OpenLayers.Util.getParameters(window.location.href).renderer;
renderer=(renderer)?[renderer]:OpenLayers.Layer.Vector.prototype.renderers;
//定义要显示图层的各种样式
var vectorLayer=new OpenLayers.Layer.Vector("Simple Geometry",{styleMap:new OpenLayers.StyleMap({'default':{
strokeOpacity:1,
fillColor:"Black",//点的颜色
strokeColor:"yellow",//点的边框颜色
strokeWidth:1,//点边框的宽度
fillOpacity:1,//透明度
pointRadius:4,//点的大小
pointEvents:"visiblePainted",//点击点的事件
label:"${name}",//欲显示的值
fontColor:"${favColor}",//字体颜色
fontSize:"12px",//字体大小
fontFamily:"Courier New,monospace",
fontWeight:"bold",
labelAlign:"${align}"//字体显示的在点附近的那个位置
}}),
renderers:renderer
});
var point=new OpenLayers.Geometry.Point(-80.04,45.68);//确定地图显示是中心位置所在的点的经纬度
//将vectorLayer添加到map层上
map.addLayer(vectorLayer);
//确定地图加载显示的位置
map.setCenter(new OpenLayers.LonLat(point.x,point.y),3);
//循环将所有的点都添加显示在图层上
for(var i=0;i<pointElementSize;i++){
vectorLayer.addFeatures([test(outlg[i],outlt[i],outName[i],outColor[i])]);
}
}
</script>
</head>
<body onload="inits()">
<p>
<div>
<strong>
<font style="font-size:18px;">解析XML并用OpenLayers将获取的数据显示在地图上</font>
</strong>
</div>
<div id="map"></div>
</body>
</html>
- Java生成KML文件,用OpenLayers技术显示在地图上.
- Android高德地图开发--读取解析KML文件并显示在地图上
- Java生成kml文件
- iOS 通过加载KML资源文件在地图上绘制
- phonegap与openlayers混搭在android上显示地图
- iOS 对kml文件内数据进行解析并在地图上绘制(二)
- 用C#生成KML路径文件(上篇)
- c#生成KML文件
- 在Google Earth和google map上用KML文件进行批量标记
- OpenLayers 学习(五) 根据经纬度用Marker在地图上添加标记
- openlayers如何在地图上添加右键菜单
- 用ARCGIS能不能把坐标数据生成KML文件
- 用C#生成KML路径文件(下篇)
- Openlayers之地图全屏显示
- “使用 XSLT、KML 和 Google Maps API 在地图上覆盖数据”系列
- 如何在地图上标注,并且导入导出kmz、kml、shp等格式
- 用静态KML脚本在GoogleEarth上实现动态效果
- Java(Android)解析KML文件
- GridView绑定试题及答案
- _CrtDumpMemoryLeaks()的作用(转) 收藏
- asp.net控制excel
- Flex上下文菜单的实现
- GridView在打开时从数据库中选出radiobuttonlist的值
- Java生成KML文件,用OpenLayers技术显示在地图上.
- 传智播客Hibernate视频教程学习笔记42
- weblogic 8.16 冲突
- 合同到期,换个环境,换个心情
- URLRewrite 实现URL地址伪静态化
- 学习历程-25岁零基础学习编程
- java开发健壮性
- 最近懒了
- 拔智齿记