使用带有ES6模块的JSTS isValid()

时间:2018-03-29 09:14:09

标签: javascript ecmascript-6 openlayers

我正在尝试将JSTS配置为使用ES6模块加载,这样我就不必包含整个库。

关于如何在线执行此操作的示例很少,包括使用扩展函数来提取功能,但是使用isValid方法的所有尝试都失败了:

import extend from 'jsts/extend';
import Geometry from 'jsts/org/locationtech/jts/geom/Geometry';
import Valid from 'jsts/org/locationtech/jts/operation/valid';
import WKTReader from 'jsts/org/locationtech/jts/io/WKTReader';    

    extend(Geometry.prototype, {
        buffer: function () {
            return Valid.isValid(this, ...arguments);
        }
    })


    let reader = new WKTReader();
    var geom = reader.read('POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280))');        
    console.log(geom.isValid());

每次我回来的时候都是: 未捕获的TypeError:geom.isValid不是函数

示例JSTS ES6实现: https://github.com/DenisCarriere/jsts-es6-example

3 个答案:

答案 0 :(得分:1)

您可以这样实现:

此示例与GeoJsonReader一起使用,但与WKTReader相似。

1>main.cpp
1>c:\users\karlovsky120\source\repos\vulkanproject\vulkanproject\vulkansurface.h(14): error C2061: syntax error: identifier 'VulkanInstance'
1>c:\users\karlovsky120\source\repos\vulkanproject\vulkanproject\main.cpp(104): error C2440: '<function-style-cast>': cannot convert from 'initializer list' to 'VulkanSurface'
1>c:\users\karlovsky120\source\repos\vulkanproject\vulkanproject\main.cpp(104): note: No constructor could take the source type, or constructor overload resolution was ambiguous
1>c:\users\karlovsky120\source\repos\vulkanproject\vulkanproject\main.cpp(104): error C2672: 'std::make_unique': no matching overloaded function found
1>VulkanInstance.cpp
1>c:\users\karlovsky120\source\repos\vulkanproject\vulkanproject\vulkansurface.h(14): error C2061: syntax error: identifier 'VulkanInstance'

答案 1 :(得分:0)

我已经在某种程度上使用以下工作了:

    import WKTReader from 'jsts/org/locationtech/jts/io/WKTReader';
    import Valid from 'jsts/org/locationtech/jts/operation/valid/IsValidOp';

    const valid = new Valid();

    let reader = new WKTReader();
    var geom = reader.read('POLYGON ((80 300, 280 300, 280 80, 80 80, 80 300), (260 280, 180 200, 100 280, 100 100, 260 100, 260 280))');      

    console.log('Valid: ', valid.isValid(geom));

现在返回&#39; true&#39;对于上面的Polygon。但是,如果Polygon中出现错误,那么JSTS只会引发未被捕获的错误,因此从库中捕获错误是我的下一个问题......

答案 2 :(得分:0)

除了亚历克斯(Alex)的答案-可能对某人有帮助...

键入:

declare namespace jsts {
  namespace operation {
    namespace valid {
      export class IsValidOp {
        constructor(geom: geom.Geometry);

        static isValid(coord?: geom.Coordinate): boolean;
      }
    }
  }
}

declare module 'jsts' {
  export = jsts;
}

用法:

import { IsValidOp as JstsIsValidOp } from 'jsts/org/locationtech/jts/operation/valid';

if (new JstsIsValidOp(jstsHole).isValid()) {
  ...
}

当正确地小部分而不是全局地导入JSTS时,请查看operation-namespace / -folder。特别相关,覆盖和有效目录可能会有所帮助。

要导入完整的ES5 / 6版本,还将在全球范围内包含monkey.js,该猴子在geometry中添加了便利功能,但会抛出循环依赖警告并增加构建大小。