Administrator 2 年之前
父節點
當前提交
4c903fd413
共有 26 個文件被更改,包括 738 次插入445 次删除
  1. 4 0
      src/main/java/com/sysu/admin/controller/geo/CityLand.java
  2. 9 4
      src/main/java/com/sysu/admin/controller/geo/CityLandService.java
  3. 9 18
      src/main/java/com/sysu/admin/controller/geo/PostGisInfoController.java
  4. 93 0
      src/main/java/com/sysu/admin/controller/geo/land/FieldPoint.java
  5. 36 2
      src/main/java/com/sysu/admin/controller/geo/land/FieldPointController.java
  6. 7 0
      src/main/java/com/sysu/admin/controller/geo/land/FieldPointRepository.java
  7. 22 0
      src/main/java/com/sysu/admin/controller/geo/land/FieldPointService.java
  8. 7 0
      src/main/java/com/sysu/admin/controller/geo/land/FieldPointStatus.java
  9. 32 0
      src/main/java/com/sysu/admin/controller/geo/land/FieldPointVo.java
  10. 73 0
      src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImage.java
  11. 7 0
      src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImageRepository.java
  12. 27 0
      src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImageService.java
  13. 1 1
      src/main/java/com/sysu/admin/controller/geo/qyz/QyzController.java
  14. 9 0
      src/main/java/com/sysu/admin/support/base/RepositoryContext.java
  15. 14 2
      src/main/java/com/sysu/admin/utils/shape/GeoCastUtil.java
  16. 6 29
      src/main/resources/application-adm.yml
  17. 1 1
      src/main/resources/application-dev.yml
  18. 7 3
      src/main/webapp/WEB-INF/jsp/comm/admin2.jsp
  19. 0 0
      src/main/webapp/WEB-INF/jsp/page/land-field-point/land-point-info.jsp
  20. 0 236
      src/main/webapp/WEB-INF/jsp/page/land_field_point/land_point_Info.jsp
  21. 14 128
      src/main/webapp/WEB-INF/jsp/page/zzjg.jsp
  22. 12 0
      src/main/webapp/static/css/admin2.css
  23. 16 3
      src/main/webapp/static/js/tools/openLayers.js
  24. 103 16
      src/main/webapp/static/package/cityland.js
  25. 6 2
      src/main/webapp/static/package/qyz.js
  26. 223 0
      src/main/webapp/static/package/zzjg.js

+ 4 - 0
src/main/java/com/sysu/admin/controller/geo/CityLand.java

@@ -1,6 +1,7 @@
 package com.sysu.admin.controller.geo;
 
 import com.alibaba.fastjson.annotation.JSONField;
+import com.sysu.admin.controller.geo.land.FieldPoint;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -37,5 +38,8 @@ public class CityLand {
     @Transient
     private String wkt;
 
+    @Transient
+    private FieldPoint[] fieldPoints;
+
 
 }

+ 9 - 4
src/main/java/com/sysu/admin/controller/geo/CityLandService.java

@@ -1,19 +1,24 @@
 package com.sysu.admin.controller.geo;
 
+import com.sysu.admin.support.base.BaseService;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
 import com.xiesx.fastboot.core.jpa.annotation.TargetDataSource;
 import com.xiesx.fastboot.core.jpa.cfg.DataSourceEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
