当前位置: 首页 > news >正文

电脑做系统ppt下载网站好怎么屏蔽优酷网站的广告

电脑做系统ppt下载网站好,怎么屏蔽优酷网站的广告,电商的运营模式有几种,鞍山网站设计制作网站目录 前言 一、关于KMZ和KML 1、KMZ是什么 2、KML是什么 二、Java解析实例 1、POM.xml引用 2、KML 基类定义 3、空间对象的定义 4、Kml解析工具类 三、KML文件的解析 1、KML解析测试 2、KMZ解析测试 四、总结 前言 今天是六.一儿童节#xff0c;在这里祝各位大朋友… 目录 前言 一、关于KMZ和KML 1、KMZ是什么 2、KML是什么 二、Java解析实例 1、POM.xml引用 2、KML 基类定义 3、空间对象的定义 4、Kml解析工具类 三、KML文件的解析 1、KML解析测试 2、KMZ解析测试 四、总结 前言 今天是六.一儿童节在这里祝各位大朋友们儿童节快乐同时祝祖国的所有花朵们更加快乐。童年的欢乐可以治愈一切。不知道各位的儿童节是怎么度过的呀是在陪孩子呢还在在享受自己的欢乐时光只愿大家都欢乐就好。这是写在最前面祝福的话愿我们都开心快乐。 最近碰到有朋友咨询大致的问题是他在项目中要实现KMZ数据的解析和WebGIS的可视化。刚好他用的技术栈是Java同时KMZ的解析在各个网站上的相关解析代码不多。有很多代码是解析KML的但是解析KMZ的相对比较少。一时没有参考的例子希望能结合JAVA讲一下如何进行KMZ数据的解析。其实话说回来虽然大致了解KMZ是什么数据但是在之前的项目过程中接触的空间数据也基本都是shp、gdb等等至于google的KMZ还真的是第一回接触。 本文主要讲解如何用JAVA语言直接解析KMZ数据。文章首先介绍google地图中的KMZ和KML数据然后使用代码的方式实现数据的解析最后展示解析成果以及如何将数据转换成空间WKT数据。关于JAVA解析KML的博客和资料有不少但是KMZ文件的还是比较稀少的供各位朋友在工作中解析KMZ文件有一个参考。 一、关于KMZ和KML 在进行相关文件的解析之前首先我们来看一下KMZ和KML这两种文件先了解这两种文件是什么用来做什么的具体的文件内容是什么样的。本节主要提供这些基础知识的讲解。 1、KMZ是什么 KMZ 文件包含主 KML 文件以及0个或多个用 ZIP 格式打包成一个单元的支持文件称为归档。然后KMZ 文件就可以作为单个实体进行存储和通过电子邮件发送。NetworkLink 可从网络服务器提取 KMZ 文件。将 KMZ 文件解压缩后主 .kml 文件及其支持文件便分离成其各自的原始格式和目录结构以及原始文件名和扩展名。除了变成归档格式外ZIP 格式也会受到压缩因此归档只能包含一个大型 KML 文件。根据 KML 文件的内容此过程通常会产生10:1的压缩。10千字节的 KML 文件可以用1千字节的 KMZ 文件来提供。 KMZ是Google Earth默认的输出文件格式是一个经过ZIP格式压缩过的KML文件当我们从网站上下载KMZ文件的时候Windows会把KMZ文件认成ZIP文件所以另存的时候文件后缀会被改成.ZIP因此需要手动将文件后缀改成.KMZ。   KMZ文件用ZIP工具软件打开然后解压缩即可得到原始KML文件。当然KMZ文件也有自己的好处就是KMZ文件的自身可以包含影像这样就可以不依赖引用网络上的截图。   一般情况下双击KMZ/KML文件即可从Google Earth中打开地标文件但是需要注意的是KMZ/KML地标文件名不能包含中文字符文件存放的路径也不能有中文字符否则将无法在Google Earth中打开。 这里我们以漂亮国的全球基地为说明验证一下上述的内容。把KMZ文件的后缀名修改为zip然后用压缩文件打开。可以看到以下的文件 总结一下KMZ就是把KML文件进行了一个打包。这个很重要在后面的解析过程中会用到这个知识点。讲完了KMZ下面介绍一下KML。 2、KML是什么 KML 代表 钥匙孔标记语言。此 GIS 格式基于 XML主要用于 Google 地球。KML由Keyhole Inc开发后来被Google收购.KMZKML-Zipped取代KML成为默认的Google地球地理空间格式因为它是文件的压缩版本。KML/KMZ于2008年成为开放地理空间联盟的国际标准。经度和纬度分量十进制度由 1984 年世界大地测量系统 WGS84 定义。垂直分量高度以米为单位从 WGS84 EGM96 大地水准面垂直基准面开始测量。 KML (keyhole markup language)是以XML语言为基础开发的一种文件格式用来描述和存储地理信息数据点、线、面、图片等是纯粹的xml文本格式可用记事本打开编辑所以kml文件很小。KML跟XML文件最大的不同就是KML描述的是地理信息数据。最早开发KML的是keyhole公司2004年Goole收购keyhole并用KML开发GooleEarth。KML是原先的Keyhole客户端进行读写的文件格式是一种XML描述语言并且是文本格式这种格式的文件对于Google Earth程序设计来说有极大的好处程序员可以通过简单的几行代码读取出地标文件的内部信息并且还可以通过程序自动生成KML文件因此使用KML格式的地标文件非常利于Google Earth应用程序的开发。 这里我们还是以上面的kml文件为说明将打开的示例xml文件内容展示如下 ?xml version1.0 encodingUTF-8? kml xmlnshttp://www.opengis.net/kml/2.2 xmlns:gxhttp://www.google.com/kml/ext/2.2 Document!-- Begin Style Definitions --FoldernamePoint Features/namedescriptionPoint Features/descriptionPlacemarkdescriptionAirport/descriptionname![CDATA[CHARLESTON AFB/INTL 查尔斯顿空军基地/国际机场]]/namePointcoordinates-80.0408900000,32.8985600000,0/coordinates/Point/PlacemarkPlacemarkdescriptionAirport/descriptionname![CDATA[DAVIS-MONTHAN AFB 戴维斯-蒙森空军基地]]/namePointcoordinates-110.8822600000,32.1652200000,0/coordinates/Point/Placemark/Folder /Document /kml以上就是一个KML文件的示例其主体内容就是一个XML。它以XML为主体用来存储地理空间数据。因此对KML数据的解析其本质就是对XML文件的解析。 二、Java解析实例 本节主要以代码实战的方式介绍使用Java编程语言实现对KML语言和KMZ语言的解析。由于涉及到xml的解析这里不采用最原始的dom解析方式。对于KML语言有成熟的组件de.micromata.jak.JavaAPIforKml对KML的解析。这里对相关的解析组件进行介绍 序号组件名称作用1de.micromata.jak.JavaAPIforKmlKML文件解析2org.apache.commons.commons-compress压缩包解压3com.vividsolutions.jtsJTS wkt字符串构建 1、POM.xml引用 project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.yelang/groupIdartifactIdgdal_demo1/artifactIdversion0.0.1-SNAPSHOT/versionnamegdal_demo1/namedescription试验/descriptionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingmaven.compiler.source1.8/maven.compiler.sourcemaven.compiler.target1.8/maven.compiler.target/propertiesdependencies!-- https://mvnrepository.com/artifact/de.micromata.jak/JavaAPIforKml --dependencygroupIdde.micromata.jak/groupIdartifactIdJavaAPIforKml/artifactIdversion2.2.1/version/dependency!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-compress/artifactIdversion1.21/version/dependencydependencygroupIdcom.vividsolutions/groupIdartifactIdjts/artifactIdversion1.13/version/dependency/dependencies /project 2、KML 基类定义 这里进行kml 基类定义将name、description、ListCoordinate进行统一封装。针对Point、Polygon、Polyline对象在自己的对象属性中扩展额外的属性。这里采用OOP的实现方式。网上很多的代码没有将父级类抽象出来同时其代码只解析了name。没有解析description属性。这里我们将描述信息同样解析出来。关键代码如下 package com.yelang.kmzcase; import java.util.List; import de.micromata.opengis.kml.v_2_2_0.Coordinate; /*** kml 基类将name、description、ListCoordinate进行统一封装* author 夜郎king*/ public class KmlBaseEntity {private ListCoordinate points;private String name;private String description;public ListCoordinate getPoints() {return points;}public void setPoints(ListCoordinate points) {this.points points;}public String getName() {return name;}public void setName(String name) {this.name name;}public String getDescription() {return description;}public void setDescription(String description) {this.description description;}public KmlBaseEntity(ListCoordinate points, String name, String description) {super();this.points points;this.name name;this.description description;}public KmlBaseEntity() {super();} } 3、空间对象的定义 空间对象常见的类型包括点Point、线Polyline、面Polygon三种类型。这里我们将根据需要定义不同的空间对象。下面分别给出实例代码 KmlPoint.java package com.yelang.kmzcase; import java.util.List; import de.micromata.opengis.kml.v_2_2_0.Coordinate; public class KmlPoint extends KmlBaseEntity{private String color;public String getColor() {return color;}public void setColor(String color) {this.color color;}public KmlPoint(ListCoordinate points,String name,String description,String color){super(points, name, description);this.color color;}public KmlPoint() {super();} } KmlLine.java  package com.yelang.kmzcase; public class KmlLine extends KmlBaseEntity {private String color;private long width;public String getColor() {return color;}public void setColor(String color) {this.color color;}public long getWidth() {return width;}public void setWidth(long width) {this.width width;} } KmlPolygon.java package com.yelang.kmzcase; /*** program: 面状实体**/ public class KmlPolygon extends KmlBaseEntity {private String color;public String getColor() {return color;}public void setColor(String color) {this.color color;} } 4、Kml解析工具类 这里定义Kml的解析工具类主要负责解析KML然后根据不同的图层将属性和空间坐标点信息赋值给不同的空间数据集合。网上有一些解析的代码仅解析name属性。这里扩展了其它的属性包括描述属性。详细代码如下 package com.yelang.kmzcase;import de.micromata.opengis.kml.v_2_2_0.*; import java.io.File; import java.io.InputStream; import java.util.ArrayList; import java.util.List; /*** description: KML文件解析**/ public class ParsingKmlUtil {/*** 解析kml文件*/public KmlData parseKmlByFile(File file) {Kml kml Kml.unmarshal(file);return getByKml(kml);}/*** 解析kml文件流* * param inputstream* return*/public KmlData parseKmlByInputstream(InputStream inputstream) {Kml kml Kml.unmarshal(inputstream);return getByKml(kml);}/*** Kml对象转自定义存储对象* * param kml* return*/public KmlData getByKml(Kml kml) {KmlData kmlData new KmlData();kmlData.setKmlPoints(new ArrayList());kmlData.setKmlLines(new ArrayList());kmlData.setKmlPolygons(new ArrayList());Feature feature kml.getFeature();parseFeature(feature, kmlData);return kmlData;}/*** 解析kml节点* param feature* param kmlData*/private void parseFeature(Feature feature, KmlData kmlData) {if (feature ! null) {if (feature instanceof Document) {ListFeature featureList ((Document) feature).getFeature();featureList.forEach(documentFeature - {if (documentFeature instanceof Placemark) {getPlaceMark((Placemark) documentFeature, kmlData);} else {parseFeature(documentFeature, kmlData);}});} else if (feature instanceof Folder) {ListFeature featureList ((Folder) feature).getFeature();featureList.forEach(documentFeature - {if (documentFeature instanceof Placemark) {getPlaceMark((Placemark) documentFeature, kmlData);} else {parseFeature(documentFeature, kmlData);}});}}}private void getPlaceMark(Placemark placemark, KmlData kmlData) {Geometry geometry placemark.getGeometry();/*String name placemark.getName();placemark.getDescription();System.out.println(placemark.getDescription());if (name null) {name placemark.getDescription();}parseGeometry(name, geometry, kmlData);*/parseGeometry(placemark,geometry,kmlData);}/*** 解析点线面形状的数据分别放入存储对象* param placemark placemark对象* param geometry 形状类型* param kmlData 存储对象*/private void parseGeometry(Placemark placemark, Geometry geometry, KmlData kmlData) {if (geometry ! null) {if (geometry instanceof Polygon) {Polygon polygon (Polygon) geometry;Boundary outerBoundaryIs polygon.getOuterBoundaryIs();if (outerBoundaryIs ! null) {LinearRing linearRing outerBoundaryIs.getLinearRing();if (linearRing ! null) {ListCoordinate coordinates linearRing.getCoordinates();if (coordinates ! null) {outerBoundaryIs ((Polygon) geometry).getOuterBoundaryIs();addPolygonToList(kmlData.getKmlPolygons(), placemark, outerBoundaryIs);}}}} else if (geometry instanceof LineString) {LineString lineString (LineString) geometry;ListCoordinate coordinates lineString.getCoordinates();if (coordinates ! null) {coordinates ((LineString) geometry).getCoordinates();addLineStringToList(kmlData.getKmlLines(), coordinates, placemark);}} else if (geometry instanceof Point) {Point point (Point) geometry;ListCoordinate coordinates point.getCoordinates();if (coordinates ! null) {coordinates ((Point) geometry).getCoordinates();addPointToList(kmlData.getKmlPoints(), coordinates, placemark);}} else if (geometry instanceof MultiGeometry) {ListGeometry geometries ((MultiGeometry) geometry).getGeometry();for (Geometry geometryToMult : geometries) {Boundary outerBoundaryIs;ListCoordinate coordinates;if (geometryToMult instanceof Point) {coordinates ((Point) geometryToMult).getCoordinates();addPointToList(kmlData.getKmlPoints(), coordinates, placemark);} else if (geometryToMult instanceof LineString) {coordinates ((LineString) geometryToMult).getCoordinates();addLineStringToList(kmlData.getKmlLines(), coordinates, placemark);} else if (geometryToMult instanceof Polygon) {outerBoundaryIs ((Polygon) geometryToMult).getOuterBoundaryIs();addPolygonToList(kmlData.getKmlPolygons(), placemark, outerBoundaryIs);}}}}}/*** 保存面状数据* * param kmlPolygonList 已有面状数据* param placemark placemark对象* param outerBoundaryIs 面状信息*/private void addPolygonToList(ListKmlPolygon kmlPolygonList, Placemark placemark, Boundary outerBoundaryIs) {LinearRing linearRing outerBoundaryIs.getLinearRing();// 面KmlPolygon kmlPolygon new KmlPolygon();kmlPolygon.setPoints(linearRing.getCoordinates());kmlPolygon.setName(placemark.getName());kmlPolygon.setDescription(placemark.getDescription());kmlPolygonList.add(kmlPolygon);}/*** 保存线状数据* * param kmlLineList 已有线状数据* param coordinates 线状经纬度数据* param name 线状名称*/private void addLineStringToList(ListKmlLine kmlLineList, ListCoordinate coordinates, Placemark placemark) {KmlLine kmlLine new KmlLine();kmlLine.setPoints(coordinates);kmlLine.setName(placemark.getName());kmlLine.setDescription(placemark.getDescription());kmlLineList.add(kmlLine);}/*** 保存点状数据* * param kmlPointList 已有点状数据* param coordinates 点状经纬度数据* param name 点状名称*/private void addPointToList(ListKmlPoint kmlPointList, ListCoordinate coordinates, Placemark placemark) {KmlPoint kmlPoint new KmlPoint();kmlPoint.setName(placemark.getName());kmlPoint.setDescription(placemark.getDescription());kmlPoint.setPoints(coordinates);kmlPointList.add(kmlPoint);}} 在定义了上述的代码之后基本就可以实现了纯Java对KML文件的解析。下一节将调用上面的代码进行相应文件的解析。 三、KML文件的解析 本节将重点介绍如何解析KML文件。 1、KML解析测试 package com.yelang.kmzcase; import org.apache.commons.compress.archivers.ArchiveEntry; import org.apache.commons.compress.archivers.ArchiveInputStream; import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.io.WKTWriter; import de.micromata.opengis.kml.v_2_2_0.Coordinate; import de.micromata.opengis.kml.v_2_2_0.Kml; import java.io.*; import com.vividsolutions.jts.geom.*; public class KMZParser {public static void parseKml() throws IOException {ParsingKmlUtil parsingKmlUtil new ParsingKmlUtil();File file new File(C:/BaiduDownload/美军基地-地图数据kmz/美空军基地 - 副本/US-AFB.KML); // 文件地址自己修改KmlData kmlData parsingKmlUtil.parseKmlByFile(file);// assert kmlData ! null;if (kmlData.getKmlPoints().size() 0) {for (KmlPoint k : kmlData.getKmlPoints()) {GeometryFactory geoFactory new GeometryFactory();Coordinate coord k.getPoints().get(0);com.vividsolutions.jts.geom.Coordinate jtCoord new com.vividsolutions.jts.geom.Coordinate(coord.getLongitude(), coord.getLatitude(), coord.getAltitude());// 使用GeometryFactory创建一个点Geometry point geoFactory.createPoint(jtCoord);WKTWriter writer new WKTWriter();String wkt writer.write(point);System.out.println(k.getPoints() \t wkt \t k.getDescription() \t k.getName());}}}// 使用示例public static void main(String[] args) throws IOException {KMZParser.parseKml();} }由于在XML中的坐标是一个数组如果想把这些数据保存到空间数据库中需要进行格式转换比如从WKT字符串转为Geometry。当然保存到空间数据库中有很多种方法这里我们介绍一种基于JTS的方式构建WKT字符串因为在MyBatis-Plus中可以直接操作WKT字符串。将坐标转换WKT字符串的方法如下 com.vividsolutions.jts.geom.Coordinate jtCoord new com.vividsolutions.jts.geom.Coordinate(coord.getLongitude(), coord.getLatitude(), coord.getAltitude()); // 使用GeometryFactory创建一个点 Geometry point geoFactory.createPoint(jtCoord); WKTWriter writer new WKTWriter(); String wkt writer.write(point); 在控制台中执行以上方法可以看到以下信息的输出说明KML文件解析成功。 [-80.04089,32.89856] POINT (-80.04089 32.89856) Airport CHARLESTON AFB/INTL 查尔斯顿空军基地/国际机场 [-110.88226,32.16522] POINT (-110.88226 32.16522) Airport DAVIS-MONTHAN AFB 戴维斯-蒙森空军基地 [-110.34393,31.58844] POINT (-110.34393 31.58844) Airport LIBBY AAF/SIERRA VISTA MUN 利比空军基地/谢拉维斯塔 [-98.49243,33.98621] POINT (-98.49243 33.98621) Airport SHEPPARD AFB/WICHITA FALLS MUN 谢泼德空军基地/威奇托福尔斯?? [-72.52899,42.19849] POINT (-72.52899 42.19849) Airport WESTOVER ARB/METROPOLITAN 韦斯特欧弗空军基地 [-84.04541,39.82544] POINT (-84.04541 39.82544) Airport WRIGHT-PATTERSON AFB 赖特-帕特森空军基地 [-84.07013,39.80072] POINT (-84.07013 39.80072) Airport WRIGHT-PATTERSON AFB 赖特-帕特森空军基地 2、KMZ解析测试 网上很多博客都只讲了如何解析KML但是对于KMZ的解析介绍比较少以JAVA为开发语言解析更少了。上面的方法也只实现了KML的解析如果把文件换成KMZ肯定会报错的。不信来试试。错误信息如下 如果发生了以上的异常不要急。发生这个异常的原因其实在文章的开头就讲过了。如果看到这里前面没有印象的可以翻到前面去看一下。还是简单说明一下吧主要是KMZ是KML的压缩包而以上代码是KML的解析没有对KMZ进行解压。这里有两种方法来实现第一种是将KMZ文件进行解压然后对解压后的文件解析肯定没问题。第二种是在压缩包中读取然后对压缩流信息进行解析。第一种方式会增加不必要的脏文件第二种则不会因为原始文件只有一个。 下面我们采用第二种实现方式首先来定义一个处理接口必须要 package com.yelang.kmzcase; import java.io.IOException; import java.io.InputStream; /*** kml转换类用于实现kml的自定义识别与读取* author 夜郎king*/ public interface IKMLParser {/*** param kmlInputStream* throws IOException*/void parseKML(InputStream kmlInputStream) throws IOException; }然后再定义针对KMZ的内容解析代码基于在线解压的方式然后已输入流的方式完成内容解析这个代码网上比较少如果需要KMZ文件解析可以作为参考 public static void parseKMZFile(File kmzFile, IKMLParser kmlParser) throws IOException {try (InputStream fileInputStream new FileInputStream(kmzFile);ArchiveInputStream archiveInputStream new ZipArchiveInputStream(fileInputStream)) {ArchiveEntry entry;while ((entry archiveInputStream.getNextEntry()) ! null) {String name entry.getName();if (name.toLowerCase().endsWith(.kml) || name.toLowerCase().endsWith(.kmz)) {// 如果发现.kml或.kmz文件可以将其内容读取出来并传递给KMLParser处理kmlParser.parseKML(archiveInputStream);}}}}public static void parseKmz() throws IOException {File kmzFile new File(C:/BaiduDownload/美军基地-地图数据kmz/美国全球基地.kmz);KMZParser.parseKMZFile(kmzFile, new IKMLParser() {Overridepublic void parseKML(InputStream kmlInputStream) throws IOException {// 在这里实现你的KML解析逻辑// 例如可以将读取的KML内容转换为字符串try (BufferedReader reader new BufferedReader(new InputStreamReader(kmlInputStream))) {String line;StringBuffer xmlContent new StringBuffer(1024);while ((line reader.readLine()) ! null) {// 处理每一行KML数据xmlContent.append(line);}// System.out.println(xmlContent);Kml kml Kml.unmarshal(xmlContent.toString());ParsingKmlUtil pku new ParsingKmlUtil();KmlData kmlData pku.getByKml(kml);if (null ! kmlData.getKmlPoints()kmlData.getKmlPoints().size() 0) {for (KmlPoint kp : kmlData.getKmlPoints()) {GeometryFactory geoFactory new GeometryFactory();Coordinate coord kp.getPoints().get(0);com.vividsolutions.jts.geom.Coordinate jtCoord new com.vividsolutions.jts.geom.Coordinate(coord.getLongitude(), coord.getLatitude(), coord.getAltitude());// 使用GeometryFactory创建一个点Geometry point geoFactory.createPoint(jtCoord);WKTWriter writer new WKTWriter();String wkt writer.write(point);System.out.println(kp.getPoints() \t wkt \t kp.getDescription() \t kp.getName());}System.out.println(美军全球基地的数据是 kmlData.getKmlPoints().size());}} catch (IOException e) {e.printStackTrace();}}});} 上述代码的主要逻辑是使用compress对KMZ文件进行在线解压然后动态拼接KML内容最后解析KML文件然后提取空间信息。经过上述步骤完成信息的解析。在运行以上的代码发现KMZ文件已经成功解析。 至此已经完成KMZ和KML文件的解析。  四、总结 以上就是本文的主要内容本文主要讲解如何用JAVA语言直接解析KMZ数据。文章首先介绍google地图中的KMZ和KML数据然后使用代码的方式实现数据的解析最后展示解析成果以及如何将数据转换成空间WKT数据。关于JAVA解析KML的博客和资料有不少但是KMZ文件的还是比较稀少的算是作为网文的一种补充供各位朋友在工作中解析KMZ文件有一个参考。行文仓促定有不足之处欢迎各位朋友在评论区批评指正不胜感激。 博文在编写过程中参考了以下博文 1、什么是 KMZ 文件。 2、从事地信测绘必须知道的GIS常见数据格式类型以及数据格式和扩展名汇总。 3、地理信息地图标记KML与KMZ的区别。 4、java 生成kml 文件。 5、Java解析kml文件获取点/线段/多边形面状地图经纬度信息。
http://www.dnsts.com.cn/news/35555.html

