11/* Copyright© 2000 - 2020 SuperMap Software Co.Ltd. All rights reserved.
22 * This program are made available under the terms of the Apache License, Version 2.0
33 * which accompanies this distribution and is available at http://www.apache.org/licenses/LICENSE-2.0.html.*/
4- import { SuperMap } from '../SuperMap' ;
5- import { Point } from '../commontypes/geometry/Point' ;
6- import { MultiPoint } from '../commontypes/geometry/MultiPoint' ;
7- import { LinearRing } from '../commontypes/geometry/LinearRing' ;
8- import { LineString } from '../commontypes/geometry/LineString' ;
9- import { MultiLineString } from '../commontypes/geometry/MultiLineString' ;
10- import { Polygon } from '../commontypes/geometry/Polygon' ;
11- import { MultiPolygon } from '../commontypes/geometry/MultiPolygon' ;
12- import { ServerStyle } from './ServerStyle' ;
13- import { Route } from './Route' ;
14- import { Util } from '../commontypes/Util' ;
15- import { GeometryType } from '../REST' ;
4+ import { SuperMap } from '../SuperMap' ;
5+ import { Point } from '../commontypes/geometry/Point' ;
6+ import { MultiPoint } from '../commontypes/geometry/MultiPoint' ;
7+ import { LinearRing } from '../commontypes/geometry/LinearRing' ;
8+ import { LineString } from '../commontypes/geometry/LineString' ;
9+ import { MultiLineString } from '../commontypes/geometry/MultiLineString' ;
10+ import { Polygon } from '../commontypes/geometry/Polygon' ;
11+ import { MultiPolygon } from '../commontypes/geometry/MultiPolygon' ;
12+ import { Collection } from '../commontypes/geometry/Collection' ;
13+ import { ServerStyle } from './ServerStyle' ;
14+ import { Route } from './Route' ;
15+ import { Util } from '../commontypes/Util' ;
16+ import { GeometryType } from '../REST' ;
1617
1718/**
1819 * @class SuperMap.ServerGeometry
19- * @category iServer
20+ * @category iServer
2021 * @classdesc 服务端几何对象类。该类描述几何对象(矢量)的特征数据(坐标点对、几何对象的类型等)。基于服务端的空间分析、空间关系运算、查询等 GIS 服务功能使用服务端几何对象。
2122 * @param {Object } options - 参数。
2223 * @param {string } options.id - 服务端几何对象唯一标识符。
@@ -26,15 +27,13 @@ import {GeometryType} from '../REST';
2627 * @param {SuperMap.ServerStyle } [options.style] - 服务端几何对象的风格。
2728 */
2829export class ServerGeometry {
29-
3030 constructor ( options ) {
31-
3231 /**
3332 * @member {string} SuperMap.ServerGeometry.prototype.id
3433 * @description 服务端几何对象唯一标识符。
3534 */
3635 this . id = 0 ;
37-
36+
3837 /**
3938 * @member {SuperMap.ServerStyle} [SuperMap.ServerGeometry.prototype.style]
4039 * @description 服务端几何对象的风格(ServerStyle)。
@@ -84,7 +83,7 @@ export class ServerGeometry {
8483 Util . extend ( this , options ) ;
8584 }
8685
87- this . CLASS_NAME = " SuperMap.ServerGeometry" ;
86+ this . CLASS_NAME = ' SuperMap.ServerGeometry' ;
8887 }
8988
9089 /**
@@ -125,6 +124,8 @@ export class ServerGeometry {
125124 return me . toGeoLineEPS ( ) ;
126125 case GeometryType . REGIONEPS :
127126 return me . toGeoRegionEPS ( ) ;
127+ case GeometryType . GEOCOMPOUND :
128+ return me . transformGeoCompound ( ) ;
128129 }
129130 }
130131
@@ -264,14 +265,9 @@ export class ServerGeometry {
264265 var pointList = [ ] ;
265266 if ( len == 1 ) {
266267 for ( let i = 0 ; i < geoPoints . length ; i ++ ) {
267- pointList . push (
268- new Point ( geoPoints [ i ] . x , geoPoints [ i ] . y ) )
268+ pointList . push ( new Point ( geoPoints [ i ] . x , geoPoints [ i ] . y ) ) ;
269269 }
270- polygonArray . push (
271- new Polygon (
272- [ new LinearRing ( pointList ) ]
273- )
274- ) ;
270+ polygonArray . push ( new Polygon ( [ new LinearRing ( pointList ) ] ) ) ;
275271 return new MultiPolygon ( polygonArray ) ;
276272 }
277273 //处理复杂面
@@ -283,17 +279,13 @@ export class ServerGeometry {
283279 var CCWIdent = [ ] ;
284280 for ( let i = 0 , pointIndex = 0 ; i < len ; i ++ ) {
285281 for ( let j = 0 ; j < geoParts [ i ] ; j ++ ) {
286- pointList . push (
287- new Point ( geoPoints [ pointIndex + j ] . x , geoPoints [ pointIndex + j ] . y )
288- ) ;
282+ pointList . push ( new Point ( geoPoints [ pointIndex + j ] . x , geoPoints [ pointIndex + j ] . y ) ) ;
289283 }
290284 pointIndex += geoParts [ i ] ;
291- var polygon = new Polygon (
292- [ new LinearRing ( pointList ) ]
293- ) ;
285+ var polygon = new Polygon ( [ new LinearRing ( pointList ) ] ) ;
294286 pointList = [ ] ;
295287 polygonArrayTemp . push ( polygon ) ;
296- if ( geoTopo . length === 0 ) {
288+ if ( geoTopo . length === 0 ) {
297289 polygonBounds . push ( polygon . getBounds ( ) ) ;
298290 }
299291 CCWIdent . push ( 1 ) ;
@@ -324,7 +316,9 @@ export class ServerGeometry {
324316 if ( CCWIdent [ i ] > 0 ) {
325317 polygonArray . push ( polygonArrayTemp [ i ] ) ;
326318 } else {
327- polygonArray [ targetArray [ i ] ] . components = polygonArray [ targetArray [ i ] ] . components . concat ( polygonArrayTemp [ i ] . components ) ;
319+ polygonArray [ targetArray [ i ] ] . components = polygonArray [ targetArray [ i ] ] . components . concat (
320+ polygonArrayTemp [ i ] . components
321+ ) ;
328322 //占位
329323 polygonArray . push ( '' ) ;
330324 }
@@ -338,22 +332,22 @@ export class ServerGeometry {
338332 CCWArray = CCWArray . concat ( polygonArrayTemp [ i ] . components ) ;
339333 } else {
340334 if ( CCWArray . length > 0 && polygonArray . length > 0 ) {
341- polygonArray [ polygonArray . length - 1 ] . components = polygonArray [ polygonArray . length - 1 ] . components . concat ( CCWArray ) ;
335+ polygonArray [ polygonArray . length - 1 ] . components = polygonArray [
336+ polygonArray . length - 1
337+ ] . components . concat ( CCWArray ) ;
342338 CCWArray = [ ] ;
343339 }
344- polygonArray . push (
345- polygonArrayTemp [ i ]
346- ) ;
340+ polygonArray . push ( polygonArrayTemp [ i ] ) ;
347341 }
348342 if ( i == len - 1 ) {
349343 var polyLength = polygonArray . length ;
350344 if ( polyLength ) {
351- polygonArray [ polyLength - 1 ] . components = polygonArray [ polyLength - 1 ] . components . concat ( CCWArray ) ;
345+ polygonArray [ polyLength - 1 ] . components = polygonArray [ polyLength - 1 ] . components . concat (
346+ CCWArray
347+ ) ;
352348 } else {
353349 for ( let k = 0 , length = CCWArray . length ; k < length ; k ++ ) {
354- polygonArray . push (
355- new Polygon ( CCWArray )
356- ) ;
350+ polygonArray . push ( new Polygon ( CCWArray ) ) ;
357351 }
358352 }
359353 }
@@ -382,16 +376,11 @@ export class ServerGeometry {
382376 var lineEPS ;
383377 if ( len == 1 ) {
384378 for ( var i = 0 ; i < geoPoints . length ; i ++ ) {
385- pointList . push (
386- new Point ( geoPoints [ i ] . x , geoPoints [ i ] . y ) )
379+ pointList . push ( new Point ( geoPoints [ i ] . x , geoPoints [ i ] . y ) ) ;
387380 }
388381
389382 lineEPS = LineString . createLineEPS ( pointList ) ;
390- polygonArray . push (
391- new Polygon (
392- [ new LinearRing ( lineEPS ) ]
393- )
394- ) ;
383+ polygonArray . push ( new Polygon ( [ new LinearRing ( lineEPS ) ] ) ) ;
395384 return new MultiPolygon ( polygonArray ) ;
396385 }
397386 //处理复杂面
@@ -403,19 +392,15 @@ export class ServerGeometry {
403392 var CCWIdent = [ ] ;
404393 for ( let i = 0 , pointIndex = 0 ; i < len ; i ++ ) {
405394 for ( let j = 0 ; j < geoParts [ i ] ; j ++ ) {
406- pointList . push (
407- new Point ( geoPoints [ pointIndex + j ] . x , geoPoints [ pointIndex + j ] . y )
408- ) ;
395+ pointList . push ( new Point ( geoPoints [ pointIndex + j ] . x , geoPoints [ pointIndex + j ] . y ) ) ;
409396 }
410397 pointIndex += geoParts [ i ] ;
411398
412399 lineEPS = LineString . createLineEPS ( pointList ) ;
413- var polygon = new Polygon (
414- [ new LinearRing ( lineEPS ) ]
415- ) ;
400+ var polygon = new Polygon ( [ new LinearRing ( lineEPS ) ] ) ;
416401 pointList = [ ] ;
417402 polygonArrayTemp . push ( polygon ) ;
418- if ( geoTopo . length === 0 ) {
403+ if ( geoTopo . length === 0 ) {
419404 polygonBounds . push ( polygon . getBounds ( ) ) ;
420405 }
421406 CCWIdent . push ( 1 ) ;
@@ -446,7 +431,9 @@ export class ServerGeometry {
446431 if ( CCWIdent [ i ] > 0 ) {
447432 polygonArray . push ( polygonArrayTemp [ i ] ) ;
448433 } else {
449- polygonArray [ targetArray [ i ] ] . components = polygonArray [ targetArray [ i ] ] . components . concat ( polygonArrayTemp [ i ] . components ) ;
434+ polygonArray [ targetArray [ i ] ] . components = polygonArray [ targetArray [ i ] ] . components . concat (
435+ polygonArrayTemp [ i ] . components
436+ ) ;
450437 //占位
451438 polygonArray . push ( '' ) ;
452439 }
@@ -459,29 +446,43 @@ export class ServerGeometry {
459446 CCWArray = CCWArray . concat ( polygonArrayTemp [ i ] . components ) ;
460447 } else {
461448 if ( CCWArray . length > 0 && polygonArray . length > 0 ) {
462- polygonArray [ polygonArray . length - 1 ] . components = polygonArray [ polygonArray . length - 1 ] . components . concat ( CCWArray ) ;
449+ polygonArray [ polygonArray . length - 1 ] . components = polygonArray [
450+ polygonArray . length - 1
451+ ] . components . concat ( CCWArray ) ;
463452 CCWArray = [ ] ;
464453 }
465- polygonArray . push (
466- polygonArrayTemp [ i ]
467- ) ;
454+ polygonArray . push ( polygonArrayTemp [ i ] ) ;
468455 }
469456 if ( i == len - 1 ) {
470457 var polyLength = polygonArray . length ;
471458 if ( polyLength ) {
472- polygonArray [ polyLength - 1 ] . components = polygonArray [ polyLength - 1 ] . components . concat ( CCWArray ) ;
459+ polygonArray [ polyLength - 1 ] . components = polygonArray [ polyLength - 1 ] . components . concat (
460+ CCWArray
461+ ) ;
473462 } else {
474463 for ( let k = 0 , length = CCWArray . length ; k < length ; k ++ ) {
475- polygonArray . push (
476- new Polygon ( CCWArray )
477- ) ;
464+ polygonArray . push ( new Polygon ( CCWArray ) ) ;
478465 }
479466 }
480467 }
481468 }
482469 }
483470 return new MultiPolygon ( polygonArray ) ;
484471 }
472+ transformGeoCompound ( ) {
473+ const me = this ,
474+ geoParts = me . geoParts || [ ] ,
475+ len = geoParts . length ;
476+ if ( len <= 0 ) {
477+ return null ;
478+ }
479+ const geometryList = [ ] ;
480+ for ( let index = 0 ; index < len ; index ++ ) {
481+ const geometry = geoParts [ index ] ;
482+ geometryList . push ( new ServerGeometry ( geometry ) . toGeometry ( ) ) ;
483+ }
484+ return new Collection ( geometryList ) ;
485+ }
485486
486487 /**
487488 * @function SuperMap.ServerGeometry.prototype.fromJson
@@ -505,7 +506,6 @@ export class ServerGeometry {
505506 minM : jsonObject . minM ,
506507 type : jsonObject . type
507508 } ) ;
508-
509509 }
510510
511511 /**
@@ -524,13 +524,17 @@ export class ServerGeometry {
524524 type = null ,
525525 icomponents = geometry . components ,
526526 className = geometry . CLASS_NAME ,
527- prjCoordSys = { " epsgCode" : geometry . SRID } ;
527+ prjCoordSys = { epsgCode : geometry . SRID } ;
528528
529529 if ( ! isNaN ( geometry . id ) ) {
530530 id = geometry . id ;
531531 }
532532 //坑爹的改法,没法,为了支持态势标绘,有时间就得全改
533- if ( className != "SuperMap.Geometry.LinearRing" && className != "SuperMap.Geometry.LineString" && ( geometry instanceof MultiPoint || geometry instanceof MultiLineString ) ) {
533+ if (
534+ className != 'SuperMap.Geometry.LinearRing' &&
535+ className != 'SuperMap.Geometry.LineString' &&
536+ ( geometry instanceof MultiPoint || geometry instanceof MultiLineString )
537+ ) {
534538 let ilen = icomponents . length ;
535539 for ( let i = 0 ; i < ilen ; i ++ ) {
536540 let partPointsCount = icomponents [ i ] . getVertices ( ) . length ;
@@ -540,7 +544,7 @@ export class ServerGeometry {
540544 }
541545 }
542546 //这里className不是多点就全部是算线
543- type = ( className == " SuperMap.Geometry.MultiPoint" ) ? GeometryType . POINT : GeometryType . LINE ;
547+ type = className == ' SuperMap.Geometry.MultiPoint' ? GeometryType . POINT : GeometryType . LINE ;
544548 } else if ( geometry instanceof MultiPolygon ) {
545549 let ilen = icomponents . length ;
546550 for ( let i = 0 ; i < ilen ; i ++ ) {
@@ -551,9 +555,16 @@ export class ServerGeometry {
551555 let partPointsCount = linearRingOfPolygon [ j ] . getVertices ( ) . length + 1 ;
552556 parts . push ( partPointsCount ) ;
553557 for ( let k = 0 ; k < partPointsCount - 1 ; k ++ ) {
554- points . push ( new Point ( linearRingOfPolygon [ j ] . getVertices ( ) [ k ] . x , linearRingOfPolygon [ j ] . getVertices ( ) [ k ] . y ) ) ;
558+ points . push (
559+ new Point (
560+ linearRingOfPolygon [ j ] . getVertices ( ) [ k ] . x ,
561+ linearRingOfPolygon [ j ] . getVertices ( ) [ k ] . y
562+ )
563+ ) ;
555564 }
556- points . push ( new Point ( linearRingOfPolygon [ j ] . getVertices ( ) [ 0 ] . x , linearRingOfPolygon [ j ] . getVertices ( ) [ 0 ] . y ) ) ;
565+ points . push (
566+ new Point ( linearRingOfPolygon [ j ] . getVertices ( ) [ 0 ] . x , linearRingOfPolygon [ j ] . getVertices ( ) [ 0 ] . y )
567+ ) ;
557568 }
558569 }
559570 type = GeometryType . REGION ;
@@ -578,7 +589,7 @@ export class ServerGeometry {
578589 geometryVerticesCount ++ ;
579590 }
580591 parts . push ( geometryVerticesCount ) ;
581- type = ( geometry instanceof Point ) ? GeometryType . POINT : GeometryType . LINE ;
592+ type = geometry instanceof Point ? GeometryType . POINT : GeometryType . LINE ;
582593 }
583594
584595 return new ServerGeometry ( {
@@ -610,7 +621,7 @@ export class ServerGeometry {
610621 return s * 0.5 ;
611622 }
612623
613- static bubbleSort ( areaArray , pointList , geoTopo , polygonBounds ) {
624+ static bubbleSort ( areaArray , pointList , geoTopo , polygonBounds ) {
614625 for ( var i = 0 ; i < areaArray . length ; i ++ ) {
615626 for ( var j = 0 ; j < areaArray . length ; j ++ ) {
616627 if ( areaArray [ i ] > areaArray [ j ] ) {
@@ -634,7 +645,6 @@ export class ServerGeometry {
634645 }
635646 }
636647 }
637-
638648}
639649
640- SuperMap . ServerGeometry = ServerGeometry ;
650+ SuperMap . ServerGeometry = ServerGeometry ;
0 commit comments