微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

显示来自GML3文件的功能具有特定的投影

如何解决显示来自GML3文件的功能具有特定的投影

如何使用特定格式显示GML文件中的几何图形?问题是显示任何内容没有错误消息。

在Angular项目中,我首先设置了特定的投影。

proj4.defs("epsg:28992","+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000  +ellps=bessel  +towgs84=565.040,49.910,465.840,-0.40939,0.35971,-1.86849,4.0772 +units=m +no_defs");
register(proj4)
this.dutchProjection = GetProjection('epsg:28992');

这是我读取GML文件的方式(无错误):

this.gmlFeatures = new GML3().readFeatures(this.fileText,{
        featureProjection: 'epsg:28992',dataProjection: 'epsg:28992' });

解决方法

最后我找到了解决方法。

该解决方案的特殊之处在于:它包含特定的投影并使用GML3!

步骤1-从文件中加载功能。

步骤1.A:首先定义特定的投影

定义具体的投影:

defineProjection() {
    proj4.defs("EPSG:28992","+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000  +ellps=bessel  +towgs84=565.040,49.910,465.840,-0.40939,0.35971,-1.86849,4.0772 +units=m +no_defs");
    register(proj4)
    this.dutchProjection = GetProjection('EPSG:28992');
  }

步骤1.B:加载功能。

在这种情况下,我从文件中读取内容,但是它可能是从URL中读取的。首先定义投影很重要,否则会出现Axis错误消息等。

this.defineProjection();
this.httpClient.get('assets/wfs113-epsg-28992.xml',{responseType: 'text'})
  .subscribe(
    data => {
      console.log(data);
      this.fileText = data;
      var wfsFormat = new WFS({
        gmlFormat: new GML3()
      });
      this.gmlFeatures = wfsFormat.readFeatures(this.fileText,{
        featureProjection: 'EPSG:28992',dataProjection: 'EPSG:28992'
      });
      this.addGmlFeatures();
    },error => {
      console.log(error);
    }
  );

第2步-显示阅读功能集

我使用了荷兰的特定地图/投影。您可以轻松地将其与OSM变体交换。

ngAfterViewInit() {
    let polygonStyle = new Style({
      fill: new Fill({
        color: "rgba(255,0.8)"
      }),stroke: new Stroke({
        color: "#ffcc33",width: 10
      })
    });
    this.vectorSource = new VectorSource({
      format: new WFS(),features: []
    });
    this.vectorLayer = new Vector({
      source: this.vectorSource,style: [polygonStyle]
    });

    this.map = new Map({
      layers: [
        new Tile({
          source: new XYZ({
            url: 'https://geodata.nationaalgeoregister.nl/tiles/service/wmts/brtachtergrondkaart/EPSG:3857/{z}/{x}/{y}.png',})
        }),this.vectorLayer
      ],view: new View({
        projection: this.dutchProjection,center: [173063,441818],zoom: 9
      }),target: "map"
    });
    this.addGmlFeatures();
  }

功能的添加:

addGmlFeatures() {
    if (this.gmlFeatures.length > 0) {
      this.vectorLayer.getSource().addFeatures(this.gmlFeatures);
      //this.map.getView().fit( this.vectorSource.getExtent());
      console.log( this.map.getView().getProjection());
    }
  }

示例文件:

<?xml version='1.0' encoding="ISO-8859-1" ?>
<wfs:FeatureCollection
  xmlns:ms="http://mapserver.gis.umn.edu/mapserver"
  xmlns:gml="http://www.opengis.net/gml"
  xmlns:wfs="http://www.opengis.net/wfs"
  xmlns:ogc="http://www.opengis.net/ogc"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver http://atl-p0-app001.culture.fr:5522/cgi-bin/mapserv?SERVICE=WFS&amp;VERSION=1.1.0&amp;REQUEST=DescribeFeatureType&amp;TYPENAME=MD_2775&amp;OUTPUTFORMAT=text/xml;%20subtype=gml/3.1.1  http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd">
  <gml:boundedBy>
    <gml:Envelope srsName="EPSG:28992">
      <gml:lowerCorner>173063 441818</gml:lowerCorner>
      <gml:upperCorner>173563 444318</gml:upperCorner>
    </gml:Envelope>
  </gml:boundedBy>
  <gml:featureMember>
    <ms:MD_2775>
      <gml:boundedBy>
        <gml:Envelope srsName="EPSG:28992">
          <gml:lowerCorner>173063 441818</gml:lowerCorner>
          <gml:upperCorner>173563 444318</gml:upperCorner>
        </gml:Envelope>
      </gml:boundedBy>
      <ms:msGeometry>
        <gml:Polygon srsName="EPSG:28992">
          <gml:exterior>
            <gml:LinearRing>
              <gml:posList srsDimension="2">173063 441818 173463 441818 173463 444818 173063 444818 173063 441818 </gml:posList>
            </gml:LinearRing>
          </gml:exterior>
        </gml:Polygon>
      </ms:msGeometry>
    </ms:MD_2775>
  </gml:featureMember>
</wfs:FeatureCollection>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?