相关文章:

  • 网上商城建设 网站定制开发知道域名怎么进入网站
  • 建设优惠券网站做外贸接私单的网站
  • 企业网站建设设计需要什么怎么做网站免费的
  • 西乡城建局网站手把手教你制作网页
  • 服务网站开发一个微信小程序价格
  • 杭州网站建设网页制作佛山微信网站建设
  • 厦门网站推广中企动力销售一个月能挣多少
  • 潍坊网站开发招聘信息民权网站建设
  • 什么网站可以做设计兼职百度 门户网站
  • 邵阳网站推广人与马做的网站
  • 网站开发需要多少费用供水开发建设公司网站
  • h5游戏平台搭建系统优化的影响因素
  • 中山网站建设方案免费网络电话app
  • 免费又实用的网站wordpress本地主机
  • 如何修改单页网站房产资讯最新消息
  • 皮肤自做头像的网站做网站推广有用吗
  • 外贸网站镜像3 建设营销型网站流程图
  • 北京优化网站外包公司企业网站的形式
  • 如何查询网站域名备案信息做网站论坛 前置许可
  • 网站seo优化主要有哪些手段代加工手工活外发免费 来料加工
  • 网站开发绑定qq门户网站模板html5
  • 衡阳市住房和城乡建设局网站建设银行粤通卡网站
  • 服装网站模板网站建设工作整改报告
  • 网站静态和动态深圳网站建设怎么样
  • 简单的网站建立怎么做wordpress友情链接函数
  • iis6网站域名网站网页设计培训班
  • 北京市建设工程审核在哪个网站杭州外贸网站建设公司申跃
  • 丰台青岛网站建设wordpress底部版权代码
  • 空白网站怎么做高校网站群建设
  • 如何建立网站的步骤关注公众号平台