-public class CityLandService {
+public class CityLandService extends BaseService<CityLand, Long> {
+
 
-    @Autowired
-    CityLandRepository cityLandRepository;
 
     public CityLand findByPoint(double x, double y){
-        CityLand cityLand = cityLandRepository.findIdByPoint("Point("+x+" "+y+")");
+        CityLand cityLand = mCityLandRepository.findIdByPoint("Point("+x+" "+y+")");
         return cityLand;
     }
 
+    @Override
+    public JpaPlusRepository<CityLand, Long> r() {
+        return mCityLandRepository;
+    }
 }

+ 9 - 18
src/main/java/com/sysu/admin/controller/geo/PostGisInfoController.java

@@ -1,30 +1,14 @@
 package com.sysu.admin.controller.geo;
 
-import com.sysu.admin.utils.shape.CoordinateConversion;
+import com.sysu.admin.controller.geo.land.FieldPoint;
+import com.sysu.admin.controller.geo.land.FieldPointService;
 import com.sysu.admin.utils.shape.GeoCastUtil;
-import com.sysu.admin.utils.shape.postgis.PostGisUtil;
 import com.xiesx.fastboot.base.result.BaseResult;
 import com.xiesx.fastboot.base.result.R;
-import org.geotools.data.postgis.TWKBReader;
-import org.geotools.geojson.feature.FeatureJSON;
-import org.geotools.geometry.jts.WKBReader;
-import org.geotools.geometry.jts.WKTReader2;
-import org.geotools.geometry.jts.WKTWriter2;
-import org.locationtech.jts.geom.Coordinate;
-import org.locationtech.jts.geom.Geometry;
-import org.locationtech.jts.io.ParseException;
-import org.opengis.feature.simple.SimpleFeature;
-import org.postgresql.util.Base64;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.io.IOException;
-import java.io.StringWriter;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * 读取地图数据信息
  */
@@ -34,11 +18,18 @@ public class PostGisInfoController {
 
     @Autowired
     CityLandService cityLandService;
+    @Autowired
+    FieldPointService fieldPointService;
 
     @RequestMapping("/getInfo")
     public BaseResult getInfo(String layerName, Double x, Double y){
         CityLand cityLand = cityLandService.findByPoint(x,y);
         cityLand.setWkt(GeoCastUtil.geomToWkt(cityLand.getGeom()));
+        FieldPoint[] fieldPoints = fieldPointService.findAllByLandId(cityLand.getId());
+        for(FieldPoint fieldPoint : fieldPoints){
+            fieldPoint.setWkt(GeoCastUtil.geomToWkt(fieldPoint.getGeom()));
+        }
+        cityLand.setFieldPoints(fieldPoints);
         return R.succ(cityLand);
     }
 

+ 93 - 0
src/main/java/com/sysu/admin/controller/geo/land/FieldPoint.java

@@ -0,0 +1,93 @@
+package com.sysu.admin.controller.geo.land;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.MultiPolygon;
+import org.locationtech.jts.geom.Point;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_field_point")
+@Entity
+@EntityListeners(AuditingEntityListener.class)
+@DynamicInsert
+@DynamicUpdate
+public class FieldPoint {
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+    /**
+     * 地块id
+     */
+    @Column
+    private Long landId;
+    /**
+     * 耕地类型
+     */
+    @Column
+    private Integer cropType;
+    /**
+     * 生长期
+     */
+    @Column
+    private Integer growingPeriod;
+
+    /**
+     * 产量
+     */
+    @Column
+    private Integer yield;
+
+    @JSONField(serialize = false)
+    @Column(columnDefinition = "geom",updatable = false)
+    private Point geom;
+
+    @Transient
+    private String wkt;
+
+    @CreatedDate
+    @Column(updatable = false, nullable = false)
+    private Date createDate;
+
+    @Column(updatable = false, nullable = false)
+    private Date receiveDate;
+
+    @Column(updatable = false, nullable = false)
+    private Date finishDate;
+
+    /**
+     * 创建人
+     */
+    @CreatedBy
+    @Column(updatable = false, nullable = false)
+    private Long creator;
+
+    /**
+     * 创建人
+     */
+    @Column(updatable = false, nullable = false)
+    private Long executor;
+
+    /**
+     * 状态
+     */
+    @Column
+    private Integer status;
+
+}

+ 36 - 2
src/main/java/com/sysu/admin/controller/geo/land/FieldPointController.java

@@ -1,16 +1,50 @@
 package com.sysu.admin.controller.geo.land;
 
-import org.geolatte.geom.crs.CrsRegistry;
+import com.sysu.admin.controller.geo.CityLand;
+import com.sysu.admin.controller.geo.CityLandService;
+import com.sysu.admin.controller.geo.land.images.FieldPointImageService;
+import com.sysu.admin.utils.shape.GeoCastUtil;
+import com.xiesx.fastboot.base.result.BaseResult;
+import com.xiesx.fastboot.base.result.R;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.locationtech.jts.geom.Point;
 
 @Controller
 @RequestMapping(value = "/field_point")
 public class FieldPointController {
 
+    @Autowired
+    private FieldPointService mFieldPointService;
+    @Autowired
+    private CityLandService mCityLandService;
+    @Autowired
+    private FieldPointImageService mFieldPointImageService;
+
     @RequestMapping(value = "/info")
     public String info(){
-        return "page/test";
+        return "page/land-field-point/land-point-info";
+    }
+
+    @RequestMapping(value = "/save")
+    @ResponseBody
+    public BaseResult save(FieldPointVo vo){
+        FieldPoint bean = null;
+        if(vo.getId() == null){
+            CityLand cityLand = mCityLandService.findOne(vo.getLandId());
+            bean = new FieldPoint()
+                    .setCropType(cityLand.getGridcode().intValue())
+                    .setGeom((Point)GeoCastUtil.wktToGeom(vo.getWkt()))
+                    .setStatus(FieldPointStatus.publish.ordinal())
+                    .setLandId(cityLand.getId());
+        }else{
+            bean = mFieldPointService.findOne(vo.getId());
+        }
+        mFieldPointService.save(bean);
+        bean.setWkt(GeoCastUtil.geomToWkt(bean.getGeom()));
+        return R.succ(bean);
     }
 
 }

+ 7 - 0
src/main/java/com/sysu/admin/controller/geo/land/FieldPointRepository.java

@@ -0,0 +1,7 @@
+package com.sysu.admin.controller.geo.land;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface FieldPointRepository extends JpaPlusRepository<FieldPoint, Long> {
+
+}

+ 22 - 0
src/main/java/com/sysu/admin/controller/geo/land/FieldPointService.java

@@ -0,0 +1,22 @@
+package com.sysu.admin.controller.geo.land;
+
+import com.querydsl.core.types.Predicate;
+import com.sysu.admin.support.base.BaseService;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import org.springframework.stereotype.Service;
+
+@Service
+public class FieldPointService extends BaseService<FieldPoint, Long> {
+
+    public FieldPoint[] findAllByLandId(Long landId){
+        QFieldPoint qFieldPoint = QFieldPoint.fieldPoint;
+        Predicate predicate = qFieldPoint.landId.eq(landId);
+        return mFieldPointRepository.findAll(predicate).toArray(new FieldPoint[0]);
+    }
+
+
+    @Override
+    public JpaPlusRepository<FieldPoint, Long> r() {
+        return mFieldPointRepository;
+    }
+}

+ 7 - 0
src/main/java/com/sysu/admin/controller/geo/land/FieldPointStatus.java

@@ -0,0 +1,7 @@
+package com.sysu.admin.controller.geo.land;
+
+public enum FieldPointStatus {
+    publish,//发布
+    receive,//接收
+    finish//完成
+}

+ 32 - 0
src/main/java/com/sysu/admin/controller/geo/land/FieldPointVo.java

@@ -0,0 +1,32 @@
+package com.sysu.admin.controller.geo.land;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.locationtech.jts.geom.Point;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+public class FieldPointVo {
+
+    private Long id;
+    /**
+     * 地块id
+     */
+    private Long landId;
+
+    private String wkt;
+
+    private Long[] imageIds;
+
+
+}

+ 73 - 0
src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImage.java

@@ -0,0 +1,73 @@
+package com.sysu.admin.controller.geo.land.images;
+
+
+import com.xiesx.fastboot.core.jpa.entity.JpaPlusEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+
+import javax.persistence.*;
+import java.util.Date;
+
+/**
+ * @title 上传记录
+ * @description
+ */
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@FieldNameConstants(innerTypeName = "FIELDS")
+@Table(name = "p_field_point_image")
+@Entity
+@EntityListeners(AuditingEntityListener.class)
+@DynamicInsert
+@DynamicUpdate
+public class FieldPointImage extends JpaPlusEntity<FieldPointImage> {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column
+    private Long pointId;
+
+    @Column
+    private String filename;
+
+    /**
+     * 创建时间
+     */
+    @CreatedDate
+    @Column(updatable = false, nullable = false)
+    private Date createDate;
+
+    /**
+     * 纬度
+     */
+    @Column
+    private String latitude;
+
+    /**
+     * 经度
+     */
+    @Column
+    private String longitude;
+
+    @Column
+    private String alpha;
+
+    @Column
+    private String beta;
+
+    @Column
+    private String gamma;
+}

+ 7 - 0
src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImageRepository.java

@@ -0,0 +1,7 @@
+package com.sysu.admin.controller.geo.land.images;
+
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+
+public interface FieldPointImageRepository extends JpaPlusRepository<FieldPointImage, Long> {
+
+}

+ 27 - 0
src/main/java/com/sysu/admin/controller/geo/land/images/FieldPointImageService.java

@@ -0,0 +1,27 @@
+package com.sysu.admin.controller.geo.land.images;
+
+
+import com.sysu.admin.support.base.BaseService;
+import com.xiesx.fastboot.core.jpa.JpaPlusRepository;
+import com.xiesx.fastboot.core.jpa.entity.JpaPlusEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import lombok.experimental.FieldNameConstants;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.*;
+import java.util.Date;
+
+@Service
+public class FieldPointImageService extends BaseService<FieldPointImage, Long> {
+
+    @Override
+    public JpaPlusRepository<FieldPointImage, Long> r() {
+        return mFieldPointImageRepository;
+    }
+}

+ 1 - 1
src/main/java/com/sysu/admin/controller/geo/qyz/QyzController.java

@@ -32,7 +32,7 @@ public class QyzController {
      */
     @RequestMapping(value = "/zzjg")
     public String zzjg(Model model){
-        model.addAttribute("id","");
+        model.addAttribute("pac","441821");
         return "page/zzjg";
     }
 

+ 9 - 0
src/main/java/com/sysu/admin/support/base/RepositoryContext.java

@@ -1,6 +1,9 @@
 package com.sysu.admin.support.base;
 
 
+import com.sysu.admin.controller.geo.CityLandRepository;
+import com.sysu.admin.controller.geo.land.FieldPointRepository;
+import com.sysu.admin.controller.geo.land.images.FieldPointImageRepository;
 import com.sysu.admin.controller.geo.qyz.QyzRepository;
 import com.sysu.admin.support.system.user_role.UserRoleRepository;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -33,5 +36,11 @@ public class RepositoryContext extends BaseComponent{
 
     @Autowired
     public QyzRepository mQyzRepository;
+    @Autowired
+    public CityLandRepository mCityLandRepository;
+    @Autowired
+    public FieldPointRepository mFieldPointRepository;
+    @Autowired
+    public FieldPointImageRepository mFieldPointImageRepository;
 
 }

+ 14 - 2
src/main/java/com/sysu/admin/utils/shape/GeoCastUtil.java

@@ -1,8 +1,10 @@
 package com.sysu.admin.utils.shape;
 
 import org.geotools.geojson.geom.GeometryJSON;
+import org.geotools.geometry.jts.WKTReader2;
 import org.geotools.geometry.jts.WKTWriter2;
 import org.locationtech.jts.geom.*;
+import org.locationtech.jts.io.ParseException;
 import org.opengis.feature.type.GeometryDescriptor;
 
 import java.io.IOException;
@@ -10,10 +12,20 @@ import java.io.StringReader;
 
 public class GeoCastUtil {
 
-    private static WKTWriter2 wktReader2 = new WKTWriter2();
+    private static WKTWriter2 wKTWriter2 = new WKTWriter2();
+    private static WKTReader2 wktReader2 = new WKTReader2();
 
     public static String geomToWkt(Geometry geometry){
-        return wktReader2.write(geometry);
+        return wKTWriter2.write(geometry);
+    }
+
+    public static Geometry wktToGeom(String wkt){
+        try {
+            return wktReader2.read(wkt);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+        return null;
     }
 
     private static GeometryCollection castGeometryCollection2(GeometryJSON fjson, GeometryCollection geometryCollection) throws IOException {

+ 6 - 29
src/main/resources/application-adm.yml

@@ -8,34 +8,11 @@ logging:
   
 spring:
   datasource:
-    write:
-      driver-class-name: com.mysql.jdbc.Driver
-      jdbc-url: jdbc:mysql://127.0.0.1:3306/sysu-emap?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
-      username: sysu-emap
-      password: sysu-emap-2020
-      pool-name: HikariPool-1
-      connection-timeout: 60000
-      validation-timeout: 3000
-      idle-timeout: 60000
-      login-timeout: 5
-      max-lifetime: 60000
-      maximum-pool-size: 10
-      minimum-idle: 10
-      read-only: false
-    read:
-      driver-class-name: org.postgresql.Driver
-      jdbc-url: jdbc:postgresql://127.0.0.1:39543/sysu-emap
-      username: postgres
-      password: postgres
-      pool-name: HikariPool-2
-      connection-timeout: 60000
-      validation-timeout: 3000
-      idle-timeout: 60000
-      login-timeout: 5
-      max-lifetime: 60000
-      maximum-pool-size: 2
-      minimum-idle: 2
-      read-only: true
+    driver-class-name: org.postgis.DriverWrapper
+    url: jdbc:postgresql_postGIS://127.0.0.1:39543/sysu-emap
+    username: postgres
+    password: postgres
+    pool-name: HikariPool-1
     druid:
       # 日志
       filter:
@@ -77,7 +54,7 @@ spring:
         enabled: true   
      
   jpa:
-    database-platform: org.hibernate.dialect.MySQL8Dialect
+    database-platform: org.hibernate.spatial.dialect.postgis.PostgisDialect
     show-sql: false
 
 postgis:

+ 1 - 1
src/main/resources/application-dev.yml

@@ -19,7 +19,7 @@ spring:
 
 
 postgis:
-  url: localhost
+  url: 101.35.200.5
   port: 39543
   database: sysu-emap
   user: postgres

+ 7 - 3
src/main/webapp/WEB-INF/jsp/comm/admin2.jsp

@@ -57,9 +57,9 @@
                 var target = "map"
 
                 view1 = new ol.View({
-                    center: [113.0978, 23.6697],
+                    center: [117.0498, 23.4073],
                     projection: projection,
-                    zoom: 8
+                    zoom: 18
                 })
 
                 map = new ol.Map({
@@ -157,7 +157,7 @@
                         }
                     }});
                 geoServerContext.createAction("3", QyzAction).start();
-
+                $("#gray-shade").hide()
             });
 
 
@@ -224,6 +224,10 @@
             </div>
         </div>
         <!-- 右下角层 -->
+        <!-- 灰色遮罩 -->
+        <div id="gray-shade" class="gray-shade">
+        </div>
+        <!-- 灰色遮罩 -->
 
 
         <link href="${base}/static/js/ztree/css/demo.css" rel="stylesheet"/>

+ 0 - 0
src/main/webapp/WEB-INF/jsp/page/test.jsp → src/main/webapp/WEB-INF/jsp/page/land-field-point/land-point-info.jsp


+ 0 - 236
src/main/webapp/WEB-INF/jsp/page/land_field_point/land_point_Info.jsp

@@ -1,236 +0,0 @@
-<%@ page language="java" contentType="text/html;charset=UTF-8" trimDirectiveWhitespaces="true"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/fastboot" prefix="fb"%>
-<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
-<fb:ui src="base/main2">
-    <fb:property name="title"></fb:property>
-    <fb:script type="text/javascript" src='${base}/static/CesiumUnminified/Cesium.js'></fb:script>
-    <fb:script type="text/javascript" src='${base}/static/cesium-custom/primitive.js'></fb:script>
-    <fb:script type="text/javascript" src='https://api.tianditu.gov.cn/cdn/plugins/cesium/cesiumTdt.js'></fb:script>
-    <fb:script type="text/javascript" src='https://api.tianditu.gov.cn/api?v=4.0&tk=e95115c454a663cd052d96019fd83840'></fb:script>
-    <fb:css href="${base}/static/js/ztree/css/zTreeStyle/zTreeStyle.css"></fb:css>
-    <fb:script type="text/javascript">
-        <script>
-            /*jslint sub: true, maxerr: 50, indent: 4, browser: true */
-            /*global console */
-            function area(positions) {
-                var area = 0,
-                    i,
-                    j,
-                    point1,
-                    point2;
-
-                for (i = 0, j = positions.length - 1; i < positions.length; j=i,i++) {
-                    point1 = positions[i];
-                    point2 = positions[j];
-                    area += point1.x * point2.y;
-                    area -= point1.y * point2.x;
-                }
-                area /= 2;
-
-                return area;
-            }
-
-            function centroid(positions) {
-                var x = 0,
-                    y = 0,
-                    i,
-                    j,
-                    f,
-                    point1,
-                    point2;
-
-                for (i = 0, j = positions.length - 1; i < positions.length; j=i,i++) {
-                    point1 = positions[i];
-                    point2 = positions[j];
-                    f = point1.x * point2.y - point2.x * point1.y;
-                    x += (point1.x + point2.x) * f;
-                    y += (point1.y + point2.y) * f;
-                }
-
-                f = area(positions) * 6;
-                return new Cesium.Cartesian3 (x / f, y / f, positions[0].z);
-            }
-
-
-            var cesiumAsset='eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4ZDg3MzQ3Yy1lZTE0LTRhYzAtYjYzNC1iNjU2MzJiNWI5ZDIiLCJpZCI6NjYzNTcsImlhdCI6MTYzMDkwNjc1N30.34JZe5Zw28PX2r_AU6GUMTKPX3uobfK1wsbeAlYiWEg';
-            var tiandituTk='e95115c454a663cd052d96019fd83840';
-            // 服务负载子域
-            var subdomains=['0','1','2','3','4','5','6','7'];
-            Cesium.Ion.defaultAccessToken = cesiumAsset;
-
-            var viewer = new Cesium.Viewer("cesiumContainer", {
-                sceneMode : Cesium.SceneMode.SCENE2D,
-                animation: false, // 动画小组件
-                baseLayerPicker: false, // 底图组件,选择三维数字地球的底图(imagery and terrain)。
-                fullscreenButton: false, // 全屏组件
-                vrButton: false, // VR模式
-                geocoder: true, // 地理编码(搜索)组件
-                homeButton: false, // 首页,点击之后将视图跳转到默认视角
-                infoBox: true, // 信息框enableDistanceLegend
-                sceneModePicker: false, // 场景模式,切换2D、3D 和 Columbus View (CV) 模式。
-                selectionIndicator: true, //是否显示选取指示器组件
-                timeline: true, // 时间轴
-                navigationHelpButton: false, // 帮助提示,如何操作数字地球。
-                // 如果最初应该看到导航说明,则为true;如果直到用户明确单击该按钮,则该提示不显示,否则为false。
-                navigationInstructionsInitiallyVisible: false,
-                imageryProvider : new Cesium.WebMapTileServiceImageryProvider({
-                    url: "https://t{s}.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&tk="+tiandituTk,
-
-                    subdomains: subdomains,
-                    layer: "tdtBasicLayer",
-                    style: "default",
-                    format: "image/jpeg",
-                    tileMatrixSetID: "GoogleMapsCompatible",
-                    show: true
-                })
-            });
-
-
-
-
-            // 隐藏logo
-            viewer._cesiumWidget._creditContainer.style.display = "none";
-
-            viewer.imageryLayers.addImageryProvider(new Cesium.WebMapTileServiceImageryProvider({
-                url: "https://t{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=cia&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default.jpg&tk="+tiandituTk,
-                subdomains: subdomains,
-                layer: "tdtBasicLayer",
-                style: "default",
-                format: "image/jpeg",
-                tileMatrixSetID: "GoogleMapsCompatible",
-                show: false
-            }));
-
-
-
-            Cesium.GeoJsonDataSource.load("http://localhost:8080/geoserver/qingyuan/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=qingyuan:佛冈最终裸露山体地块&maxFeatures=50&outputFormat=application/json", {
-                stroke: Cesium.Color.BLUE,
-                fill: Cesium.Color.BLUE.withAlpha(0.1), //注意:颜色必须大写,即不能为blue
-                strokeWidth: 10
-            }).then(function(ds){
-                var labelEntityDataSource = new Cesium.CustomDataSource('myData');
-
-                var entities = ds.entities.values;
-                for(var entity of entities){
-                    var positions = entity.polygon.hierarchy._value.positions
-                    var position = centroid(positions);
-                    var landNumber = entity.properties["地块编号"]._value;
-
-                    var labelEntity = new Cesium.Entity({
-                        id:"fg_label_" + landNumber,
-                        name: "label",
-                        position: position,
-                        show:true,
-                        ellipse : {
-                            material : new Cesium.CheckerboardMaterialProperty({
-                                evenColor : Cesium.Color.WHITE,
-                                oddColor : Cesium.Color.BLACK,
-                                repeat : new Cesium.Cartesian2(4, 4)
-                            })
-                        },
-                        label: {
-                            text : "地块编号:" + landNumber ,
-                            color : Cesium.Color.fromCssColorString('#fff'),
-                            font:'normal 20px MicroSoft YaHei',
-                            showBackground : true,
-                            /*horizontalOrigin : Cesium.HorizontalOrigin.LEFT_CLICK,*/
-                            /*verticalOrigin : Cesium.VerticalOrigin.BOTTOM,*/
-                            distanceDisplayCondition : new Cesium.DistanceDisplayCondition(1000,10000),
-                            scaleByDistance : new Cesium.NearFarScalar(1000, 1, 10000, 2),
-                        },
-                        billboard: {
-                            //像素偏移    type: Cartesian2    default:Cartesian2.ZERO
-                            //眼睛偏移    type: Cartesian3    default:Cartesian3.ZERO
-                            eyeOffset: new Cesium.Cartesian3(0.0, 0.0, 0.0),
-                            image: "${base}/static/images/point.png", // default: undefined
-                            text : "地块编号:" + entity.properties["地块编号"]._value ,
-                            // 水平对齐方式  type: HorizontalOrigin  default:HorizontalOrigin.CENTER
-                            // CENTER 原点在对象的水平中心;LEFT 原点在对象的左侧;RIGHT 原点在对象的右侧
-                            horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
-                            // 垂直对齐方式  type: VerticalOrigin  default:VerticalOrigin.CENTER
-                            // CENTER 原点位于 BASELINE 和 TOP 之间的垂直中心;BOTTOM 原点在对象的底部;
-                            // BASELINE 如果对象包含文本,则原点位于文本的基线,否则原点位于对象的底部;TOP 原点在对象的顶部
-                            verticalOrigin: Cesium.VerticalOrigin.BOTTOM, // default: CENTER 垂直对齐位置 参考Cesium.VerticalOrigin
-
-                            // 获取或设置此广告牌的高度参考    type: HeightReference    default:HeightReference.NONE
-                            // NONE 位置绝对;CLAMP_TO_GROUND 位置固定在地形上;RELATIVE_TO_GROUND 位置高度是指地形上方的高度
-                            heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
-                            // 获取或设置世界空间中的对齐轴  type:Cartesian3  default:Cartesian3.ZERO
-                            alignedAxis: Cesium.Cartesian3.ZERO,
-
-                            distanceDisplayCondition : new Cesium.DistanceDisplayCondition(1000,50000),
-                            scaleByDistance : new Cesium.NearFarScalar(1000, 0.4, 50000, 0.4),
-
-                            // 设置1000米和2000米之间可见  type:DistanceDisplayCondition
-                            // distanceDisplayCondition: new Cesium.DistanceDisplayCondition(
-                            //   1.0e3,
-                            //   2.0e3
-                            // ),
-                            // 获取或设置与相机的距离,在深度处禁用深度测试,例如,以防止剪切地形。
-                            // 设置为零时,将始终应用深度测试。设置为Number.POSITIVE_INFINITY时,永远不会应用深度测试。
-                            disableDepthTestDistance: Number.POSITIVE_INFINITY,
-                        }
-                    })
-                    labelEntityDataSource.entities.add(labelEntity)
-                }
-
-
-                var positions = entities[entities.length >> 1].polygon.hierarchy._value.positions
-                var position = centroid(positions);
-
-                viewer.entities.add({
-                    id:"fg_label",
-                    name: "label",
-                    properties:new Cesium.PropertyBag({type:"city",dataSource : labelEntityDataSource}),
-                    position: position,
-                    label: {
-                        show : true,
-                        text : "佛冈",
-                        color : Cesium.Color.fromCssColorString('#fff'),
-                        font:'normal 1000px MicroSoft YaHei',
-                        showBackground : true,
-                        scale : 0.4,
-                        /*horizontalOrigin : Cesium.HorizontalOrigin.LEFT_CLICK,*/
-                        /*verticalOrigin : Cesium.VerticalOrigin.BOTTOM,*/
-                        distanceDisplayCondition : new Cesium.DistanceDisplayCondition(10000,50000),
-                        scaleByDistance : new Cesium.NearFarScalar(10000, 0.4, 50000, 0.4),
-                    },
-                });
-                viewer.dataSources.add(ds);
-                viewer.dataSources.add(labelEntityDataSource);
-
-                // viewer.selectedEntityChanged.addEventListener(function (entity) {
-                // 	if(entity.properties && entity.properties.hasProperty('type')){
-                // 		if(entity.properties.type._value == 'city'){
-                // 			var dataSource = entity.properties.dataSource._value;
-                // 			dataSource.show = true;
-                // 		}
-                // 	}
-                // });
-
-                document.getElementById("fg").addEventListener("click",function(event){
-                    ds.show =  event.currentTarget.checked;
-                    labelEntityDataSource.show = event.currentTarget.checked;
-                })
-
-                viewer.zoomTo(ds)
-            })
-
-            // var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
-            // measureLineSpace(viewer, handler);
-        </script>
-    </fb:script>
-    <fb:layout>
-        <style>
-            @import url(${base}/static/CesiumUnminified/Widgets/widgets.css);
-            html, body, #cesiumContainer {
-                width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
-            }
-        </style>
-        <input type="checkbox" id="fg" value="佛冈" checked />佛冈
-        <div id="cesiumContainer"></div>
-    </fb:layout>
-</fb:ui>
-
-
-

+ 14 - 128
src/main/webapp/WEB-INF/jsp/page/zzjg.jsp

@@ -4,143 +4,25 @@
 <fb:ui src="base/main2">
     <fb:property name="title"></fb:property>
     <fb:script type="text/javascript" src='${base}/static/cesium/Cesium.js'></fb:script>
+    <fb:script type="text/javascript" src='${base}/static/package/zzjg.js'></fb:script>
     <fb:script type="text/javascript" src='http://api.tianditu.gov.cn/cdn/plugins/cesium/cesiumTdt.js'></fb:script>
     <fb:script type="text/javascript" src='http://api.tianditu.gov.cn/api?v=4.0&tk=e95115c454a663cd052d96019fd83840'></fb:script>
     <fb:css href="${base}/static/cesium/Widgets/widgets.css"></fb:css>
     <fb:script type="text/javascript">
         <script>
-
             layui.use([ 'tool', 'form', 'table'], function() {
-                var token = 'e95115c454a663cd052d96019fd83840';
-                // 服务域名
-                var tdtUrl = 'https://t{s}.tianditu.gov.cn/';
-                // 服务负载子域
-                var subdomains=['0','1','2','3','4','5','6','7'];
-
-                // cesium 初始化
-                var viewer = new Cesium.Map('cesiumContainer', {
-                    animation: false,
-                    vrButton: false, // VR模式
-                    sceneModePicker: false,
-                    baseLayerPicker: false,
-                    shouldAnimate: true,
-                    selectionIndicator:true,
-                    infoBox:true,
-                    homeButton: true
-                });
-
-                // 叠加影像服务
-                var imgMap = new Cesium.UrlTemplateImageryProvider({
-                    url: tdtUrl + 'DataServer?T=img_w&x={x}&y={y}&l={z}&tk=' + token,
-                    subdomains: subdomains,
-                    tilingScheme : new Cesium.WebMercatorTilingScheme(),
-                    maximumLevel : 18
-                });
-                viewer.imageryLayers.addImageryProvider(imgMap);
-
-
-                // 叠加地形服务
-                var terrainUrls = new Array();
-
-                for (var i = 0; i < subdomains.length; i++){
-                    var url = tdtUrl.replace('{s}', subdomains[i]) + 'mapservice/swdx?tk=' + token;
-                    terrainUrls.push(url);
+                //初始化天地图地图
+                let viewer = initTdt()
+                //初始化地块类型
+                initCityLand(viewer, "${geoserver}")
+                //初始化区划信息
+                initXzqh(viewer,"${geoserver}")
+                window.print111 = function(){
+                    console.log(viewer.scene.camera)
                 }
 
-                var provider = new Cesium.GeoTerrainProvider({
-                    urls: terrainUrls
-                });
-
-                viewer.terrainProvider = provider;
-
-                // 将三维球定位到中国
-                viewer.camera.flyTo({
-                    destination: Cesium.Cartesian3.fromDegrees(113.0978, 23.6697, 350000),
-                    orientation: {
-                        heading :  Cesium.Math.toRadians(348.4202942851978),
-                        pitch : Cesium.Math.toRadians(-89.74026687972041),
-                        roll : Cesium.Math.toRadians(0)
-                    },
-                    complete:function callback() {
-                        // 定位完成之后的回调函数
-                    }
-                });
-
-                // 叠加三维地名服务
-                var wtfs = new Cesium.GeoWTFS({
-                    viewer,
-                    subdomains:subdomains,
-                    metadata:{
-                        boundBox: {
-                            minX: -180,
-                            minY: -90,
-                            maxX: 180,
-                            maxY: 90
-                        },
-                        minLevel: 1,
-                        maxLevel: 20
-                    },
-                    aotuCollide: true, //是否开启避让
-                    collisionPadding: [5, 10, 8, 5], //开启避让时,标注碰撞增加内边距,上、右、下、左
-                    serverFirstStyle: true, //服务端样式优先
-                    labelGraphics: {
-                        font:"28px sans-serif",
-                        fontSize: 28,
-                        fillColor:Cesium.Color.WHITE,
-                        scale: 0.5,
-                        outlineColor:Cesium.Color.BLACK,
-                        outlineWidth: 5,
-                        style:Cesium.LabelStyle.FILL_AND_OUTLINE,
-                        showBackground:false,
-                        backgroundColor:Cesium.Color.RED,
-                        backgroundPadding:new Cesium.Cartesian2(10, 10),
-                        horizontalOrigin:Cesium.HorizontalOrigin.MIDDLE,
-                        verticalOrigin:Cesium.VerticalOrigin.TOP,
-                        eyeOffset:Cesium.Cartesian3.ZERO,
-                        pixelOffset:new Cesium.Cartesian2(0, 8)
-                    },
-                    billboardGraphics: {
-                        horizontalOrigin:Cesium.HorizontalOrigin.CENTER,
-                        verticalOrigin:Cesium.VerticalOrigin.CENTER,
-                        eyeOffset:Cesium.Cartesian3.ZERO,
-                        pixelOffset:Cesium.Cartesian2.ZERO,
-                        alignedAxis:Cesium.Cartesian3.ZERO,
-                        color:Cesium.Color.WHITE,
-                        rotation:0,
-                        scale:1,
-                        width:18,
-                        height:18
-                    }
-                });
-
-                //三维地名服务,使用wtfs服务
-                wtfs.getTileUrl = function(){
-                    return tdtUrl + 'mapservice/GetTiles?lxys={z},{x},{y}&tk='+ token;
-                }
-
-                wtfs.initTDT([{"x":6,"y":1,"level":2,"boundBox":{"minX":90,"minY":0,"maxX":135,"maxY":45}},{"x":7,"y":1,"level":2,"boundBox":{"minX":135,"minY":0,"maxX":180,"maxY":45}},{"x":6,"y":0,"level":2,"boundBox":{"minX":90,"minY":45,"maxX":135,"maxY":90}},{"x":7,"y":0,"level":2,"boundBox":{"minX":135,"minY":45,"maxX":180,"maxY":90}},{"x":5,"y":1,"level":2,"boundBox":{"minX":45,"minY":0,"maxX":90,"maxY":45}},{"x":4,"y":1,"level":2,"boundBox":{"minX":0,"minY":0,"maxX":45,"maxY":45}},{"x":5,"y":0,"level":2,"boundBox":{"minX":45,"minY":45,"maxX":90,"maxY":90}},{"x":4,"y":0,"level":2,"boundBox":{"minX":0,"minY":45,"maxX":45,"maxY":90}},{"x":6,"y":2,"level":2,"boundBox":{"minX":90,"minY":-45,"maxX":135,"maxY":0}},{"x":6,"y":3,"level":2,"boundBox":{"minX":90,"minY":-90,"maxX":135,"maxY":-45}},{"x":7,"y":2,"level":2,"boundBox":{"minX":135,"minY":-45,"maxX":180,"maxY":0}},{"x":5,"y":2,"level":2,"boundBox":{"minX":45,"minY":-45,"maxX":90,"maxY":0}},{"x":4,"y":2,"level":2,"boundBox":{"minX":0,"minY":-45,"maxX":45,"maxY":0}},{"x":3,"y":1,"level":2,"boundBox":{"minX":-45,"minY":0,"maxX":0,"maxY":45}},{"x":3,"y":0,"level":2,"boundBox":{"minX":-45,"minY":45,"maxX":0,"maxY":90}},{"x":2,"y":0,"level":2,"boundBox":{"minX":-90,"minY":45,"maxX":-45,"maxY":90}},{"x":0,"y":1,"level":2,"boundBox":{"minX":-180,"minY":0,"maxX":-135,"maxY":45}},{"x":1,"y":0,"level":2,"boundBox":{"minX":-135,"minY":45,"maxX":-90,"maxY":90}},{"x":0,"y":0,"level":2,"boundBox":{"minX":-180,"minY":45,"maxX":-135,"maxY":90}}]);
-
-
-                // 叠加广东地块服务
-                var gridsetName = 'EPSG:3857';
-                var gridNames = [];
-                for(let i=0;i<=30;i++){
-                    gridNames.push(i)
-                }
-                var iboMap = new Cesium.WebMapTileServiceImageryProvider({
-                    url : '${geoserver}/gwc/service/wmts/rest/wuhan:gdcityland30/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
-                    layer:'wuhan:gdcityland30',
-                    format: "image/png",
-                    style:'',
-                    maximumLevel: gridNames.length,
-                    tileMatrixSetID:gridsetName,
-                    tileMatrixLabels:gridNames,
-                    tilingScheme:new Cesium.WebMercatorTilingScheme()
-                });
-                viewer.imageryLayers.addImageryProvider(iboMap);
-
-
             })
+
         </script>
     </fb:script>
     <fb:layout>
@@ -148,8 +30,12 @@
             html, body, #cesiumContainer {
                 width: 100%; height: 100%; margin: 0; padding: 0; overflow: hidden;
             }
+            .modelTag{
+                padding: 5px;
+            }
         </style>
         <div id="cesiumContainer"></div>
+        <div id="tagDiv"></div>
     </fb:layout>
 </fb:ui>
 

+ 12 - 0
src/main/webapp/static/css/admin2.css

@@ -53,6 +53,16 @@
     overflow: hidden;
 }
 
+.gray-shade{
+    position: absolute;
+    top: 0px;
+    bottom: 0px;
+    left: 0px;
+    right: 0px;
+    z-index: 1;
+    background-color: #c0c1c250;
+}
+
 .head-box{
     position: absolute;
     top: 0px;
@@ -168,6 +178,8 @@
     flex-direction: column-reverse;
 }
 
+
+
 .coord-box{
     color: whitesmoke;
     font-size: 14px;

+ 16 - 3
src/main/webapp/static/js/tools/openLayers.js

@@ -82,6 +82,7 @@ function Popup(option){
     this.buttons = option.buttons || []
     this.listener = option.listener || {}
     this.map = option.map;
+    this.ext = {}
     this.closer.onclick = function(){
         that._close()
     };
@@ -112,21 +113,33 @@ Popup.prototype = {
         return html;
     },
     initClick(){
+        let that = this
         let i = 1;
         for(let o of this.buttons){
             if(o.click){
                 let but =document.getElementById(this.name+"_but_"+i);
-                but.onclick = this.listener[o.click]
+                but.onclick = function(event) {
+                    that.listener[o.click](that, event, that.ext)
+                }
             }
             i++
         }
     },
-    show(coordinate, html){
+    show(coordinate, html, ext){
         this.overlay.setPosition(coordinate);
+        this.ext = ext || {}
+        this.flashHtml(html)
+
+    },
+    showOrHide(status){
+        this.container.style.display = status ? 'block' : 'none';
+    },
+    flashHtml(html){
         this.content.innerHTML = html;
         this.container.style.display = 'block';
         this.map.renderSync();
-    },
+    }
+    ,
     _close() {
         this.container.style.display = 'none';
         this.closer.blur();

+ 103 - 16
src/main/webapp/static/package/cityland.js

@@ -20,13 +20,19 @@ CityLandAction.prototype = {
         this.popup = new Popup({map: this.context.currentMap,
             close(){
                 that.tempVectorLayer.getSource().clear()
+                that.clickLock = false
             },
             buttons:[
-                {"name":"详细信息", "click":"info"},{"name":"test"},{"name":"test"}
+                {"name":"发布任务","click":"pubTask"}
             ],
             listener: {
                 info(){
                     window.location = "/field_point/info"
+                },
+                pubTask(popup, event, ext){
+                    that.context.currentView.fit(ext.getGeometry(),{duration:1000})
+                    popup.flashHtml(that.getPubTaskHtml(ext))
+                    that.initSelectPoint(ext)
                 }
             }
         });
@@ -80,7 +86,11 @@ CityLandAction.prototype = {
                 }
                 that.tempVectorLayer.getSource().clear()
                 that.tempVectorLayer.getSource().addFeature(feature)
-                that.popup.show(ol.extent.getCenter(feature.getGeometry().getExtent()), that.getInfoHtml(feature))
+                let fieldPoints = res.data.fieldPoints;
+                for(let fieldPoint of fieldPoints){
+                    that.addFieldPointOfTempLayer(fieldPoint)
+                }
+                that.popup.show(ol.extent.getCenter(feature.getGeometry().getExtent()), that.getInfoHtml(feature), feature)
             }catch (e){
                 console.log(e)
             }finally {
@@ -90,24 +100,62 @@ CityLandAction.prototype = {
         },function(){
             that.clickLock = false
         })
-    },loadTempVectorLayer(){
-        let map = this.context.currentMap
-        const selectedCountry = new ol.style.Style({
-            stroke: new ol.style.Stroke({
-                color: 'rgba(200,20,20,0.8)',
-                width: 2,
-            }),
-            fill: new ol.style.Fill({
-                color: 'rgba(200,20,20,0.4)',
+    },
+    addFieldPointOfTempLayer(fieldPoint){
+        let pointGem = this.context.wkt.readGeometry(fieldPoint.wkt)
+        let point = new ol.Feature({
+            geometry: pointGem
+        });
+        point.set("isPoint",1)
+        point.set("id",fieldPoint.id)
+        let source = this.tempVectorLayer.getSource();
+        source.addFeature(point)
+    },
+    selectedCountry(f){
+        let stroke = new ol.style.Stroke({
+            color: 'rgba(200,20,20,0.8)',
+            width: 2,
+        })
+        let fill = new ol.style.Fill({
+            color: 'rgba(200,20,20,0.4)',
+        })
+        const style1 = new ol.style.Style({
+            stroke: stroke,
+            fill: fill
+        });
+        const style2 = new ol.style.Style({
+            text:new ol.style.Text({
+                text:f.get("id"),
+                stroke: new ol.style.Stroke({
+                    color: 'rgba(239,236,236)',
+                    width: 1,
+                }),
+                fill: new ol.style.Fill({
+                    color: 'rgba(239,236,236)',
+                }),
+                font:"16px sans-serif"
             }),
+            image: new ol.style.RegularShape({
+                stroke: new ol.style.Stroke({
+                    color: 'rgb(7,31,250)',
+                    width: 2,
+                }),
+                fill: new ol.style.Fill({
+                    color: 'rgb(7,72,238)',
+                }),
+                radius: 15,
+                points:20,
+                angle: 0
+            })
         });
-
+        return f.get("isPoint") ? style2 : style1
+    }
+    ,loadTempVectorLayer(){
+        let map = this.context.currentMap
         return new ol.layer.Vector({
             map: map,
             source: new ol.source.Vector(),
-            style: function () {
-                return selectedCountry;
-            },
+            style: this.selectedCountry,
         });
     },
     landType:{
@@ -130,6 +178,45 @@ CityLandAction.prototype = {
             html += "<div class='layui-row'><div class='lab' >"+key+"</div><div class='val' >"+data[key]+"</div></div>"
         }
         return html
+    },getPubTaskHtml(feature){
+        let html = this.getInfoHtml(feature)
+        html += "<div class='layui-row'><div class='lab' >位置信息</div><div class='val' ><a id='selectPoint' href='#' style='color: white'>点击选取</a>:<input readonly style='width:150px' id='point'  /></div></div>"
+        html += "<div><button class='button' id='saveTask'>保存</button></div>"
+        return html;
+    },
+    initSelectPoint(feature){
+        let that = this
+        $("#selectPoint").on("click", function(){that.selectPoint(that)})
+        $("#saveTask").on("click",function(){
+            that.saveTask(that, feature)
+        })
+        this.clickLock = true
+    },
+    selectPoint(that){
+        document.body.style.cursor = "crosshair";
+        that.popup.showOrHide(false)
+        this.context.clicks["selectPoint"] = {
+            click(event, action){
+                $("#point").val(event.coordinate[0].toFixed(7)+","+event.coordinate[1].toFixed(7))
+                that.context.clicks["selectPoint"] = undefined
+                document.body.style.cursor = "default";
+                that.popup.showOrHide(true)
+            }
+        }
+    },
+    saveTask(that, feature){
+        let wkt = $("#point").val()
+        if(wkt.indexOf(",") < 0){
+            layui.notice.error("请先选择点!");
+            return;
+        }
+        wkt = wkt.split(",")
+        wkt = "POINT ("+wkt[0]+" "+wkt[1]+")"
+        layui.tool.submit("/field_point/save",{"wkt":wkt,"landId":feature.get("id")},function(res){
+            if(res.code == 0){
+                that.addFieldPointOfTempLayer(res.data)
+            }
+        })
     }
 
 }
@@ -200,7 +287,7 @@ CityLand.prototype = {
             source: this.layerData.source,
             zIndex: 2,
             minZoom: 7,
-            maxZoom: 14
+            maxZoom: 15
         });
     }
 }

+ 6 - 2
src/main/webapp/static/package/qyz.js

@@ -97,7 +97,11 @@ function Qyz(opt){
 Qyz.prototype = {
     getTileLayer(){
         let url = this.wmsData.url +
-            "?service=WFS&version=1.0.0&request=GetFeature&typeName="+this.wmsData.layers+"&maxFeatures=50&outputFormat=application/json"
+            "?service=WFS&version=1.0.0&request=GetFeature&typeName="+this.wmsData.layers+"&maxFeatures=1000&outputFormat=application/json"
+        url+="&Filter=(<Filter>" +
+            "<ogc:PropertyIsLike wildCard=\"*\" singleChar=\".\" escape=\"!\" xmlns:ogc=\"http://www.opengis.net/ogc\" ><ogc:PropertyName>pac</ogc:PropertyName>" +
+            "<ogc:Literal>441821*</ogc:Literal></ogc:PropertyIsLike></Filter>)"
+        console.log(url)
         let myGeoJsonLayer = new MyGeoJsonLayer({url: url, zIndex:2, style: this.style()})
         this.layerData.layer = myGeoJsonLayer.vector;
     },style(){
@@ -118,7 +122,7 @@ Qyz.prototype = {
                 width: 1,
             }),
             fill: new ol.style.Fill({
-                color: 'rgba(200,20,20,0.0)',
+                color: 'rgba(200,20,20,0.1)',
             })
         });
     }

+ 223 - 0
src/main/webapp/static/package/zzjg.js

@@ -0,0 +1,223 @@
+function initTdt(){
+    var token = 'e95115c454a663cd052d96019fd83840';
+    // 服务域名
+    var tdtUrl = 'https://t{s}.tianditu.gov.cn/';
+    // 服务负载子域
+    var subdomains=['0','1','2','3','4','5','6','7'];
+
+    // cesium 初始化
+    var viewer = new Cesium.Map('cesiumContainer', {
+        animation: false,
+        vrButton: false, // VR模式
+        sceneModePicker: false,
+        baseLayerPicker: false,
+        shouldAnimate: true,
+        selectionIndicator:true,
+        infoBox:true,
+        homeButton: true
+    });
+
+    // 叠加影像服务
+    var imgMap = new Cesium.UrlTemplateImageryProvider({
+        url: tdtUrl + 'DataServer?T=img_w&x={x}&y={y}&l={z}&tk=' + token,
+        subdomains: subdomains,
+        tilingScheme : new Cesium.WebMercatorTilingScheme(),
+        maximumLevel : 18
+    });
+    viewer.imageryLayers.addImageryProvider(imgMap);
+
+    // 叠加地形服务
+    var terrainUrls = new Array();
+
+    for (var i = 0; i < subdomains.length; i++){
+        var url = tdtUrl.replace('{s}', subdomains[i]) + 'mapservice/swdx?tk=' + token;
+        terrainUrls.push(url);
+    }
+
+    var provider = new Cesium.GeoTerrainProvider({
+        urls: terrainUrls
+    });
+
+    viewer.terrainProvider = provider;
+
+    // 叠加三维地名服务
+    var wtfs = new Cesium.GeoWTFS({
+        viewer,
+        subdomains:subdomains,
+        metadata:{
+            boundBox: {
+                minX: -180,
+                minY: -90,
+                maxX: 180,
+                maxY: 90
+            },
+            minLevel: 1,
+            maxLevel: 20
+        },
+        aotuCollide: true, //是否开启避让
+        collisionPadding: [5, 10, 8, 5], //开启避让时,标注碰撞增加内边距,上、右、下、左
+        serverFirstStyle: true, //服务端样式优先
+        labelGraphics: {
+            font:"28px sans-serif",
+            fontSize: 28,
+            fillColor:Cesium.Color.WHITE,
+            scale: 0.5,
+            outlineColor:Cesium.Color.BLACK,
+            outlineWidth: 5,
+            style:Cesium.LabelStyle.FILL_AND_OUTLINE,
+            showBackground:false,
+            backgroundColor:Cesium.Color.RED,
+            backgroundPadding:new Cesium.Cartesian2(10, 10),
+            horizontalOrigin:Cesium.HorizontalOrigin.MIDDLE,
+            verticalOrigin:Cesium.VerticalOrigin.TOP,
+            eyeOffset:Cesium.Cartesian3.ZERO,
+            pixelOffset:new Cesium.Cartesian2(0, 8)
+        },
+        billboardGraphics: {
+            horizontalOrigin:Cesium.HorizontalOrigin.CENTER,
+            verticalOrigin:Cesium.VerticalOrigin.CENTER,
+            eyeOffset:Cesium.Cartesian3.ZERO,
+            pixelOffset:Cesium.Cartesian2.ZERO,
+            alignedAxis:Cesium.Cartesian3.ZERO,
+            color:Cesium.Color.WHITE,
+            rotation:0,
+            scale:1,
+            width:18,
+            height:18
+        }
+    });
+
+    //三维地名服务,使用wtfs服务
+    wtfs.getTileUrl = function(){
+        return tdtUrl + 'mapservice/GetTiles?lxys={z},{x},{y}&tk='+ token;
+    }
+    wtfs.initTDT([{"x":6,"y":1,"level":2,"boundBox":{"minX":90,"minY":0,"maxX":135,"maxY":45}},{"x":7,"y":1,"level":2,"boundBox":{"minX":135,"minY":0,"maxX":180,"maxY":45}},{"x":6,"y":0,"level":2,"boundBox":{"minX":90,"minY":45,"maxX":135,"maxY":90}},{"x":7,"y":0,"level":2,"boundBox":{"minX":135,"minY":45,"maxX":180,"maxY":90}},{"x":5,"y":1,"level":2,"boundBox":{"minX":45,"minY":0,"maxX":90,"maxY":45}},{"x":4,"y":1,"level":2,"boundBox":{"minX":0,"minY":0,"maxX":45,"maxY":45}},{"x":5,"y":0,"level":2,"boundBox":{"minX":45,"minY":45,"maxX":90,"maxY":90}},{"x":4,"y":0,"level":2,"boundBox":{"minX":0,"minY":45,"maxX":45,"maxY":90}},{"x":6,"y":2,"level":2,"boundBox":{"minX":90,"minY":-45,"maxX":135,"maxY":0}},{"x":6,"y":3,"level":2,"boundBox":{"minX":90,"minY":-90,"maxX":135,"maxY":-45}},{"x":7,"y":2,"level":2,"boundBox":{"minX":135,"minY":-45,"maxX":180,"maxY":0}},{"x":5,"y":2,"level":2,"boundBox":{"minX":45,"minY":-45,"maxX":90,"maxY":0}},{"x":4,"y":2,"level":2,"boundBox":{"minX":0,"minY":-45,"maxX":45,"maxY":0}},{"x":3,"y":1,"level":2,"boundBox":{"minX":-45,"minY":0,"maxX":0,"maxY":45}},{"x":3,"y":0,"level":2,"boundBox":{"minX":-45,"minY":45,"maxX":0,"maxY":90}},{"x":2,"y":0,"level":2,"boundBox":{"minX":-90,"minY":45,"maxX":-45,"maxY":90}},{"x":0,"y":1,"level":2,"boundBox":{"minX":-180,"minY":0,"maxX":-135,"maxY":45}},{"x":1,"y":0,"level":2,"boundBox":{"minX":-135,"minY":45,"maxX":-90,"maxY":90}},{"x":0,"y":0,"level":2,"boundBox":{"minX":-180,"minY":45,"maxX":-135,"maxY":90}}]);
+    return viewer;
+}
+
+function initCityLand(viewer, geoserver){
+// 叠加广东地块服务
+    var gridsetName = 'EPSG:3857';
+    var gridNames = [];
+    for(let i=0;i<=30;i++){
+        gridNames.push(i)
+    }
+    var iboMap = new Cesium.WebMapTileServiceImageryProvider({
+        url : geoserver+'/gwc/service/wmts/rest/wuhan:gdcityland30/{style}/{TileMatrixSet}/{TileMatrix}/{TileRow}/{TileCol}?format=image/png',
+        layer:'wuhan:gdcityland30',
+        format: "image/png",
+        style:'',
+        maximumLevel: gridNames.length,
+        tileMatrixSetID:gridsetName,
+        tileMatrixLabels:gridNames,
+        tilingScheme:new Cesium.WebMercatorTilingScheme()
+    });
+    // viewer.imageryLayers.addImageryProvider(iboMap);
+}
+
+function createCanvas(content, id, color){
+    var conLen = content.length;
+    var div = document.getElementById('tagDiv');
+    var canvas = document.createElement('canvas');
+    canvas.id = id;
+    canvas.className="modelTag";
+    div.appendChild(canvas);
+    let width = 130
+    let height = 34
+    let h2 = (height - 4) / 2
+
+    canvas.width = width; //
+    canvas.height = height + 5;
+    var c = document.getElementById(id);
+    var cxt = c.getContext("2d");
+    cxt.strokeStyle = color;
+    cxt.lineWidth = cxt.lineWidth+1
+    cxt.beginPath();
+    cxt.moveTo(h2 + 5, 2);
+    cxt.arc(h2 + 5, h2 + 2, h2, -Math.PI / 2, Math.PI / 2, true);
+
+    cxt.lineTo(width / 2 - 5, height - 2);
+    cxt.lineTo(width / 2, height - 2 + 5);
+    cxt.lineTo(width / 2 + 5, height - 2);
+
+    cxt.lineTo(width - 5 - h2 + 2, height - 2);
+
+    cxt.arc(width - 5 - h2, h2 + 2, h2, Math.PI / 2, -Math.PI / 2, true);
+    cxt.lineTo(h2 + 5, 2);
+    cxt.stroke();
+    cxt.font="14px Arial";
+    cxt.fillStyle=color;
+    let textCenter = (14 * conLen) / 2
+    cxt.fillText(content, width / 2 - textCenter, (height / 2) + (14 / 2));
+    return canvas;
+}
+
+
+function initXzqh(viewer, geoserver){
+    var silhouetteBlue = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();
+    silhouetteBlue.uniforms.color = Cesium.Color.BLUE;
+    silhouetteBlue.uniforms.length = 2;
+    silhouetteBlue.selected = [];
+
+    var silhouetteGreen = Cesium.PostProcessStageLibrary.createEdgeDetectionStage();
+    silhouetteGreen.uniforms.color = Cesium.Color.LIME;
+    silhouetteGreen.uniforms.length = 2;
+    silhouetteGreen.selected = [];
+    viewer.scene.postProcessStages.add(Cesium.PostProcessStageLibrary.createSilhouetteStage([silhouetteBlue, silhouetteGreen]));
+    let flag = false
+
+    let tool = layui.tool
+    let geoJsonUrl = geoserver + "/wuhan/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=wuhan:qy-z&maxFeatures=1000&outputFormat=application/json"
+    geoJsonUrl += "&Filter=(<Filter><ogc:PropertyIsLike wildCard='*' singleChar='.' escape='!' xmlns:ogc='http://www.opengis.net/ogc' >" +
+        "<ogc:PropertyName>pac</ogc:PropertyName><ogc:Literal>441821*</ogc:Literal></ogc:PropertyIsLike></Filter>)"
+    console.log(geoJsonUrl)
+    tool.get(geoJsonUrl, function(data){
+        let res = Cesium.GeoJsonDataSource.load(data,{
+            stroke: Cesium.Color.fromAlpha(Cesium.Color.WHITE, 1),
+            fill: Cesium.Color.fromAlpha(Cesium.Color.WHITE, 0.01),
+            strokeWidth: 1,
+            markerSymbol: '?'
+        })
+        const promise = viewer.dataSources.add(res)
+        viewer.dataSources.add(promise);   // 加载这个geojson资源
+        promise.then((datasource) => {
+            const entities = datasource.entities.values;
+            for (let index = 0; index < entities.length; index++) {
+                const entity = entities[index];
+                entity.polygon.heightReference = Cesium.HeightReference.RELATIVE_TO_GROUND;  // 贴地
+                entity.polygon.height = 0;  // 距地高度0米
+                entity.polygon.extrudedHeightReference =Cesium.HeightReference.RELATIVE_TO_GROUND; //拉伸
+                // entity.polygon.extrudedHeight = 800; // 拉伸高度
+                let now = Cesium.JulianDate.now()
+                let name = entity.properties.name.getValue(now)
+                let id = entity.properties.objectid.getValue(now)
+                let polyPositions = entity.polygon.hierarchy.getValue(now).positions;
+                let polyCenter = Cesium.BoundingSphere.fromPoints(polyPositions).center;//中心点
+                viewer.entities.add({
+                    position:polyCenter,
+                    billboard:{
+                        image: createCanvas(name,"tag_"+id,"WHITE"),
+                        width: 130, // default: undefined
+                        height: 34, // default: undefined
+                    }
+                });
+            }
+            viewer.flyTo(datasource)
+        });
+
+        viewer.screenSpaceEventHandler.setInputAction(function(movement) {
+            let pickedFeature = viewer.scene.pick(movement.endPosition);
+            if(Cesium.defined(pickedFeature)) {
+                pickedFeature = pickedFeature.id;
+                if (silhouetteBlue.selected[0] && silhouetteBlue.selected[0]._id === pickedFeature._id) {
+                    return;
+                } else {
+                    silhouetteBlue.selected = [pickedFeature];
+                }
+            }
+        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);
+
+
+
+    })
+}