commit 2d695bcbb71859869863c5fcaf926091cccdc863
Author: zzl <961867786@qq.com>
Date: Thu May 20 08:47:59 2021 +0800
初始化
diff --git a/.idea/$PROJECT_FILE$ b/.idea/$PROJECT_FILE$
new file mode 100644
index 0000000..58b7e3e
--- /dev/null
+++ b/.idea/$PROJECT_FILE$
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..5c98b42
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,2 @@
+# Default ignored files
+/workspace.xml
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..2a2fcd4
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+springbootshaper
\ No newline at end of file
diff --git a/.idea/artifacts/gis_geotools_war.xml b/.idea/artifacts/gis_geotools_war.xml
new file mode 100644
index 0000000..1021d3c
--- /dev/null
+++ b/.idea/artifacts/gis_geotools_war.xml
@@ -0,0 +1,14 @@
+
+
+ $PROJECT_DIR$/target
+
+
+ gis_geotools
+ war
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/gis_geotools_war_exploded.xml b/.idea/artifacts/gis_geotools_war_exploded.xml
new file mode 100644
index 0000000..36aad06
--- /dev/null
+++ b/.idea/artifacts/gis_geotools_war_exploded.xml
@@ -0,0 +1,146 @@
+
+
+ $PROJECT_DIR$/target/gis_geotools-0.1.1-SNAPSHOT
+
+
+ true
+ gis_geotools
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/springbootshaper_war.xml b/.idea/artifacts/springbootshaper_war.xml
new file mode 100644
index 0000000..4429093
--- /dev/null
+++ b/.idea/artifacts/springbootshaper_war.xml
@@ -0,0 +1,14 @@
+
+
+ $PROJECT_DIR$/target
+
+
+ springbootshaper
+ war
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/artifacts/springbootshaper_war_exploded.xml b/.idea/artifacts/springbootshaper_war_exploded.xml
new file mode 100644
index 0000000..53b9a41
--- /dev/null
+++ b/.idea/artifacts/springbootshaper_war_exploded.xml
@@ -0,0 +1,146 @@
+
+
+ $PROJECT_DIR$/target/gis_geotools-0.1.1-SNAPSHOT
+
+
+ true
+ springbootshaper
+ war
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..bc969b0
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..f86397b
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
new file mode 100644
index 0000000..6fec8f4
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
new file mode 100644
index 0000000..9eb8596
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_alibaba_fastjson_1_2_74.xml b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_74.xml
new file mode 100644
index 0000000..d3dbd7e
--- /dev/null
+++ b/.idea/libraries/Maven__com_alibaba_fastjson_1_2_74.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_conversantmedia_disruptor_1_2_13.xml b/.idea/libraries/Maven__com_conversantmedia_disruptor_1_2_13.xml
new file mode 100644
index 0000000..bdf000e
--- /dev/null
+++ b/.idea/libraries/Maven__com_conversantmedia_disruptor_1_2_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml
new file mode 100644
index 0000000..bbd3a88
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml
new file mode 100644
index 0000000..6447563
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_2.xml
new file mode 100644
index 0000000..4923956
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml
new file mode 100644
index 0000000..bb59715
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_2.xml
new file mode 100644
index 0000000..c22af69
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml
new file mode 100644
index 0000000..dd6fb59
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_2.xml
new file mode 100644
index 0000000..22aba0a
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml
new file mode 100644
index 0000000..1c380d0
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml
new file mode 100644
index 0000000..2343a7f
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_25_1_jre.xml b/.idea/libraries/Maven__com_google_guava_guava_25_1_jre.xml
new file mode 100644
index 0000000..9d28def
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_guava_guava_25_1_jre.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml
new file mode 100644
index 0000000..c06f999
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1.xml
new file mode 100644
index 0000000..ea70fe1
--- /dev/null
+++ b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
new file mode 100644
index 0000000..f19f6eb
--- /dev/null
+++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_4_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_miglayout_miglayout_swing_3_7.xml b/.idea/libraries/Maven__com_miglayout_miglayout_swing_3_7.xml
new file mode 100644
index 0000000..64bb065
--- /dev/null
+++ b/.idea/libraries/Maven__com_miglayout_miglayout_swing_3_7.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
new file mode 100644
index 0000000..b8581a6
--- /dev/null
+++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml
new file mode 100644
index 0000000..13afda2
--- /dev/null
+++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml b/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml
new file mode 100644
index 0000000..49c39ce
--- /dev/null
+++ b/.idea/libraries/Maven__commons_dbcp_commons_dbcp_1_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_6.xml b/.idea/libraries/Maven__commons_io_commons_io_2_6.xml
new file mode 100644
index 0000000..d722698
--- /dev/null
+++ b/.idea/libraries/Maven__commons_io_commons_io_2_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml b/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
new file mode 100644
index 0000000..8393648
--- /dev/null
+++ b/.idea/libraries/Maven__commons_pool_commons_pool_1_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_geocore_1_1_25.xml b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_geocore_1_1_25.xml
new file mode 100644
index 0000000..fe1fae5
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_geocore_1_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_streams_1_1_25.xml b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_streams_1_1_25.xml
new file mode 100644
index 0000000..6b543f2
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_streams_1_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_tiff_1_1_25.xml b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_tiff_1_1_25.xml
new file mode 100644
index 0000000..e09b99e
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_tiff_1_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_utilities_1_1_25.xml b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_utilities_1_1_25.xml
new file mode 100644
index 0000000..8958bf6
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_imageio_ext_imageio_ext_utilities_1_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_affine_jt_affine_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_affine_jt_affine_1_1_1.xml
new file mode 100644
index 0000000..fee267b
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_affine_jt_affine_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_algebra_jt_algebra_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_algebra_jt_algebra_1_1_1.xml
new file mode 100644
index 0000000..c19554e
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_algebra_jt_algebra_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_bandcombine_jt_bandcombine_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_bandcombine_jt_bandcombine_1_1_1.xml
new file mode 100644
index 0000000..22c5665
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_bandcombine_jt_bandcombine_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_bandmerge_jt_bandmerge_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_bandmerge_jt_bandmerge_1_1_1.xml
new file mode 100644
index 0000000..60fbb9e
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_bandmerge_jt_bandmerge_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_bandselect_jt_bandselect_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_bandselect_jt_bandselect_1_1_1.xml
new file mode 100644
index 0000000..5ab8020
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_bandselect_jt_bandselect_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_binarize_jt_binarize_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_binarize_jt_binarize_1_1_1.xml
new file mode 100644
index 0000000..3ff7f52
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_binarize_jt_binarize_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_border_jt_border_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_border_jt_border_1_1_1.xml
new file mode 100644
index 0000000..cc3d12b
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_border_jt_border_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_buffer_jt_buffer_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_buffer_jt_buffer_1_1_1.xml
new file mode 100644
index 0000000..e6d7c81
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_buffer_jt_buffer_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_classifier_jt_classifier_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_classifier_jt_classifier_1_1_1.xml
new file mode 100644
index 0000000..41c8855
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_classifier_jt_classifier_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_colorconvert_jt_colorconvert_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_colorconvert_jt_colorconvert_1_1_1.xml
new file mode 100644
index 0000000..c9f8bb4
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_colorconvert_jt_colorconvert_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_colorindexer_jt_colorindexer_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_colorindexer_jt_colorindexer_1_1_1.xml
new file mode 100644
index 0000000..54f6090
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_colorindexer_jt_colorindexer_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_crop_jt_crop_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_crop_jt_crop_1_1_1.xml
new file mode 100644
index 0000000..08f1afb
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_crop_jt_crop_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_errordiffusion_jt_errordiffusion_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_errordiffusion_jt_errordiffusion_1_1_1.xml
new file mode 100644
index 0000000..d5e2696
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_errordiffusion_jt_errordiffusion_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_format_jt_format_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_format_jt_format_1_1_1.xml
new file mode 100644
index 0000000..3e5ca19
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_format_jt_format_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_imagefunction_jt_imagefunction_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_imagefunction_jt_imagefunction_1_1_1.xml
new file mode 100644
index 0000000..d7cc095
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_imagefunction_jt_imagefunction_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_iterators_jt_iterators_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_iterators_jt_iterators_1_1_1.xml
new file mode 100644
index 0000000..6aaf1c2
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_iterators_jt_iterators_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_lookup_jt_lookup_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_lookup_jt_lookup_1_1_1.xml
new file mode 100644
index 0000000..7ef01c6
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_lookup_jt_lookup_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_mosaic_jt_mosaic_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_mosaic_jt_mosaic_1_1_1.xml
new file mode 100644
index 0000000..95e3c06
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_mosaic_jt_mosaic_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_nullop_jt_nullop_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_nullop_jt_nullop_1_1_1.xml
new file mode 100644
index 0000000..3cac309
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_nullop_jt_nullop_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_orderdither_jt_orderdither_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_orderdither_jt_orderdither_1_1_1.xml
new file mode 100644
index 0000000..e0945e1
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_orderdither_jt_orderdither_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_piecewise_jt_piecewise_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_piecewise_jt_piecewise_1_1_1.xml
new file mode 100644
index 0000000..1c5e5e3
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_piecewise_jt_piecewise_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_rescale_jt_rescale_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_rescale_jt_rescale_1_1_1.xml
new file mode 100644
index 0000000..624f59b
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_rescale_jt_rescale_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_rlookup_jt_rlookup_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_rlookup_jt_rlookup_1_1_1.xml
new file mode 100644
index 0000000..27861bb
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_rlookup_jt_rlookup_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_scale2_jt_scale2_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_scale2_jt_scale2_1_1_1.xml
new file mode 100644
index 0000000..8eff0bb
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_scale2_jt_scale2_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_scale_jt_scale_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_scale_jt_scale_1_1_1.xml
new file mode 100644
index 0000000..8a10f37
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_scale_jt_scale_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_shadedrelief_jt_shadedrelief_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_shadedrelief_jt_shadedrelief_1_1_1.xml
new file mode 100644
index 0000000..e898f77
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_shadedrelief_jt_shadedrelief_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_stats_jt_stats_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_stats_jt_stats_1_1_1.xml
new file mode 100644
index 0000000..5d45a0d
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_stats_jt_stats_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_translate_jt_translate_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_translate_jt_translate_1_1_1.xml
new file mode 100644
index 0000000..94fdc48
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_translate_jt_translate_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_utilities_jt_utilities_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_utilities_jt_utilities_1_1_1.xml
new file mode 100644
index 0000000..c16a164
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_utilities_jt_utilities_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_vectorbin_jt_vectorbin_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_vectorbin_jt_vectorbin_1_1_1.xml
new file mode 100644
index 0000000..14b3205
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_vectorbin_jt_vectorbin_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_warp_jt_warp_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_warp_jt_warp_1_1_1.xml
new file mode 100644
index 0000000..3cc41b9
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_warp_jt_warp_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_geosolutions_jaiext_zonal_jt_zonal_1_1_1.xml b/.idea/libraries/Maven__it_geosolutions_jaiext_zonal_jt_zonal_1_1_1.xml
new file mode 100644
index 0000000..694e472
--- /dev/null
+++ b/.idea/libraries/Maven__it_geosolutions_jaiext_zonal_jt_zonal_1_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
new file mode 100644
index 0000000..e74f3ab
--- /dev/null
+++ b/.idea/libraries/Maven__javax_annotation_javax_annotation_api_1_3_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_measure_unit_api_1_0.xml b/.idea/libraries/Maven__javax_measure_unit_api_1_0.xml
new file mode 100644
index 0000000..096a37c
--- /dev/null
+++ b/.idea/libraries/Maven__javax_measure_unit_api_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_media_jai_codec_1_1_3.xml b/.idea/libraries/Maven__javax_media_jai_codec_1_1_3.xml
new file mode 100644
index 0000000..4341c63
--- /dev/null
+++ b/.idea/libraries/Maven__javax_media_jai_codec_1_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_media_jai_core_1_1_3.xml b/.idea/libraries/Maven__javax_media_jai_core_1_1_3.xml
new file mode 100644
index 0000000..d8609e8
--- /dev/null
+++ b/.idea/libraries/Maven__javax_media_jai_core_1_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_media_jai_imageio_1_1.xml b/.idea/libraries/Maven__javax_media_jai_imageio_1_1.xml
new file mode 100644
index 0000000..931d9cb
--- /dev/null
+++ b/.idea/libraries/Maven__javax_media_jai_imageio_1_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
new file mode 100644
index 0000000..6978c0b
--- /dev/null
+++ b/.idea/libraries/Maven__javax_validation_validation_api_2_0_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jgridshift_jgridshift_1_0.xml b/.idea/libraries/Maven__jgridshift_jgridshift_1_0.xml
new file mode 100644
index 0000000..b7ad97c
--- /dev/null
+++ b/.idea/libraries/Maven__jgridshift_jgridshift_1_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000..d411041
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_25.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_25.xml
new file mode 100644
index 0000000..4440a5f
--- /dev/null
+++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_25.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_12.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_12.xml
new file mode 100644
index 0000000..ec857e4
--- /dev/null
+++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_9_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_12.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_12.xml
new file mode 100644
index 0000000..767dbf7
--- /dev/null
+++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_9_12.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
new file mode 100644
index 0000000..b3d3858
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_accessors_smart_1_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
new file mode 100644
index 0000000..1083023
--- /dev/null
+++ b/.idea/libraries/Maven__net_minidev_json_smart_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sf_geographiclib_GeographicLib_Java_1_49.xml b/.idea/libraries/Maven__net_sf_geographiclib_GeographicLib_Java_1_49.xml
new file mode 100644
index 0000000..34bd9de
--- /dev/null
+++ b/.idea/libraries/Maven__net_sf_geographiclib_GeographicLib_Java_1_49.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml
new file mode 100644
index 0000000..33b78e9
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_8_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml
new file mode 100644
index 0000000..fe93f54
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml
new file mode 100644
index 0000000..889bf4f
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_11_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_17.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_17.xml
new file mode 100644
index 0000000..d311b9a
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_17.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_17.xml
new file mode 100644
index 0000000..735fed3
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_17.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_17.xml
new file mode 100644
index 0000000..9b8e69b
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_17.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml b/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml
new file mode 100644
index 0000000..4d16d46
--- /dev/null
+++ b/.idea/libraries/Maven__org_assertj_assertj_core_3_11_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_checkerframework_checker_qual_2_0_0.xml b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_0_0.xml
new file mode 100644
index 0000000..2cbbe64
--- /dev/null
+++ b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml
new file mode 100644
index 0000000..1af11e4
--- /dev/null
+++ b/.idea/libraries/Maven__org_codehaus_mojo_animal_sniffer_annotations_1_14.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ejml_ejml_core_0_34.xml b/.idea/libraries/Maven__org_ejml_ejml_core_0_34.xml
new file mode 100644
index 0000000..2ca0399
--- /dev/null
+++ b/.idea/libraries/Maven__org_ejml_ejml_core_0_34.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ejml_ejml_ddense_0_34.xml b/.idea/libraries/Maven__org_ejml_ejml_ddense_0_34.xml
new file mode 100644
index 0000000..737819a
--- /dev/null
+++ b/.idea/libraries/Maven__org_ejml_ejml_ddense_0_34.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_api_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_api_20_0.xml
new file mode 100644
index 0000000..326e48e
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_api_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_coverage_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_coverage_20_0.xml
new file mode 100644
index 0000000..5f34337
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_coverage_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_cql_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_cql_20_0.xml
new file mode 100644
index 0000000..0a5d794
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_cql_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_data_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_data_20_0.xml
new file mode 100644
index 0000000..68f9d95
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_data_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_geojson_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_geojson_20_0.xml
new file mode 100644
index 0000000..60358e2
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_geojson_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_jdbc_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_jdbc_20_0.xml
new file mode 100644
index 0000000..412a461
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_jdbc_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_main_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_main_20_0.xml
new file mode 100644
index 0000000..313cf91
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_main_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_metadata_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_metadata_20_0.xml
new file mode 100644
index 0000000..d174b7f
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_metadata_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_opengis_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_opengis_20_0.xml
new file mode 100644
index 0000000..e270809
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_opengis_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_referencing_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_referencing_20_0.xml
new file mode 100644
index 0000000..42619a1
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_referencing_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_render_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_render_20_0.xml
new file mode 100644
index 0000000..d105829
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_render_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_shapefile_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_shapefile_20_0.xml
new file mode 100644
index 0000000..9d25ab6
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_shapefile_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_gt_swing_20_0.xml b/.idea/libraries/Maven__org_geotools_gt_swing_20_0.xml
new file mode 100644
index 0000000..3992fee
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_gt_swing_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_geotools_jdbc_gt_jdbc_mysql_20_0.xml b/.idea/libraries/Maven__org_geotools_jdbc_gt_jdbc_mysql_20_0.xml
new file mode 100644
index 0000000..35ba129
--- /dev/null
+++ b/.idea/libraries/Maven__org_geotools_jdbc_gt_jdbc_mysql_20_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000..f58bbc1
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
new file mode 100644
index 0000000..78dbe45
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_library_1_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml
new file mode 100644
index 0000000..1ca9936
--- /dev/null
+++ b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_0_16_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jaitools_jt_utils_1_5_0.xml b/.idea/libraries/Maven__org_jaitools_jt_utils_1_5_0.xml
new file mode 100644
index 0000000..4dd41bc
--- /dev/null
+++ b/.idea/libraries/Maven__org_jaitools_jt_utils_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jaitools_jt_zonalstats_1_5_0.xml b/.idea/libraries/Maven__org_jaitools_jt_zonalstats_1_5_0.xml
new file mode 100644
index 0000000..d99fc29
--- /dev/null
+++ b/.idea/libraries/Maven__org_jaitools_jt_zonalstats_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
new file mode 100644
index 0000000..5f7dd01
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_3_2_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml b/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml
new file mode 100644
index 0000000..020a02f
--- /dev/null
+++ b/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_locationtech_jts_jts_core_1_16_0.xml b/.idea/libraries/Maven__org_locationtech_jts_jts_core_1_16_0.xml
new file mode 100644
index 0000000..5654d1f
--- /dev/null
+++ b/.idea/libraries/Maven__org_locationtech_jts_jts_core_1_16_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml b/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml
new file mode 100644
index 0000000..159204f
--- /dev/null
+++ b/.idea/libraries/Maven__org_mockito_mockito_core_2_23_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
new file mode 100644
index 0000000..af41e3b
--- /dev/null
+++ b/.idea/libraries/Maven__org_objenesis_objenesis_2_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
new file mode 100644
index 0000000..0bf8cf2
--- /dev/null
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_5_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
new file mode 100644
index 0000000..c4c54d6
--- /dev/null
+++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_26.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_26.xml
new file mode 100644
index 0000000..087b2a4
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_26.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml
new file mode 100644
index 0000000..6545f77
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..cf900a4
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..1f7cd0d
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..093c9f8
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..f60fc74
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..b844df9
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..69a8086
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..23a762f
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..73a7558
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..d6a7d75
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_4_RELEASE.xml
new file mode 100644
index 0000000..ee6fc74
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_1_4_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..4c53933
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..9affe15
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..78eb291
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_context_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..143f040
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_core_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..279c319
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..b3e41fd
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_test_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_test_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..b189322
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_test_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..33dcd41
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_web_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_6_RELEASE.xml
new file mode 100644
index 0000000..ae260fa
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_1_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_2.xml b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_2.xml
new file mode 100644
index 0000000..9f44657
--- /dev/null
+++ b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_6_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml
new file mode 100644
index 0000000..7e63769
--- /dev/null
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_23.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__si_uom_si_quantity_0_7_1.xml b/.idea/libraries/Maven__si_uom_si_quantity_0_7_1.xml
new file mode 100644
index 0000000..3fb0117
--- /dev/null
+++ b/.idea/libraries/Maven__si_uom_si_quantity_0_7_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__si_uom_si_units_java8_0_7_1.xml b/.idea/libraries/Maven__si_uom_si_units_java8_0_7_1.xml
new file mode 100644
index 0000000..19afb9b
--- /dev/null
+++ b/.idea/libraries/Maven__si_uom_si_units_java8_0_7_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__systems_uom_systems_common_java8_0_7_2.xml b/.idea/libraries/Maven__systems_uom_systems_common_java8_0_7_2.xml
new file mode 100644
index 0000000..1c5c69b
--- /dev/null
+++ b/.idea/libraries/Maven__systems_uom_systems_common_java8_0_7_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__tec_uom_lib_uom_lib_common_1_0_2.xml b/.idea/libraries/Maven__tec_uom_lib_uom_lib_common_1_0_2.xml
new file mode 100644
index 0000000..78a93e7
--- /dev/null
+++ b/.idea/libraries/Maven__tec_uom_lib_uom_lib_common_1_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__tec_uom_uom_se_1_0_8.xml b/.idea/libraries/Maven__tec_uom_uom_se_1_0_8.xml
new file mode 100644
index 0000000..70fe3d0
--- /dev/null
+++ b/.idea/libraries/Maven__tec_uom_uom_se_1_0_8.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..75172d1
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..a44d8ea
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/qaplug_profiles.xml b/.idea/qaplug_profiles.xml
new file mode 100644
index 0000000..3dfd21f
--- /dev/null
+++ b/.idea/qaplug_profiles.xml
@@ -0,0 +1,465 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/gis_geotools.iml b/gis_geotools.iml
new file mode 100644
index 0000000..6d9eb79
--- /dev/null
+++ b/gis_geotools.iml
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..4a7ca39
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,188 @@
+
+
+
+ 4.0.0
+ com.appleyk
+ gis_geotools
+ 0.1.1-SNAPSHOT
+ war
+
+ gis_geotools
+ spring-boot集成geotools工具包,实现将几何对象写进Shapefile【文件】并读取和显示
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.1.4.RELEASE
+
+
+
+
+ UTF-8
+ UTF-8
+ 1.8
+ 20.0
+ 42.1.4
+ 2.11.2
+ 1.2.74
+
+
+
+
+ osgeo
+ OSGeo Release Repository
+ https://repo.osgeo.org/repository/release/
+
+ false
+
+
+ true
+
+
+
+ osgeo-snapshot
+ OSGeo Snapshot Repository
+ https://repo.osgeo.org/repository/snapshot/
+
+ true
+
+
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ junit
+ junit
+
+
+
+
+ org.geotools
+ gt-shapefile
+ ${geotools.version}
+
+
+
+ org.geotools
+ gt-swing
+ ${geotools.version}
+
+
+
+
+ org.geotools
+ gt-geojson
+ ${geotools.version}
+
+
+
+ org.geotools.jdbc
+ gt-jdbc-mysql
+ ${geotools.version}
+
+
+
+ mysql
+ mysql-connector-java
+ 5.1.25
+
+
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson.version}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+
+
+
+
+
+
+ src/main/resources
+
+
+ src/main/resources
+
+ **/*.properties
+ **/*.xml
+
+ false
+
+
+ src/main/java
+
+ **/*.properties
+ **/*.xml
+
+ false
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+ true
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ **/*Documentation.java
+
+
+
+
+
+
diff --git a/src/main/java/com/appleyk/IO/StringTokenReader.java b/src/main/java/com/appleyk/IO/StringTokenReader.java
new file mode 100644
index 0000000..fe465a6
--- /dev/null
+++ b/src/main/java/com/appleyk/IO/StringTokenReader.java
@@ -0,0 +1,672 @@
+package com.appleyk.IO;
+
+
+import org.locationtech.jts.geom.*;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.util.Assert;
+
+import java.io.IOException;
+import java.io.Reader;
+import java.io.StreamTokenizer;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
StringToken 特殊、自定义字符串解析Reader
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 2018年10月25日09:22:41
+ */
+public class StringTokenReader {
+
+ private static final String EMPTY = "EMPTY";
+ private static final String COMMA = ",";
+ private static final String L_PAREN = "(";
+ private static final String R_PAREN = ")";
+ private static final String NAN_SYMBOL = "NaN";
+ private static final String Z = "Z";
+ private static final String M = "M";
+ private static final String ZM = "ZM";
+ private static final String POINT = "POINT";
+ private static final String LINESTRING = "LINESTRING";
+ private static final String LINEARRING = "LINEARRING";
+ private static final String POLYGON = "POLYGON";
+ private static final String MULTI_POINT = "MULTIPOINT";
+ private static final String MULTI_LINESTRING = "MULTILINESTRING";
+ private static final String MULTI_POLYGON = "MULTIPOLYGON";
+
+ private GeometryFactory geometryFactory;
+ private PrecisionModel precisionModel;
+ private StreamTokenizer tokenizer;
+
+ /**
+ * Not yet used (useful if we want to read Z, M and ZM WKT)
+ */
+ private boolean z;
+ private boolean m;
+
+ /**
+ * Creates a reader that creates objects using the default
+ * {@link GeometryFactory}.
+ */
+ public StringTokenReader() {
+ this(new GeometryFactory());
+ }
+
+ /**
+ * Creates a reader that creates objects using the given
+ * {@link GeometryFactory}.
+ *
+ * @param geometryFactory the factory used to create Geometry
s.
+ */
+ public StringTokenReader(GeometryFactory geometryFactory) {
+ this.geometryFactory = geometryFactory;
+ precisionModel = geometryFactory.getPrecisionModel();
+ }
+
+ /**
+ * Reads a Well-Known Text representation of a {@link Geometry} from a
+ * {@link String}.
+ *
+ * @param wellKnownText one or more <Geometry Tagged Text> strings (see the
+ * OpenGIS Simple Features Specification) separated by whitespace
+ * @return a Geometry
specified by wellKnownText
+ * @throws ParseException if a parsing problem occurs
+ */
+ public Geometry read(String wellKnownText) throws ParseException {
+ StringReader reader = new StringReader(wellKnownText);
+ try {
+ return read(reader);
+ } finally {
+ reader.close();
+ }
+ }
+
+ /**
+ * Reads a Well-Known Text representation of a {@link Geometry} from a
+ * {@link Reader}.
+ *
+ * @param reader a Reader which will return a <Geometry Tagged Text>
+ * string (see the OpenGIS Simple Features Specification)
+ * @return a Geometry
read from reader
+ * @throws ParseException if a parsing problem occurs
+ */
+ public Geometry read(Reader reader) throws ParseException {
+ tokenizer = new StreamTokenizer(reader);
+ // set tokenizer to NOT parse numbers
+ tokenizer.resetSyntax();
+ tokenizer.wordChars('a', 'z');
+ tokenizer.wordChars('A', 'Z');
+ tokenizer.wordChars(128 + 32, 255);
+ tokenizer.wordChars('0', '9');
+ tokenizer.wordChars('-', '-');
+ tokenizer.wordChars('+', '+');
+ tokenizer.wordChars('.', '.');
+ tokenizer.whitespaceChars(0, ' ');
+ tokenizer.commentChar('#');
+ z = false;
+ m = false;
+ try {
+ return readGeometryTaggedText();
+ } catch (IOException e) {
+ throw new ParseException(e.toString());
+ }
+ }
+
+ /**
+ * Returns the next array of Coordinate
s in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next element returned by the stream should be L_PAREN (the beginning of
+ * "(x1 y1, x2 y2, ..., xn yn)") or EMPTY.
+ *
+ * @return the next array of Coordinate
s in the stream, or an
+ * empty array if EMPTY is the next element returned by the stream.
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private Coordinate[] getCoordinates() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return new Coordinate[]{};
+ }
+ List coordinates = new ArrayList<>();
+ coordinates.add(getPreciseCoordinate());
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ coordinates.add(getPreciseCoordinate());
+ nextToken = getNextCloserOrComma();
+ }
+ Coordinate[] array = new Coordinate[coordinates.size()];
+ return coordinates.toArray(array);
+ }
+
+ private Coordinate[] getCoordinatesNoLeftParen() throws IOException, ParseException {
+ List coordinates = new ArrayList<>();
+ coordinates.add(getPreciseCoordinate());
+ String nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ coordinates.add(getPreciseCoordinate());
+ nextToken = getNextCloserOrComma();
+ }
+ Coordinate[] array = new Coordinate[coordinates.size()];
+ return coordinates.toArray(array);
+ }
+
+ private Coordinate getPreciseCoordinate() throws IOException, ParseException {
+ Coordinate coordinate = new Coordinate();
+ coordinate.setX(getNextNumber());
+ coordinate.setY(getNextNumber());
+ if (isNumberNext()) {
+ coordinate.setZ(getNextNumber());
+ }
+ if (isNumberNext()) {
+ // ignore M value
+ getNextNumber();
+ }
+ precisionModel.makePrecise(coordinate);
+ return coordinate;
+ }
+
+ private boolean isNumberNext() throws IOException {
+ int type = tokenizer.nextToken();
+ tokenizer.pushBack();
+ return type == StreamTokenizer.TT_WORD;
+ }
+
+ /**
+ * Parses the next number in the stream. Numbers with exponents are handled.
+ * NaN values are handled correctly, and the case of the "NaN"
+ * symbol is not significant.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be a number.
+ *
+ * @return the next number in the stream
+ * @throws ParseException if the next token is not a valid number
+ * @throws IOException if an I/O error occurs
+ */
+ private double getNextNumber() throws IOException, ParseException {
+ int type = tokenizer.nextToken();
+ switch (type) {
+ case StreamTokenizer.TT_WORD: {
+ if (tokenizer.sval.equalsIgnoreCase(NAN_SYMBOL)) {
+ return Double.NaN;
+ } else {
+ try {
+ return Double.parseDouble(tokenizer.sval);
+ } catch (NumberFormatException ex) {
+ parseErrorWithLine("Invalid number: " + tokenizer.sval);
+ }
+ }
+ break;
+ }
+ default:{
+
+ }
+ }
+ parseErrorExpected("number");
+ return 0.0;
+ }
+
+ /**
+ * Returns the next EMPTY or L_PAREN in the stream as uppercase text.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be EMPTY or L_PAREN.
+ *
+ * @return the next EMPTY or L_PAREN in the stream as uppercase text.
+ * @throws ParseException if the next token is not EMPTY or L_PAREN
+ * @throws IOException if an I/O error occurs
+ */
+ private String getNextEmptyOrOpener() throws IOException, ParseException {
+ String nextWord = getNextWord();
+ if (Z.equalsIgnoreCase(nextWord)) {
+ z = true;
+ nextWord = getNextWord();
+ } else if (M.equalsIgnoreCase(nextWord)) {
+ m = true;
+ nextWord = getNextWord();
+ } else if (ZM.equalsIgnoreCase(nextWord)) {
+ z = true;
+ m = true;
+ nextWord = getNextWord();
+ }
+ if (EMPTY.equals(nextWord) || L_PAREN.equals(nextWord)) {
+ return nextWord;
+ }
+ parseErrorExpected(EMPTY + " or " + L_PAREN);
+ return null;
+ }
+
+ /**
+ * Returns the next R_PAREN or COMMA in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be R_PAREN or COMMA.
+ *
+ * @return the next R_PAREN or COMMA in the stream
+ * @throws ParseException if the next token is not R_PAREN or COMMA
+ * @throws IOException if an I/O error occurs
+ */
+ private String getNextCloserOrComma() throws IOException, ParseException {
+ String nextWord = getNextWord();
+ if (COMMA.equals(nextWord) || R_PAREN.equals(nextWord)) {
+ return nextWord;
+ }
+ parseErrorExpected(COMMA + " or " + R_PAREN);
+ return null;
+ }
+
+ /**
+ * Returns the next R_PAREN in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be R_PAREN.
+ *
+ * @return the next R_PAREN in the stream
+ * @throws ParseException if the next token is not R_PAREN
+ * @throws IOException if an I/O error occurs
+ */
+ private String getNextCloser() throws IOException, ParseException {
+ String nextWord = getNextWord();
+ if (R_PAREN.equals(nextWord)) {
+ return nextWord;
+ }
+ parseErrorExpected(R_PAREN);
+ return null;
+ }
+
+ /**
+ * Returns the next word in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be a word.
+ *
+ * @return the next word in the stream as uppercase text
+ * @throws ParseException if the next token is not a word
+ * @throws IOException if an I/O error occurs
+ */
+ private String getNextWord() throws IOException, ParseException {
+ int type = tokenizer.nextToken();
+ switch (type) {
+ case StreamTokenizer.TT_WORD:
+
+ String word = tokenizer.sval;
+ if (word.equalsIgnoreCase(EMPTY)){
+ return EMPTY;
+ }
+
+ return word;
+
+ case '(':
+ return L_PAREN;
+ case ')':
+ return R_PAREN;
+ case ',':
+ return COMMA;
+ default:{
+
+ }
+ }
+ parseErrorExpected("word");
+ return null;
+ }
+
+ /**
+ * Returns the next word in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next token must be a word.
+ *
+ * @return the next word in the stream as uppercase text
+ * @throws ParseException if the next token is not a word
+ * @throws IOException if an I/O error occurs
+ */
+ private String lookaheadWord() throws IOException, ParseException {
+ String nextWord = getNextWord();
+ tokenizer.pushBack();
+ return nextWord;
+ }
+
+ /**
+ * Throws a formatted ParseException reporting that the current token was
+ * unexpected.
+ *
+ * @param expected a description of what was expected
+ * @throws ParseException AssertionFailedException if an invalid token is encountered
+ */
+ private void parseErrorExpected(String expected) throws ParseException {
+ // throws Asserts for tokens that should never be seen
+ if (tokenizer.ttype == StreamTokenizer.TT_NUMBER){
+ Assert.shouldNeverReachHere("Unexpected NUMBER token");
+ }
+ if (tokenizer.ttype == StreamTokenizer.TT_EOL){
+ Assert.shouldNeverReachHere("Unexpected EOL token");
+ }
+
+ String tokenStr = tokenString();
+ parseErrorWithLine("Expected " + expected + " but found " + tokenStr);
+ }
+
+ private void parseErrorWithLine(String msg) throws ParseException {
+ throw new ParseException(msg + " (line " + tokenizer.lineno() + ")");
+ }
+
+ /**
+ * Gets a description of the current token
+ *
+ * @return a description of the current token
+ */
+ private String tokenString() {
+ switch (tokenizer.ttype) {
+ case StreamTokenizer.TT_NUMBER:
+ return "";
+ case StreamTokenizer.TT_EOL:
+ return "End-of-Line";
+ case StreamTokenizer.TT_EOF:
+ return "End-of-Stream";
+ case StreamTokenizer.TT_WORD:
+ return "'" + tokenizer.sval + "'";
+ default:{
+
+ }
+ }
+ return "'" + (char) tokenizer.ttype + "'";
+ }
+
+ /**
+ * Creates a Geometry
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <Geometry Tagged Text>.
+ *
+ * @return a Geometry
specified by the next token in the stream
+ * @throws ParseException if the coordinates used to create a Polygon
+ * shell and holes do not form closed linestrings, or if an
+ * unexpected token was encountered
+ * @throws IOException if an I/O error occurs
+ */
+ private Geometry readGeometryTaggedText() throws IOException, ParseException {
+
+ String type;
+ try {
+ type = getNextWord();
+ if(type == null){
+ return null;
+ }
+ type= type.toUpperCase();
+
+ if (type.endsWith(Z)){
+ z = true;
+ }
+ if (type.endsWith(M)){
+ m = true;
+ }
+ } catch (IOException e) {
+ return null;
+ }
+
+ if (type.startsWith(POINT)) {
+ return readPointText();
+ } else if (type.startsWith(LINESTRING)) {
+ return readLineStringText();
+ } else if (type.startsWith(LINEARRING)) {
+ return readLinearRingText();
+ } else if (type.startsWith(POLYGON)) {
+ return readPolygonText();
+ } else if (type.startsWith(MULTI_POINT)) {
+ return readMultiPointText();
+ } else if (type.startsWith(MULTI_LINESTRING)) {
+ return readMultiLineStringText();
+ } else if (type.startsWith(MULTI_POLYGON)) {
+ return readMultiPolygonText();
+ }
+ parseErrorWithLine("Unknown geometry type: " + type);
+ return null;
+ }
+
+ /**
+ * Creates a Point
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <Point Text>.
+ *
+ * @return a Point
specified by the next token in the stream
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private Point readPointText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return geometryFactory
+ .createPoint(geometryFactory.getCoordinateSequenceFactory().create(new Coordinate[]{}));
+ }
+ Point point = geometryFactory.createPoint(getPreciseCoordinate());
+ getNextCloser();
+ return point;
+ }
+
+ /**
+ * Creates a LineString
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <LineString Text>.
+ *
+ * @return a LineString
specified by the next token in the
+ * stream
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private LineString readLineStringText() throws IOException, ParseException {
+ return geometryFactory.createLineString(getCoordinates());
+ }
+
+ /**
+ * Creates a LinearRing
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <LineString Text>.
+ *
+ * @return a LinearRing
specified by the next token in the
+ * stream
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if the coordinates used to create the LinearRing
+ * do not form a closed linestring, or if an unexpected token
+ * was encountered
+ */
+ private LinearRing readLinearRingText() throws IOException, ParseException {
+ return geometryFactory.createLinearRing(getCoordinates());
+ }
+
+ /*
+ * private MultiPoint OLDreadMultiPointText() throws IOException,
+ * ParseException { return
+ * geometryFactory.createMultiPoint(toPoints(getCoordinates())); }
+ */
+
+ private static final boolean ALLOW_OLD_JTS_MULTIPOINT_SYNTAX = true;
+
+ /**
+ * Creates a MultiPoint
using the next tokens in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <MultiPoint Text>.
+ *
+ * @return a MultiPoint
specified by the next token in the
+ * stream
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private MultiPoint readMultiPointText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return geometryFactory.createMultiPoint(new Point[0]);
+ }
+
+ // check for old-style JTS syntax and parse it if present
+ // MD 2009-02-21 - this is only provided for backwards compatibility for
+ // a few versions
+ if (ALLOW_OLD_JTS_MULTIPOINT_SYNTAX) {
+ String nextWord = lookaheadWord();
+ if (!nextWord.equals(L_PAREN)) {
+ return geometryFactory.createMultiPoint(toPoints(getCoordinatesNoLeftParen()));
+ }
+ }
+
+ List points = new ArrayList<>();
+ Point point = readPointText();
+ points.add(point);
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ point = readPointText();
+ points.add(point);
+ nextToken = getNextCloserOrComma();
+ }
+ Point[] array = new Point[points.size()];
+ return geometryFactory.createMultiPoint( points.toArray(array));
+ }
+
+ /**
+ * Creates an array of Point
s having the given
+ * Coordinate
s.
+ *
+ * @param coordinates the Coordinate
s with which to create the
+ * Point
s
+ * @return Point
s created using this WKTReader
s
+ * GeometryFactory
+ */
+ private Point[] toPoints(Coordinate[] coordinates) {
+ List points = new ArrayList<>();
+ for (Coordinate coordinate : coordinates) {
+ points.add(geometryFactory.createPoint(coordinate));
+ }
+ return points.toArray(new Point[]{});
+ }
+
+ /**
+ * Creates a Polygon
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <Polygon Text>.
+ *
+ * @return a Polygon
specified by the next token in the stream
+ * @throws ParseException if the coordinates used to create the Polygon
+ * shell and holes do not form closed linestrings, or if an
+ * unexpected token was encountered.
+ * @throws IOException if an I/O error occurs
+ */
+ private Polygon readPolygonText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]{}),
+ new LinearRing[]{});
+ }
+ List holes = new ArrayList<>();
+ LinearRing shell = readLinearRingText();
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ LinearRing hole = readLinearRingText();
+ holes.add(hole);
+ nextToken = getNextCloserOrComma();
+ }
+ LinearRing[] array = new LinearRing[holes.size()];
+ return geometryFactory.createPolygon(shell, holes.toArray(array));
+ }
+
+ /**
+ * Creates a MultiLineString
using the next token in the
+ * stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <MultiLineString Text>.
+ *
+ * @return a MultiLineString
specified by the next token in the
+ * stream
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private MultiLineString readMultiLineStringText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return geometryFactory.createMultiLineString(new LineString[]{});
+ }
+ List lineStrings = new ArrayList<>();
+ LineString lineString = readLineStringText();
+ lineStrings.add(lineString);
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ lineString = readLineStringText();
+ lineStrings.add(lineString);
+ nextToken = getNextCloserOrComma();
+ }
+ LineString[] array = new LineString[lineStrings.size()];
+ return geometryFactory.createMultiLineString(lineStrings.toArray(array));
+ }
+
+ /**
+ * Creates a MultiPolygon
using the next token in the stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <MultiPolygon Text>.
+ *
+ * @return a MultiPolygon
specified by the next token in the
+ * stream, or if if the coordinates used to create the
+ * Polygon
shells and holes do not form closed
+ * linestrings.
+ * @throws IOException if an I/O error occurs
+ * @throws ParseException if an unexpected token was encountered
+ */
+ private MultiPolygon readMultiPolygonText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return new MultiPolygon(null, geometryFactory);
+ }
+ List polygons = new ArrayList<>();
+ Polygon polygon = readPolygonText();
+ polygons.add(polygon);
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ polygon = readPolygonText();
+ polygons.add(polygon);
+ nextToken = getNextCloserOrComma();
+ }
+ Polygon[] array = new Polygon[polygons.size()];
+ return geometryFactory.createMultiPolygon(polygons.toArray(array));
+ }
+
+ /**
+ * Creates a GeometryCollection
using the next token in the
+ * stream.
+ *
+ * tokenizer tokenizer over a stream of text in Well-known Text format. The
+ * next tokens must form a <GeometryCollection Text>.
+ *
+ * @return a GeometryCollection
specified by the next token in
+ * the stream
+ * @throws ParseException if the coordinates used to create a Polygon
+ * shell and holes do not form closed linestrings, or if an
+ * unexpected token was encountered
+ * @throws IOException if an I/O error occurs
+ */
+ private GeometryCollection readGeometryCollectionText() throws IOException, ParseException {
+ String nextToken = getNextEmptyOrOpener();
+ if (EMPTY.equals(nextToken)) {
+ return geometryFactory.createGeometryCollection(new Geometry[]{});
+ }
+ List geometries = new ArrayList<>();
+ Geometry geometry = readGeometryTaggedText();
+ geometries.add(geometry);
+ nextToken = getNextCloserOrComma();
+ while (COMMA.equals(nextToken)) {
+ geometry = readGeometryTaggedText();
+ geometries.add(geometry);
+ nextToken = getNextCloserOrComma();
+ }
+ Geometry[] array = new Geometry[geometries.size()];
+ return geometryFactory.createGeometryCollection(geometries.toArray(array));
+ }
+
+
+}
diff --git a/src/main/java/com/appleyk/ShpApplication.java b/src/main/java/com/appleyk/ShpApplication.java
new file mode 100644
index 0000000..e8aa454
--- /dev/null
+++ b/src/main/java/com/appleyk/ShpApplication.java
@@ -0,0 +1,56 @@
+package com.appleyk;
+
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Bean;
+
+/**
+ * 下面是一个典型的结构:
+ *
+ * com
+ * +- example
+ * +- myproject
+ * +- Application.java --
+ *
+ * 注意这个位置,习惯性的放在项目的一开始,也就是根包的第一层 | + - domain | +- Customer.java | +-
+ * CustomerRepository.java | + - service | +- CustomerService.java | + - web +-
+ * CustomerController.java
+ * 文件将声明 main 方法, 还有基本的 @Configuration
+ *
+ * SpringBoot启动类
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 11:54 2018-10-12
+ */
+@SpringBootApplication// same as @Configuration @EnableAutoConfiguration @ComponentScan
+public class ShpApplication extends SpringBootServletInitializer {
+
+ /**
+ * SpringApplication类提供了一种从main()方法启动Spring应用的便捷方式。 在很多情况下, 你只需委托给
+ * SpringApplication.run这个静态方法:
+ * @param args 输入参数
+ */
+ public static void main(String[] args) {
+ SpringApplication.run(ShpApplication.class, args);
+ }
+
+ @Override
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
+ return application.sources(ShpApplication.class);
+ }
+
+ /**
+ * Spring-Boot启动的时候,加载、创建、初始化数据
+ * @return 初始化信息
+ */
+ @Bean
+ CommandLineRunner demo() {
+ return args -> {
+ System.out.println("<<<<<<<<< Hello,Spring Boot ! >>>>>>>>");
+ };
+ }
+
+}
diff --git a/src/main/java/com/appleyk/controller/ShpController.java b/src/main/java/com/appleyk/controller/ShpController.java
new file mode 100644
index 0000000..ba31732
--- /dev/null
+++ b/src/main/java/com/appleyk/controller/ShpController.java
@@ -0,0 +1,77 @@
+package com.appleyk.controller;
+
+import com.appleyk.pojos.ShpInfo;
+import com.appleyk.result.ResponseResult;
+import com.appleyk.service.ShpService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * shp接口请求处理器
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 下午 2018-10-24 16:27:22
+ */
+@CrossOrigin
+@RequestMapping("/shper")
+@RestController
+public class ShpController {
+
+ @Autowired
+ private ShpService shpService;
+
+ @GetMapping("/hello")
+ public String sayHello(){
+ return "Hello Appleyk's Controller !";
+ }
+
+
+ /**
+ * 写一个shp文件
+ * @param shpInfo
+ * @return
+ * @throws Exception
+ */
+ @PostMapping("/write")
+ public ResponseResult write(@RequestBody ShpInfo shpInfo) throws Exception{
+ return shpService.writeShp(shpInfo);
+ }
+
+ /**
+ * 查询一个shp文件
+ * @param shpFilePath 文件绝对路径
+ * @param limit 指定显示多少条shp特征【features】
+ * @return
+ * @throws Exception
+ */
+ @GetMapping("/query")
+ public ResponseResult query(@RequestParam(value = "path",required = true) String shpFilePath,
+ @RequestParam(value = "limit",required = false,defaultValue = "10") Integer limit ) throws Exception{
+ return shpService.getShpDatas(shpFilePath,limit);
+ }
+
+ /**
+ * 将shp文件转换成png图片,图片或写入文件或通过response输出到界面【比如,客户端浏览器】
+ * @param path shp文件路径
+ * @param imagePath 如果imagePath不等于空,则shp文件转成图片文件存储进行存
+ * @param color 渲染颜色
+ */
+ @GetMapping("/show")
+ public void show(@RequestParam(value = "path",required = true) String path,
+ @RequestParam(value = "imagePath",required = false) String imagePath,
+ @RequestParam(value = "color",required = false) String color,
+ HttpServletResponse response) throws Exception{
+
+ // 设置响应消息的类型
+ response.setContentType("image/png");
+
+ // 设置页面不缓存
+ response.setHeader("Cache-Control", "no-cache");
+ response.setHeader("Pragma", "no-cache");
+ response.setDateHeader("Expires", 0);
+ shpService.showShp(path, imagePath,color ,response);
+ }
+
+}
diff --git a/src/main/java/com/appleyk/exception/GlobalExceptionHandler.java b/src/main/java/com/appleyk/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..e573e8d
--- /dev/null
+++ b/src/main/java/com/appleyk/exception/GlobalExceptionHandler.java
@@ -0,0 +1,30 @@
+package com.appleyk.exception;
+
+
+import com.appleyk.result.ResponseResult;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+/**
+ * 全局异常捕获处理类
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 2018年10月25日09:57:57
+ */
+@CrossOrigin
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+
+ @ExceptionHandler
+ public ResponseResult processException(Exception ex, HttpServletRequest request, HttpServletResponse response)
+ throws Exception {
+
+ return new ResponseResult(400, ex);
+ }
+
+}
diff --git a/src/main/java/com/appleyk/geotools/GeoUtils.java b/src/main/java/com/appleyk/geotools/GeoUtils.java
new file mode 100644
index 0000000..c682db8
--- /dev/null
+++ b/src/main/java/com/appleyk/geotools/GeoUtils.java
@@ -0,0 +1,125 @@
+package com.appleyk.geotools;
+
+import org.geotools.data.DataStore;
+import org.geotools.data.FeatureWriter;
+import org.geotools.data.Transaction;
+import org.geotools.data.mysql.MySQLDataStoreFactory;
+import org.geotools.data.shapefile.ShapefileDataStore;
+import org.geotools.data.simple.SimpleFeatureCollection;
+import org.geotools.data.simple.SimpleFeatureIterator;
+import org.geotools.data.simple.SimpleFeatureSource;
+import org.geotools.jdbc.JDBCDataStore;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+/**
+ * @description:
+ * @author: zzl
+ * @date: Created in 2021/5/16 13:30
+ * @version: 1
+ * @modified By:
+ */
+public class GeoUtils {
+
+ //测试代码
+ public static void main(String[] args) throws IOException {
+
+ JDBCDataStore connnection2mysql = GeoUtils.connnection2mysql("localhost", "gis?serverTimezone=GMT%2B8", 3318, "gly", "glyadmin");
+ SimpleFeatureSource featureSource = readSHP("D:\\NsgkSoft\\files\\uploadPath\\gis\\china_railways.shp");
+ JDBCDataStore ds = createTable(connnection2mysql, featureSource);
+ writeShp2Mysql(ds, featureSource);
+
+ }
+
+ public static SimpleFeatureSource readSHP(String shpfile) {
+ SimpleFeatureSource featureSource = null;
+ try {
+ File file = new File(shpfile);
+ ShapefileDataStore shpDataStore = null;
+
+ shpDataStore = new ShapefileDataStore(file.toURL());
+ //设置编码
+ Charset charset = Charset.forName("utf-8");
+ shpDataStore.setCharset(charset);
+ String tableName = shpDataStore.getTypeNames()[0];
+ featureSource = shpDataStore.getFeatureSource(tableName);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return featureSource;
+ }
+
+ public static JDBCDataStore connnection2mysql(String host, String dataBase, int port, String userName, String pwd) {
+ JDBCDataStore ds = null;
+ DataStore dataStore = null;
+ //连接数据库参数
+ java.util.Map params = new java.util.HashMap();
+ params.put(MySQLDataStoreFactory.DBTYPE.key, "mysql");
+ params.put(MySQLDataStoreFactory.HOST.key, host);
+ params.put(MySQLDataStoreFactory.PORT.key, port);
+ params.put(MySQLDataStoreFactory.DATABASE.key, dataBase);
+ params.put(MySQLDataStoreFactory.USER.key, userName);
+ params.put(MySQLDataStoreFactory.PASSWD.key, pwd);
+
+ try {
+ MySQLDataStoreFactory factory1 = new MySQLDataStoreFactory();
+
+ dataStore = factory1.createDataStore(params);
+ if (dataStore != null) {
+ ds = (JDBCDataStore) dataStore;
+ System.out.println(dataBase + "连接成功");
+ } else {
+ System.out.println(dataBase + "连接失败");
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return ds;
+ }
+
+ public static JDBCDataStore createTable(JDBCDataStore ds, SimpleFeatureSource featureSource) {
+ SimpleFeatureType schema = featureSource.getSchema();
+ try {
+ //创建数据表
+ ds.createSchema(schema);
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return ds;
+ }
+
+ public static void writeShp2Mysql(JDBCDataStore ds, SimpleFeatureSource featureSource) {
+ SimpleFeatureType schema = featureSource.getSchema();
+ System.out.println("表结构: " + schema);
+ //开始写入数据
+ try {
+ FeatureWriter writer = ds.getFeatureWriter(schema.getTypeName().toLowerCase(), Transaction.AUTO_COMMIT);
+ SimpleFeatureCollection featureCollection = featureSource.getFeatures();
+ SimpleFeatureIterator features = featureCollection.features();
+ while (features.hasNext()) {
+ writer.hasNext();
+ SimpleFeature next = writer.next();
+ SimpleFeature feature = features.next();
+ for (int i = 0; i < feature.getAttributeCount(); i++) {
+ next.setAttribute(i, feature.getAttribute(i));
+ }
+ writer.write();
+ }
+ writer.close();
+ ds.dispose();
+ System.out.println("导入成功");
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } // SimpleFeatureIterator itertor = featureSource.getFeatures() // .features(); //create the builder SimpleFeatureBuilder builder = new SimpleFeatureBuilder(schema);
+
+
+ }
+}
diff --git a/src/main/java/com/appleyk/geotools/GeometryCreator.java b/src/main/java/com/appleyk/geotools/GeometryCreator.java
new file mode 100644
index 0000000..e44f90b
--- /dev/null
+++ b/src/main/java/com/appleyk/geotools/GeometryCreator.java
@@ -0,0 +1,237 @@
+package com.appleyk.geotools;
+
+import org.geotools.geojson.geom.GeometryJSON;
+import org.locationtech.jts.geom.*;
+import org.locationtech.jts.io.ParseException;
+import org.locationtech.jts.io.WKTReader;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.List;
+
+/**
+ * 自定义几何对象构造器
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 11:54 2018-10-12
+ */
+public class GeometryCreator {
+
+
+ private static GeometryCreator geometryCreator = null;
+ private static GeometryFactory geometryFactory = new GeometryFactory();
+
+ /**
+ * 设置保留6位小数,否则GeometryJSON默认保留4位小数
+ */
+ private static GeometryJSON geometryJson = new GeometryJSON(6);
+
+
+ private GeometryCreator() {
+ }
+
+ /**
+ * 返回本类的唯一实例
+ * @return
+ */
+ public static GeometryCreator getInstance() {
+ if (geometryCreator == null) {
+ return new GeometryCreator();
+ }
+ return geometryCreator;
+ }
+
+
+ /**
+ * 1.1根据X,Y坐标构建一个几何对象: 点 【Point】
+ * @param x
+ * @param y
+ * @return
+ */
+ public Point createPoint(double x,double y){
+ Coordinate coord = new Coordinate(x, y);
+ return geometryFactory.createPoint(coord);
+ }
+
+ /**
+ * 1.2根据几何对象的WKT描述【String】创建几何对象: 点 【Point】
+ * @return
+ * @throws ParseException
+ */
+ public Point createPointByWKT(String PointWKT) throws ParseException {
+ WKTReader reader = new WKTReader(geometryFactory);
+ return (Point) reader.read(PointWKT);
+ }
+
+ /**
+ * 1.3根据几何对象的WKT描述【String】创建几何对象:多点 【MultiPoint】
+ * @return
+ * @throws ParseException
+ */
+ public MultiPoint createMulPointByWKT(String MPointWKT)throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (MultiPoint) reader.read(MPointWKT);
+ }
+
+ /**
+ * 2.1根据两点 创建几何对象:线 【LineString】
+ * @param ax 第一个点的x坐标
+ * @param ay 第一个点的y坐标
+ * @param bx 第二个点的x坐标
+ * @param by 第二个点的y坐标
+ * @return
+ */
+ public LineString createLine(double ax,double ay,double bx,double by){
+ Coordinate[] coords = new Coordinate[] {new Coordinate(ax, ay), new Coordinate(bx, by)};
+ return geometryFactory.createLineString(coords);
+ }
+
+ /**
+ * 2.2根据线的WKT描述创建几何对象:线 【LineString】
+ * @param LineStringWKT
+ * @return
+ * @throws ParseException
+ */
+ public LineString createLineByWKT(String LineStringWKT) throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (LineString) reader.read(LineStringWKT);
+ }
+
+ /**
+ * 2.3根据点组合的线数组,创建几何对象:多线 【MultiLineString】
+ * @param list
+ * @return
+ */
+ public MultiLineString createMLine(List list){
+
+ if(list == null){
+ return null;
+ }
+
+ LineString[] lineStrings = new LineString[list.size()];
+ int i = 0;
+ for (Coordinate[] coordinates : list) {
+ lineStrings[i] = geometryFactory.createLineString(coordinates);
+ }
+
+ return geometryFactory.createMultiLineString(lineStrings);
+ }
+
+
+ /**
+ * 2.4根据几何对象的WKT描述【String】创建几何对象 : 多线【MultiLineString】
+ * @param MLineStringWKT
+ * @return
+ * @throws ParseException
+ */
+ public MultiLineString createMLineByWKT(String MLineStringWKT)throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (MultiLineString) reader.read(MLineStringWKT);
+ }
+
+
+ /**
+ * 3.1 根据几何对象的WKT描述【String】创建几何对象:多边形 【Polygon】
+ * @param PolygonWKT
+ * @return
+ * @throws ParseException
+ */
+ public Polygon createPolygonByWKT(String PolygonWKT) throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (Polygon) reader.read(PolygonWKT);
+ }
+
+ /**
+ * 3.2 根据几何对象的WKT描述【String】创建几何对象: 多多边形 【MultiPolygon】
+ * @param MPolygonWKT
+ * @return
+ * @throws ParseException
+ */
+ public MultiPolygon createMulPolygonByWKT(String MPolygonWKT) throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (MultiPolygon) reader.read(MPolygonWKT);
+ }
+
+ /**
+ * 根据多边形数组 进行多多边形的创建
+ * @param polygons
+ * @return
+ * @throws ParseException
+ */
+ public MultiPolygon createMulPolygonByPolygon(Polygon[] polygons) throws ParseException{
+ return geometryFactory.createMultiPolygon(polygons);
+ }
+
+ /**
+ * 4.1 根据几何对象数组,创建几何对象集合:【GeometryCollection】
+ * @return
+ * @throws ParseException
+ */
+ public GeometryCollection createGeoCollect(Geometry[] geoArray) throws ParseException{
+ return geometryFactory.createGeometryCollection(geoArray);
+ }
+
+ /**
+ * 5.1 根据圆点以及半径创建几何对象:特殊的多边形--圆 【Polygon】
+ * @param x 圆点x坐标
+ * @param y 圆点y坐标
+ * @param radius 半径
+ * @return
+ */
+ public Polygon createCircle(double x, double y, final double radius){
+
+ //圆上面的点个数
+ final int sides = 32;
+ Coordinate[] coords = new Coordinate[sides+1];
+ for( int i = 0; i < sides; i++){
+ double angle = ((double) i / (double) sides) * Math.PI * 2.0;
+ double dx = Math.cos( angle ) * radius;
+ double dy = Math.sin( angle ) * radius;
+ coords[i] = new Coordinate( (double) x + dx, (double) y + dy );
+ }
+ coords[sides] = coords[0];
+ //线性环
+ LinearRing ring = geometryFactory.createLinearRing(coords);
+ return geometryFactory.createPolygon(ring, null);
+ }
+
+
+ /**
+ * 6.1 根据WKT创建环
+ * @param ringWKT
+ * @return
+ * @throws ParseException
+ */
+ public LinearRing createLinearRingByWKT(String ringWKT) throws ParseException{
+ WKTReader reader = new WKTReader( geometryFactory );
+ return (LinearRing) reader.read(ringWKT);
+ }
+
+ /**
+ * 几何对象转GeoJson对象
+ * @param geometry
+ * @return
+ * @throws Exception
+ */
+ public static String geometryToGeoJson(Geometry geometry) throws Exception {
+ if (geometry == null) {
+ return null;
+ }
+ StringWriter writer = new StringWriter();
+ geometryJson.write(geometry, writer);
+ String geojson = writer.toString();
+ writer.close();
+ return geojson;
+ }
+
+ /**
+ * GeoJson转几何对象
+ * @param geojson
+ * @return
+ * @throws Exception
+ */
+ public static Geometry geoJsonToGeometry(String geojson) throws Exception {
+ return geometryJson.read(new StringReader(geojson));
+ }
+
+}
diff --git a/src/main/java/com/appleyk/geotools/ShapeTools.java b/src/main/java/com/appleyk/geotools/ShapeTools.java
new file mode 100644
index 0000000..3c3e384
--- /dev/null
+++ b/src/main/java/com/appleyk/geotools/ShapeTools.java
@@ -0,0 +1,82 @@
+package com.appleyk.geotools;
+
+import org.geotools.data.FileDataStore;
+import org.geotools.data.FileDataStoreFinder;
+import org.geotools.data.simple.SimpleFeatureCollection;
+import org.geotools.data.simple.SimpleFeatureIterator;
+import org.geotools.data.simple.SimpleFeatureSource;
+import org.opengis.feature.GeometryAttribute;
+import org.opengis.feature.Property;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.type.GeometryType;
+import org.opengis.feature.type.Name;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @description:
+ * @author: zzl
+ * @date: Created in 2021/5/19 18:53
+ * @version: 1
+ * @modified By:
+ */
+public class ShapeTools {
+
+ public static void main(String[] args) throws IOException {
+ String pathName = "D:\\NsgkSoft\\files\\uploadPath\\gis\\环翠区农用地利用情况.shp";
+ File file = new File(pathName);
+
+ // 读取到数据存储中
+ FileDataStore dataStore = FileDataStoreFinder.getDataStore(file);
+ // 获取特征资源
+ SimpleFeatureSource simpleFeatureSource = dataStore.getFeatureSource();
+ // 要素集合
+ SimpleFeatureCollection simpleFeatureCollection = simpleFeatureSource.getFeatures();
+
+ // 要素数量
+ int featureSize = simpleFeatureCollection.size();
+ // 获取要素迭代器
+ SimpleFeatureIterator featureIterator = simpleFeatureCollection.features();
+ if(featureIterator.hasNext()){
+ // 要素对象
+ SimpleFeature feature = featureIterator.next();
+ // 要素属性信息,名称,值,类型
+ List propertyList = (List) feature.getValue();
+ for(Property property : propertyList){
+ System.out.println("属性名称:" + property.getName());
+ System.out.println("属性值:" + property.getValue());
+ System.out.println("属性类型:" + property.getType());
+ System.out.println();
+ }
+
+ // 要素属性信息
+ List featureAttributes = feature.getAttributes();
+
+ // 要素geometry的类型和坐标,如点,线,面及其组成的坐标
+ Object geometryText = feature.getDefaultGeometry();
+
+ // geometry属性
+ GeometryAttribute geometryAttribute = feature.getDefaultGeometryProperty();
+ // 获取坐标参考系信息
+ CoordinateReferenceSystem coordinateReferenceSystem = geometryAttribute.getDescriptor().getCoordinateReferenceSystem();
+
+ // geometry类型
+ GeometryType geometryType = geometryAttribute.getType();
+ // geometry类型名称
+ Name name = geometryType.getName();
+
+ System.out.println("要素数量:"+ featureSize);
+ System.out.println("要素属性:" + featureAttributes);
+ System.out.println("要素geometry位置信息:" + geometryText);
+ System.out.println("要素geometry类型名称:" + name);
+ System.out.println("shp文件使用的坐标参考系:\n" + coordinateReferenceSystem);
+
+ }
+
+ }
+
+
+}
diff --git a/src/main/java/com/appleyk/geotools/ShpTools.java b/src/main/java/com/appleyk/geotools/ShpTools.java
new file mode 100644
index 0000000..127a4f1
--- /dev/null
+++ b/src/main/java/com/appleyk/geotools/ShpTools.java
@@ -0,0 +1,444 @@
+package com.appleyk.geotools;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.appleyk.IO.StringTokenReader;
+import com.appleyk.pojos.ShpDatas;
+import com.appleyk.pojos.ShpInfo;
+import com.appleyk.result.ResponseMessage;
+import com.appleyk.result.ResponseResult;
+import org.geotools.data.*;
+import org.geotools.data.shapefile.ShapefileDataStore;
+import org.geotools.data.shapefile.ShapefileDataStoreFactory;
+import org.geotools.data.simple.SimpleFeatureIterator;
+import org.geotools.data.simple.SimpleFeatureSource;
+import org.geotools.feature.FeatureCollection;
+import org.geotools.feature.FeatureIterator;
+import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geojson.feature.FeatureJSON;
+import org.geotools.geometry.jts.ReferencedEnvelope;
+import org.geotools.map.FeatureLayer;
+import org.geotools.map.Layer;
+import org.geotools.map.MapContent;
+import org.geotools.referencing.crs.DefaultGeographicCRS;
+import org.geotools.renderer.lite.StreamingRenderer;
+import org.geotools.styling.SLD;
+import org.geotools.styling.Style;
+import org.geotools.swing.JMapFrame;
+import org.geotools.swing.data.JFileDataStoreChooser;
+import org.locationtech.jts.geom.Geometry;
+import org.opengis.feature.Property;
+import org.opengis.feature.simple.SimpleFeature;
+import org.opengis.feature.simple.SimpleFeatureType;
+
+import javax.imageio.ImageIO;
+import javax.servlet.http.HttpServletResponse;
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.text.SimpleDateFormat;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * ShapeFile文件读写工具类
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 11:54 2018-10-12
+ */
+public class ShpTools {
+
+ /**几何对象构造器【自定义的】*/
+ private static GeometryCreator gCreator = GeometryCreator.getInstance();
+
+ /**边界*/
+ private static ReferencedEnvelope bounds;
+
+ /**画布的宽度*/
+ private static final int IMAGE_WIDTH = 1280;
+
+ /**画布的高度*/
+ private static final int IMAGE_HEIGHT = 1200;
+
+ public static void main(String[] args) throws Exception{
+
+ File file = new File("D:\\NsgkSoft\\files\\uploadPath\\gis\\环翠区农用地利用情况.shp");
+ // 从shp文件里面读取属性信息
+ //readShpByPath(file.getAbsolutePath(),10);
+ //System.out.println("=================下面开始往shp文件里面写几何对象===================");
+
+ // 使用GeoTools读取ShapeFile文件
+ ShapefileDataStore store = new ShapefileDataStore(file.toURI().toURL());
+ //设置编码
+ Charset charset = Charset.forName("GBK");
+ store.setCharset(charset);
+ SimpleFeatureSource sfSource = store.getFeatureSource();
+ SimpleFeatureIterator sfIter = sfSource.getFeatures().features();
+ // 从ShapeFile文件中遍历每一个Feature,然后将Feature转为GeoJSON字符串
+ while (sfIter.hasNext()) {
+ SimpleFeature feature = (SimpleFeature) sfIter.next();
+ // Feature转GeoJSON
+
+ System.out.println("id ===== >>>> " + feature.getID().substring(feature.getID().indexOf(".")+1));
+
+ FeatureJSON fjson = new FeatureJSON();
+ StringWriter writer = new StringWriter();
+ fjson.writeFeature(feature, writer);
+ String sjson = writer.toString();
+ System.out.println("sjson===== >>>> " + sjson);
+
+ JSONObject obj = JSON.parseObject(sjson);
+ System.out.println("properties===== >>>> " + obj.getString("properties"));
+
+
+ }
+
+
+ /* // 先创建文件夹test
+ String filePath = "C:/test/test.shp";
+
+ String pointWkt="POINT (120.76164848270959 31.22001141278534)";
+ Point point = gCreator.createPointByWKT(pointWkt);
+
+ // Polygon【面】
+ String polygonWkt="POLYGON ((103.859188 34.695908, 103.85661 34.693788, 103.862027 34.69259, 103.863709 34.695078, 103.859188 34.695908))";
+ Polygon polygon = gCreator.createPolygonByWKT(polygonWkt);
+
+ // LineString【线】
+ String linestringWkt="LINESTRING(113.511315990174 41.7274734296674,113.51492087909 41.7284983348307,113.516079593384 41.727649586406,113.515907932007 41.7262243043929,113.514019656861 41.7247989907606,113.512131381714 41.7250872589898,113.51138036319 41.7256637915682,113.511315990174 41.7274734296674)";
+ LineString lineString = gCreator.createLineByWKT(linestringWkt);
+
+ // MultiPolygon【多面】
+ String multiPolyWkt = "MULTIPOLYGON(((101.870371 25.19228,101.873633 25.188183,101.880564 25.184416,101.886808 25.186028,101.892043 25.189969,101.896592 25.190163,101.903716 25.190785,101.905454 25.193464,101.899897 25.196202,101.894146 25.197911,101.891657 25.19826,101.886078 25.197658,101.884211145538 25.2007060137013,101.88172564506 25.1949712942389,101.87874 25.199619,101.874641 25.200998,101.868547 25.202415,101.863741 25.202415,101.85887 25.202842,101.854557 25.202182,101.852604 25.199736,101.852282 25.19628,101.854492 25.194183,101.855608 25.192668,101.863698 25.192105,101.870371 25.19228)))";
+ MultiPolygon multiPolygon = gCreator.createMulPolygonByWKT(multiPolyWkt);
+
+ // 几何对象的范围【矩形边界】
+ Envelope envelope = polygon.getEnvelopeInternal();
+ System.out.println(envelope);
+
+ // 往shp文件里面写几何对象
+ writeShpByGeom(filePath,point);*/
+
+
+ }
+
+
+ /**
+ * 通过shp文件路径,读取shp内容
+ * @param filePath 文件路径
+ */
+ public static ShpDatas readShpByPath(String filePath,Integer limit) throws Exception {
+
+ // 一个数据存储实现,允许从Shapefiles读取和写入
+ ShapefileDataStore shpDataStore = new ShapefileDataStore(new File(filePath).toURI().toURL());
+ // 设置编码【防止中文乱码】
+ shpDataStore.setCharset(StandardCharsets.UTF_8);
+
+ // getTypeNames:获取所有地理图层,这里我只取第一个【如果是数据表,取出的就是表名】
+ String typeName = shpDataStore.getTypeNames()[0];
+ System.out.println("shp【图层】名称:"+typeName);
+ FeatureCollection result = getFeatures(shpDataStore, typeName);
+
+ // 迭代特征集合
+ FeatureIterator iterator = result.features();
+
+ ShpDatas shpDatas = new ShpDatas();
+ shpDatas.setName(typeName);
+ shpDatas.setShpPath(filePath);
+ buildShpDatas(limit, iterator, shpDatas);
+ System.out.println("二、地理要素 数量:{},数据:{}" + result.size()+"," + JSON.toJSON(shpDatas));
+ iterator.close();
+ return shpDatas;
+ }
+
+
+ /**
+ * 根据数据源及图层名称拿到特征集合
+ * @param shpDataStore shp数据存储对象
+ * @param typeName 图层名称
+ * @return FeatureCollection
+ */
+ private static FeatureCollection getFeatures(ShapefileDataStore shpDataStore, String typeName) throws IOException {
+
+ // 通过此接口可以引用单个shapefile、数据库表等。与数据存储进行比较和约束
+ FeatureSource featureSource = shpDataStore.getFeatureSource(typeName);
+ // 一个用于处理FeatureCollection的实用工具类。提供一个获取FeatureCollection实例的机制
+ FeatureCollection result = featureSource.getFeatures();
+ System.out.println("地理要素【记录】:"+result.size()+"个");
+ System.out.println("==================================");
+ return result;
+ }
+
+ /**
+ * 构建shpDatas对象
+ * @param limit 要素查询限制数
+ * @param iterator 迭代器
+ * @param shpDatas shp封装的数据集
+ */
+ private static void buildShpDatas(Integer limit, FeatureIterator iterator, ShpDatas shpDatas) {
+ // 这里我们只迭代前limit个
+ int stop = 0;
+ while (iterator.hasNext()) {
+ if (stop > limit) {
+ break;
+ }
+ // 拿到一个特征
+ SimpleFeature feature = iterator.next();
+ // 取出特征里面的属性集合
+ Collection p = feature.getProperties();
+
+ // 遍历属性集合
+ Map prop = new HashMap<>();
+ for (Property pro : p) {
+ String key = pro.getName().toString();
+ String val;
+ if ("java.util.Date".equals(pro.getType().getBinding().getName())){
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
+ val = pro.getValue() ==null ? "" : dateFormat.format(pro.getValue());
+ }else{
+ val = pro.getValue()==null ?"":pro.getValue().toString();
+ }
+ prop.put(key, val);
+ System.out.println("key【字段】:"+key+"\t||value【值】:"+val);
+ }
+ System.out.println("\n============================ 序号:"+stop+"\n");
+ shpDatas.addProp(prop);
+ stop++;
+ } // end 最外层 while
+ }
+
+ /**
+ * 将一个几何对象写进shapefile
+ * @param filePath 文件路径
+ * @param geometry 几何对象
+ */
+ public static void writeShpByGeom(String filePath, Geometry geometry) throws Exception{
+
+ ShapefileDataStore ds = getshpDS(filePath, geometry);
+
+ FeatureWriter writer = ds.getFeatureWriter(ds.getTypeNames()[0],
+ Transaction.AUTO_COMMIT);
+
+ // Interface SimpleFeature:一个由固定列表值以已知顺序组成的SimpleFeatureType实例。
+ SimpleFeature feature = writer.next();
+ feature.setAttribute("name", "XXXX名称");
+ feature.setAttribute("path", "c:/test");
+ feature.setAttribute("the_geom", geometry);
+ feature.setAttribute("id", 1010L);
+ feature.setAttribute("des", "XXXX描述");
+
+ System.out.println("========= 写入【"+geometry.getGeometryType()+"】成功 !=========");
+
+ // 写入
+ writer.write();
+ // 关闭
+ writer.close();
+ // 释放资源
+ ds.dispose();
+ }
+
+
+ /**
+ * 将一个几何对象写进shapefile
+ * @param shpInfo shp信息
+ */
+ public static ResponseResult writeShpByGeom(ShpInfo shpInfo) throws Exception{
+
+ // 特殊字符串解析器
+ StringTokenReader reader = new StringTokenReader();
+ // 根据几何对象的wkt字符串,反解【解析】成Geometry对象
+ Geometry geometry = reader.read(shpInfo.getGeom());
+ // 拿到shp对象所在的目录【文件夹】
+ String path = shpInfo.getPath();
+ File file = new File(path);
+ if(!file.exists()){
+ file.mkdir();
+ }
+
+ if(!file.isDirectory()){
+ return new ResponseResult(ResponseMessage.BAD_REQUEST,"path不是有效的文件夹" );
+ }
+
+ String filePath = shpInfo.getPath()+"/"+shpInfo.getName()+".shp";
+ ShapefileDataStore ds = getshpDS(filePath, geometry);
+ String typeName = ds.getTypeNames()[0];
+ FeatureWriter writer ;
+ if(shpInfo.isAppendWrite()){
+ // 追加写几何对象
+ writer = ds.getFeatureWriterAppend(typeName, Transaction.AUTO_COMMIT);
+ }else{
+ // 覆盖写几何对象
+ writer = ds.getFeatureWriter(typeName, Transaction.AUTO_COMMIT);
+ }
+
+ // Interface SimpleFeature:一个由固定列表值以已知顺序组成的SimpleFeatureType实例。
+ SimpleFeature feature = writer.next();
+ feature.setAttribute("name", shpInfo.getName());
+ feature.setAttribute("path", shpInfo.getPath());
+ feature.setAttribute("the_geom", geometry);
+ feature.setAttribute("id", shpInfo.getId());
+ feature.setAttribute("des", shpInfo.getDes());
+
+ System.out.println("========= 写入【"+geometry.getGeometryType()+"】成功 !=========");
+
+ // 写入
+ writer.write();
+ // 关闭
+ writer.close();
+ // 释放资源
+ ds.dispose();
+ // 返回创建成功后的shp文件路径
+ return new ResponseResult(ResponseMessage.OK,filePath);
+
+ }
+
+ /**
+ * 拿到配置好的DataStore
+ * @param filePath 文件路径
+ * @param geometry 几何对象
+ * @return ShapefileDataStore
+ */
+ private static ShapefileDataStore getshpDS(String filePath, Geometry geometry) throws IOException {
+ // 1.创建shape文件对象
+ File file = new File(filePath);
+
+ Map params = new HashMap<>();
+
+ // 2、用于捕获参数需求的数据类 URLP:url to the .shp file.
+ params.put(ShapefileDataStoreFactory.URLP.key, file.toURI().toURL());
+
+ // 3、创建一个新的数据存储【如果存在,则不创建】
+ ShapefileDataStore ds = (ShapefileDataStore) new ShapefileDataStoreFactory().createNewDataStore(params);
+
+ // 4、定义图形信息和属性信息 -- SimpleFeatureTypeBuilder 构造简单特性类型的构造器
+ SimpleFeatureTypeBuilder tBuilder = new SimpleFeatureTypeBuilder();
+
+ // 5、设置 -- WGS84:一个二维地理坐标参考系统,使用WGS84数据
+ tBuilder.setCRS(DefaultGeographicCRS.WGS84);
+ tBuilder.setName("shapefile");
+
+ // 添加名称
+ tBuilder.add("name", String.class);
+ // 添加shp所在目录名称
+ tBuilder.add("path", String.class);
+ // 添加 一个几何对象
+ tBuilder.add("the_geom", geometry.getClass());
+ // 添加一个id
+ tBuilder.add("id", Long.class);
+ // 添加描述
+ tBuilder.add("des", String.class);
+
+ // 设置此数据存储的特征类型
+ ds.createSchema(tBuilder.buildFeatureType());
+ // 设置编码
+ ds.setCharset(StandardCharsets.UTF_8);
+ return ds;
+ }
+
+ /**
+ * 打开shp文件,获取地图内容
+ * @param filePath 文件路径
+ * @param isOpenByChoose 是否自定义打开shp文件
+ * @throws Exception
+ */
+ public static MapContent getMapContentByPath(String filePath,boolean isOpenByChoose,String color) throws Exception{
+
+ File file;
+ if(isOpenByChoose){
+ // 1.1、 数据源选择 shp扩展类型的
+ file = JFileDataStoreChooser.showOpenFile("shp", null);
+ }else{
+ // 1.2、根据路径拿到文件对象
+ file = new File(filePath);
+ }
+
+ if(file==null){
+ return null;
+ }
+ // 2、得到打开的文件的数据源
+ FileDataStore store = FileDataStoreFinder.getDataStore(file);
+
+ // 3、设置数据源的编码,防止中文乱码
+ ((ShapefileDataStore)store).setCharset(Charset.forName("UTF-8"));
+
+ /**
+ * 使用FeatureSource管理要素数据
+ * 使用Style(SLD)管理样式
+ * 使用Layer管理显示
+ * 使用MapContent管理所有地图相关信息
+ */
+
+ // 4、以java对象的方式访问地理信息 -- 简单地理要素
+ SimpleFeatureSource featureSource = store.getFeatureSource();
+
+ bounds = featureSource.getBounds();
+
+ // 5、创建映射内容,并将我们的shapfile添加进去
+ MapContent mapContent = new MapContent();
+
+ // 6、设置容器的标题
+ mapContent.setTitle("Appleyk's GeoTools");
+ Color color1;
+ if(color == null || "".equals(color.toLowerCase())){
+ color1 = Color.BLACK;
+ }else if("red".equals(color.toLowerCase())){
+ color1 = Color.RED;
+ }else if("green".equals(color.toLowerCase())){
+ color1 = Color.GREEN;
+ }else if("blue".equals(color.toLowerCase())){
+ color1 = Color.BLUE;
+ }else{
+ color1 = Color.getColor(color);
+ }
+
+ // 7、创建简单样式 【颜色填充】
+ Style style = SLD.createSimpleStyle(featureSource.getSchema(),color1);
+
+ // 8、显示【shapfile地理信息+样式】
+ Layer layer = new FeatureLayer(featureSource, style);
+
+ // 9、将显示添加进map容器
+ mapContent.addLayer(layer);
+
+ return mapContent;
+ }
+
+ public static void showMap(MapContent mapContent){
+ JMapFrame.showMap(mapContent);
+ }
+
+ /**
+ * shp文件转Image【格式定png】
+ * @param shpFilePath shp目标文件
+ * @param destImagePath 转成图片的文件 == 如果没有,转成的图片写进response输出流里
+ * @param response 响应流
+ * @throws Exception
+ */
+ public static void shp2Image(String shpFilePath,String destImagePath,String color, HttpServletResponse response) throws Exception{
+
+ // 流渲染器
+ StreamingRenderer renderer = new StreamingRenderer();
+ MapContent mapContent = getMapContentByPath(shpFilePath,false,color );
+ renderer.setMapContent(mapContent);
+ Rectangle imageBounds = new Rectangle(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ BufferedImage dumpImage = new BufferedImage(IMAGE_WIDTH, IMAGE_HEIGHT, BufferedImage.TYPE_INT_RGB);
+ Graphics2D g2d = dumpImage.createGraphics();
+ g2d.fillRect(0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);
+ g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ renderer.paint(g2d, imageBounds, bounds);
+ g2d.dispose();
+ if(destImagePath == null || "".equals(destImagePath)){
+ ImageIO.write(dumpImage, "png", response.getOutputStream());
+ }else{
+ ImageIO.write(dumpImage, "png", new File(destImagePath));
+ }
+ }
+
+
+}
diff --git a/src/main/java/com/appleyk/pojos/ShpDatas.java b/src/main/java/com/appleyk/pojos/ShpDatas.java
new file mode 100644
index 0000000..57ab150
--- /dev/null
+++ b/src/main/java/com/appleyk/pojos/ShpDatas.java
@@ -0,0 +1,55 @@
+package com.appleyk.pojos;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * shp数据模型对象 -- 针对读
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 下午 2018年10月24日16:31:30
+ */
+public class ShpDatas {
+
+ private String name;
+
+ /** 属性【字段】集合*/
+ private List> props;
+
+ /** shp文件路径地址*/
+ private String shpPath;
+
+ public ShpDatas(){
+ props = new ArrayList<>();
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List> getProps() {
+ return props;
+ }
+
+ public void setProps(List> props) {
+ this.props = props;
+ }
+
+ public void addProp(Map prop){
+ this.props.add(prop);
+ }
+
+ public String getShpPath() {
+ return shpPath;
+ }
+
+ public void setShpPath(String shpPath) {
+ this.shpPath = shpPath;
+ }
+
+}
diff --git a/src/main/java/com/appleyk/pojos/ShpInfo.java b/src/main/java/com/appleyk/pojos/ShpInfo.java
new file mode 100644
index 0000000..67bd376
--- /dev/null
+++ b/src/main/java/com/appleyk/pojos/ShpInfo.java
@@ -0,0 +1,92 @@
+package com.appleyk.pojos;
+
+/**
+ * shp业务模型对象 -- 针对写
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 上午 2018年10月25日09:17:44
+ */
+public class ShpInfo {
+
+
+ /**
+ * 图层名称
+ */
+ private String name;
+
+ /**
+ * 往哪个路径下写shp
+ */
+ private String path;
+
+ /**
+ * 几何对象WKT
+ */
+ private String geom;
+
+ /**
+ * 标识
+ */
+ private String id;
+
+ /**
+ * 描述
+ */
+ private String des;
+
+ /**
+ * 是否追加写
+ */
+ private boolean appendWrite = false;
+
+ public ShpInfo(){
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getPath() {
+ return path;
+ }
+
+ public void setPath(String path) {
+ this.path = path;
+ }
+
+ public String getGeom() {
+ return geom;
+ }
+
+ public void setGeom(String geom) {
+ this.geom = geom;
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getDes() {
+ return des;
+ }
+
+ public void setDes(String des) {
+ this.des = des;
+ }
+
+ public boolean isAppendWrite() {
+ return appendWrite;
+ }
+
+ public void setAppendWrite(boolean appendWrite) {
+ this.appendWrite = appendWrite;
+ }
+}
diff --git a/src/main/java/com/appleyk/result/ResponseMessage.java b/src/main/java/com/appleyk/result/ResponseMessage.java
new file mode 100644
index 0000000..1160ef9
--- /dev/null
+++ b/src/main/java/com/appleyk/result/ResponseMessage.java
@@ -0,0 +1,31 @@
+package com.appleyk.result;
+
+public enum ResponseMessage {
+
+ /**
+ * 成功
+ */
+ OK(200,"成功"),
+
+ /**
+ * 失败
+ */
+ BAD_REQUEST(400,"错误的请求");
+
+
+ private final int status;
+ private final String message;
+
+ ResponseMessage(int status, String message){
+ this.status = status;
+ this.message = message;
+ }
+
+ public int getStatus() {
+ return status;
+ }
+ public String getMessage() {
+ return message;
+ }
+
+}
diff --git a/src/main/java/com/appleyk/result/ResponseResult.java b/src/main/java/com/appleyk/result/ResponseResult.java
new file mode 100644
index 0000000..b114cb6
--- /dev/null
+++ b/src/main/java/com/appleyk/result/ResponseResult.java
@@ -0,0 +1,153 @@
+package com.appleyk.result;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ResponseResult implements Serializable {
+
+ private static final long serialVersionUID = 2719931935414658118L;
+
+ private final Integer status;
+
+ private final String message;
+
+ @JsonInclude(value = Include.NON_NULL)
+ private final Object data;
+
+ @JsonInclude(value = Include.NON_EMPTY)
+ private final String[] exceptions;
+
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ private final Date timestamp;
+
+ public ResponseResult(Integer status, String message) {
+
+ super();
+ this.status = status;
+ this.message = message;
+ this.data = null;
+ this.timestamp = new Date();
+ this.exceptions = null;
+ }
+
+ public ResponseResult() {
+
+ super();
+ this.status = null;
+ this.message = null;
+ this.data = null;
+ this.timestamp = new Date();
+ this.exceptions = null;
+
+ }
+
+ public ResponseResult(ResponseMessage rm){
+
+ super();
+ this.status = rm.getStatus();
+ this.message = rm.getMessage();
+ this.data = null;
+ this.timestamp = new Date();
+ this.exceptions = null;
+ }
+
+ public ResponseResult(ResponseMessage rm, Object data){
+ super();
+ this.status = rm.getStatus();
+ this.message = rm.getMessage();
+ this.data = data;
+ this.timestamp = new Date();
+ this.exceptions = null;
+ }
+
+ public ResponseResult(ResponseMessage rm, Long data){
+ super();
+ this.status = rm.getStatus();
+ this.message = rm.getMessage();
+ HashMap result = new HashMap<>();
+ result.put("id", data);
+ this.data = result;
+ this.timestamp = new Date();
+ this.exceptions = null;
+ }
+
+
+ public ResponseResult(Integer status, String message, Object data) {
+ super();
+ this.status = status;
+ this.message = message;
+ this.data = data;
+ this.timestamp = new Date();
+ this.exceptions = null;
+ }
+
+ public ResponseResult(Integer status, String message, String key, Object value) {
+ super();
+ this.status = status;
+ this.message = message;
+ Map map = new HashMap();
+
+ if (key == null || ("").equals(key)) {
+ map.put("key", value);
+ } else {
+ map.put(key, value);
+ }
+ this.data = map;
+ this.timestamp = new Date();
+ this.exceptions = null;
+
+ }
+
+ public ResponseResult(Integer status, Throwable ex) {
+ super();
+ this.status = status;
+ this.message = ex.getMessage();
+ this.data = null;
+ StackTraceElement[] stackTeanceElement = ex.getStackTrace();
+ this.exceptions = new String[stackTeanceElement.length];
+ for (int i = 0; i < stackTeanceElement.length; i++) {
+ this.exceptions[i] = stackTeanceElement[i].toString();
+ }
+ this.timestamp = new Date();
+ }
+
+ public ResponseResult(Integer status, String message, Throwable ex) {
+
+ super();
+ this.status = status;
+ this.message = message;
+ this.data = null;
+ StackTraceElement[] stackTeanceElement = ex.getStackTrace();
+ this.exceptions = new String[stackTeanceElement.length];
+ for (int i = 0; i < stackTeanceElement.length; i++) {
+ this.exceptions[i] = stackTeanceElement[i].toString();
+ }
+ this.timestamp = new Date();
+
+ }
+ public Integer getStatus() {
+ return status;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public Object getData() {
+ return data;
+ }
+
+ public String[] getExceptions() {
+ return exceptions;
+ }
+
+ public Date getTimestamp() {
+ return timestamp;
+ }
+}
diff --git a/src/main/java/com/appleyk/service/ShpService.java b/src/main/java/com/appleyk/service/ShpService.java
new file mode 100644
index 0000000..7acb5fa
--- /dev/null
+++ b/src/main/java/com/appleyk/service/ShpService.java
@@ -0,0 +1,33 @@
+package com.appleyk.service;
+
+import com.appleyk.geotools.ShpTools;
+import com.appleyk.pojos.ShpDatas;
+import com.appleyk.pojos.ShpInfo;
+import com.appleyk.result.ResponseMessage;
+import com.appleyk.result.ResponseResult;
+import org.springframework.stereotype.Service;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * Shp业务逻辑类
+ * @author Appleyk
+ * @blob https://blog.csdn.net/appleyk
+ * @date Created on 下午 2018年10月24日17:17:46
+ */
+@Service
+public class ShpService {
+
+ public ResponseResult getShpDatas(String shpPath,Integer limit) throws Exception{
+ ShpDatas shpDatas = ShpTools.readShpByPath(shpPath, limit);
+ return new ResponseResult(ResponseMessage.OK,shpDatas);
+ }
+
+ public void showShp(String shpPath,String imagePath,String color, HttpServletResponse response) throws Exception{
+ ShpTools.shp2Image(shpPath, imagePath ,color,response);
+ }
+
+ public ResponseResult writeShp(ShpInfo shpInfo) throws Exception{
+ return ShpTools.writeShpByGeom(shpInfo);
+ }
+}
diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties
new file mode 100644
index 0000000..bcc3bee
--- /dev/null
+++ b/src/main/resources/application-dev.properties
@@ -0,0 +1,3 @@
+server.port=8081
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/src/main/resources/application-prod.properties b/src/main/resources/application-prod.properties
new file mode 100644
index 0000000..209423f
--- /dev/null
+++ b/src/main/resources/application-prod.properties
@@ -0,0 +1,3 @@
+server.port=8082
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/src/main/resources/application-test.properties b/src/main/resources/application-test.properties
new file mode 100644
index 0000000..ed4a1b1
--- /dev/null
+++ b/src/main/resources/application-test.properties
@@ -0,0 +1,3 @@
+server.port=8083
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..24be2c7
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,23 @@
+#SpringApplication\u5C06\u4ECE\u4EE5\u4E0B\u4F4D\u7F6E\u52A0\u8F7Dapplication.properties\u6587\u4EF6\uFF0C \u5E76\u628A\u5B83\u4EEC\u6DFB\u52A0\u5230Spring Environment\u4E2D\uFF1A
+#1. \u5F53\u524D\u76EE\u5F55\u4E0B\u7684\u4E00\u4E2A/config\u5B50\u76EE\u5F55
+#2. \u5F53\u524D\u76EE\u5F55
+#3. \u4E00\u4E2Aclasspath\u4E0B\u7684/config\u5305
+#4. classpath\u6839\u8DEF\u5F84\uFF08root\uFF09
+#\u8FD9\u4E2A\u5217\u8868\u662F\u6309\u4F18\u5148\u7EA7\u6392\u5E8F\u7684\uFF08\u5217\u8868\u4E2D\u4F4D\u7F6E\u9AD8\u7684\u5C06\u8986\u76D6\u4F4D\u7F6E\u4F4E\u7684\uFF09 \u3002
+#\u6CE8\uFF1A\u4F60\u53EF\u4EE5\u4F7F\u7528YAML\uFF08'.yml'\uFF09 \u6587\u4EF6\u66FF\u4EE3'.properties'
+
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- dev\uFF1A \u672C\u5730\u5F00\u53D1\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8081\u3011
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- prod\uFF1A\u7EBF\u4E0A\u751F\u4EA7\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8082\u3011
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- test\uFF1A\u7EBF\u4E0A\u6D4B\u8BD5\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8083\u3011
+
+#\u5F00\u542F\u591A\u6587\u4EF6\u4E0A\u4F20
+spring.servlet.multipart.enabled=true
+
+spring.profiles.active = dev
+
+#\u5728application.properties\u6587\u4EF6\u4E2D\u5F15\u5165\u65E5\u5FD7\u914D\u7F6E\u6587\u4EF6
+#===================================== log =============================
+logging.config=classpath:logback-boot.xml
+
+
+
diff --git a/src/main/resources/logback-boot.xml b/src/main/resources/logback-boot.xml
new file mode 100644
index 0000000..6f93aa0
--- /dev/null
+++ b/src/main/resources/logback-boot.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+ UTF-8
+
+
+
+
+
+
+
+ opt/spring-boot-web/logs/sys.log
+
+
+
+
+
+ log/sys.%d.%i.log
+
+ 30
+
+
+ 10MB
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+
+ UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/static/ReadMe b/src/main/resources/static/ReadMe
new file mode 100644
index 0000000..17f8377
--- /dev/null
+++ b/src/main/resources/static/ReadMe
@@ -0,0 +1,12 @@
+本项目的测试shp均在shpTest文件夹下
+
+============== 一个shp只支持一种几何类型
+
+Point类型 : 某地方的大棚数据
+LineString类型: 中国铁路网【部分】
+Polygon类型 : 中国建筑物【部分 -- 北京故宫】
+
+==============
+
+E:\Spring-boot\Spring-Boot-Shaper\src\main\resources\static\shpTest[Point]\dp_tl.shp
+E:\Spring-boot\Spring-Boot-Shaper\src\main\resources\static\shpTest[Polygon]\china_building_part.shp
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.cpg b/src/main/resources/static/shpTest[LineString]/china_railways.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/src/main/resources/static/shpTest[LineString]/china_railways.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.dbf b/src/main/resources/static/shpTest[LineString]/china_railways.dbf
new file mode 100644
index 0000000..d7baed4
Binary files /dev/null and b/src/main/resources/static/shpTest[LineString]/china_railways.dbf differ
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.prj b/src/main/resources/static/shpTest[LineString]/china_railways.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/src/main/resources/static/shpTest[LineString]/china_railways.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.qpj b/src/main/resources/static/shpTest[LineString]/china_railways.qpj
new file mode 100644
index 0000000..5fbc831
--- /dev/null
+++ b/src/main/resources/static/shpTest[LineString]/china_railways.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.shp b/src/main/resources/static/shpTest[LineString]/china_railways.shp
new file mode 100644
index 0000000..5c48a12
Binary files /dev/null and b/src/main/resources/static/shpTest[LineString]/china_railways.shp differ
diff --git a/src/main/resources/static/shpTest[LineString]/china_railways.shx b/src/main/resources/static/shpTest[LineString]/china_railways.shx
new file mode 100644
index 0000000..9accd8b
Binary files /dev/null and b/src/main/resources/static/shpTest[LineString]/china_railways.shx differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.dbf b/src/main/resources/static/shpTest[Point]/dp_tl.dbf
new file mode 100644
index 0000000..1054fc6
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.dbf differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.prj b/src/main/resources/static/shpTest[Point]/dp_tl.prj
new file mode 100644
index 0000000..f45cbad
--- /dev/null
+++ b/src/main/resources/static/shpTest[Point]/dp_tl.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.qix b/src/main/resources/static/shpTest[Point]/dp_tl.qix
new file mode 100644
index 0000000..1740d31
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.qix differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.sbn b/src/main/resources/static/shpTest[Point]/dp_tl.sbn
new file mode 100644
index 0000000..e674979
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.sbn differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.sbx b/src/main/resources/static/shpTest[Point]/dp_tl.sbx
new file mode 100644
index 0000000..c60a57d
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.sbx differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.shp b/src/main/resources/static/shpTest[Point]/dp_tl.shp
new file mode 100644
index 0000000..9899c49
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.shp differ
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.shp.xml b/src/main/resources/static/shpTest[Point]/dp_tl.shp.xml
new file mode 100644
index 0000000..ab10cb2
--- /dev/null
+++ b/src/main/resources/static/shpTest[Point]/dp_tl.shp.xml
@@ -0,0 +1,2 @@
+
+20180919 09584500 1.0 TRUE CalculateField dp_tl z [FID] VB # CalculateField dp_tl z [FID] VB # CalculateField dp_tl z "[z] +1" VB #
diff --git a/src/main/resources/static/shpTest[Point]/dp_tl.shx b/src/main/resources/static/shpTest[Point]/dp_tl.shx
new file mode 100644
index 0000000..6939a93
Binary files /dev/null and b/src/main/resources/static/shpTest[Point]/dp_tl.shx differ
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.cpg b/src/main/resources/static/shpTest[Polygon]/china_building_part.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/src/main/resources/static/shpTest[Polygon]/china_building_part.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.dbf b/src/main/resources/static/shpTest[Polygon]/china_building_part.dbf
new file mode 100644
index 0000000..3cf70e0
Binary files /dev/null and b/src/main/resources/static/shpTest[Polygon]/china_building_part.dbf differ
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.prj b/src/main/resources/static/shpTest[Polygon]/china_building_part.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/src/main/resources/static/shpTest[Polygon]/china_building_part.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.qix b/src/main/resources/static/shpTest[Polygon]/china_building_part.qix
new file mode 100644
index 0000000..73f95fc
Binary files /dev/null and b/src/main/resources/static/shpTest[Polygon]/china_building_part.qix differ
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.qpj b/src/main/resources/static/shpTest[Polygon]/china_building_part.qpj
new file mode 100644
index 0000000..5fbc831
--- /dev/null
+++ b/src/main/resources/static/shpTest[Polygon]/china_building_part.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.shp b/src/main/resources/static/shpTest[Polygon]/china_building_part.shp
new file mode 100644
index 0000000..82a85c0
Binary files /dev/null and b/src/main/resources/static/shpTest[Polygon]/china_building_part.shp differ
diff --git a/src/main/resources/static/shpTest[Polygon]/china_building_part.shx b/src/main/resources/static/shpTest[Polygon]/china_building_part.shx
new file mode 100644
index 0000000..d325adc
Binary files /dev/null and b/src/main/resources/static/shpTest[Polygon]/china_building_part.shx differ
diff --git a/src/test/java/com/appleyk/SpringbootshaperApplicationTests.java b/src/test/java/com/appleyk/SpringbootshaperApplicationTests.java
new file mode 100644
index 0000000..5f7174f
--- /dev/null
+++ b/src/test/java/com/appleyk/SpringbootshaperApplicationTests.java
@@ -0,0 +1,16 @@
+package com.appleyk;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class SpringbootshaperApplicationTests {
+
+ @Test
+ public void contextLoads() {
+ }
+
+}
diff --git a/target/classes/application-dev.properties b/target/classes/application-dev.properties
new file mode 100644
index 0000000..bcc3bee
--- /dev/null
+++ b/target/classes/application-dev.properties
@@ -0,0 +1,3 @@
+server.port=8081
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/target/classes/application-prod.properties b/target/classes/application-prod.properties
new file mode 100644
index 0000000..209423f
--- /dev/null
+++ b/target/classes/application-prod.properties
@@ -0,0 +1,3 @@
+server.port=8082
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/target/classes/application-test.properties b/target/classes/application-test.properties
new file mode 100644
index 0000000..ed4a1b1
--- /dev/null
+++ b/target/classes/application-test.properties
@@ -0,0 +1,3 @@
+server.port=8083
+server.servlet.session.timeout=10
+server.tomcat.uri-encoding=utf8
diff --git a/target/classes/application.properties b/target/classes/application.properties
new file mode 100644
index 0000000..24be2c7
--- /dev/null
+++ b/target/classes/application.properties
@@ -0,0 +1,23 @@
+#SpringApplication\u5C06\u4ECE\u4EE5\u4E0B\u4F4D\u7F6E\u52A0\u8F7Dapplication.properties\u6587\u4EF6\uFF0C \u5E76\u628A\u5B83\u4EEC\u6DFB\u52A0\u5230Spring Environment\u4E2D\uFF1A
+#1. \u5F53\u524D\u76EE\u5F55\u4E0B\u7684\u4E00\u4E2A/config\u5B50\u76EE\u5F55
+#2. \u5F53\u524D\u76EE\u5F55
+#3. \u4E00\u4E2Aclasspath\u4E0B\u7684/config\u5305
+#4. classpath\u6839\u8DEF\u5F84\uFF08root\uFF09
+#\u8FD9\u4E2A\u5217\u8868\u662F\u6309\u4F18\u5148\u7EA7\u6392\u5E8F\u7684\uFF08\u5217\u8868\u4E2D\u4F4D\u7F6E\u9AD8\u7684\u5C06\u8986\u76D6\u4F4D\u7F6E\u4F4E\u7684\uFF09 \u3002
+#\u6CE8\uFF1A\u4F60\u53EF\u4EE5\u4F7F\u7528YAML\uFF08'.yml'\uFF09 \u6587\u4EF6\u66FF\u4EE3'.properties'
+
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- dev\uFF1A \u672C\u5730\u5F00\u53D1\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8081\u3011
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- prod\uFF1A\u7EBF\u4E0A\u751F\u4EA7\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8082\u3011
+#Spring-Boot\u591A\u73AF\u5883\u914D\u7F6E -- test\uFF1A\u7EBF\u4E0A\u6D4B\u8BD5\u73AF\u5883\u3010\u7AEF\u53E3\uFF1A8083\u3011
+
+#\u5F00\u542F\u591A\u6587\u4EF6\u4E0A\u4F20
+spring.servlet.multipart.enabled=true
+
+spring.profiles.active = dev
+
+#\u5728application.properties\u6587\u4EF6\u4E2D\u5F15\u5165\u65E5\u5FD7\u914D\u7F6E\u6587\u4EF6
+#===================================== log =============================
+logging.config=classpath:logback-boot.xml
+
+
+
diff --git a/target/classes/com/appleyk/IO/StringTokenReader.class b/target/classes/com/appleyk/IO/StringTokenReader.class
new file mode 100644
index 0000000..d715609
Binary files /dev/null and b/target/classes/com/appleyk/IO/StringTokenReader.class differ
diff --git a/target/classes/com/appleyk/ShpApplication.class b/target/classes/com/appleyk/ShpApplication.class
new file mode 100644
index 0000000..519a625
Binary files /dev/null and b/target/classes/com/appleyk/ShpApplication.class differ
diff --git a/target/classes/com/appleyk/controller/ShpController.class b/target/classes/com/appleyk/controller/ShpController.class
new file mode 100644
index 0000000..9fc4e5f
Binary files /dev/null and b/target/classes/com/appleyk/controller/ShpController.class differ
diff --git a/target/classes/com/appleyk/exception/GlobalExceptionHandler.class b/target/classes/com/appleyk/exception/GlobalExceptionHandler.class
new file mode 100644
index 0000000..9110ca8
Binary files /dev/null and b/target/classes/com/appleyk/exception/GlobalExceptionHandler.class differ
diff --git a/target/classes/com/appleyk/geotools/GeoUtils.class b/target/classes/com/appleyk/geotools/GeoUtils.class
new file mode 100644
index 0000000..f5427b2
Binary files /dev/null and b/target/classes/com/appleyk/geotools/GeoUtils.class differ
diff --git a/target/classes/com/appleyk/geotools/GeometryCreator.class b/target/classes/com/appleyk/geotools/GeometryCreator.class
new file mode 100644
index 0000000..3c69f12
Binary files /dev/null and b/target/classes/com/appleyk/geotools/GeometryCreator.class differ
diff --git a/target/classes/com/appleyk/geotools/ShapeTools.class b/target/classes/com/appleyk/geotools/ShapeTools.class
new file mode 100644
index 0000000..9a51865
Binary files /dev/null and b/target/classes/com/appleyk/geotools/ShapeTools.class differ
diff --git a/target/classes/com/appleyk/geotools/ShpTools.class b/target/classes/com/appleyk/geotools/ShpTools.class
new file mode 100644
index 0000000..0234281
Binary files /dev/null and b/target/classes/com/appleyk/geotools/ShpTools.class differ
diff --git a/target/classes/com/appleyk/pojos/ShpDatas.class b/target/classes/com/appleyk/pojos/ShpDatas.class
new file mode 100644
index 0000000..8cf4871
Binary files /dev/null and b/target/classes/com/appleyk/pojos/ShpDatas.class differ
diff --git a/target/classes/com/appleyk/pojos/ShpInfo.class b/target/classes/com/appleyk/pojos/ShpInfo.class
new file mode 100644
index 0000000..538efc4
Binary files /dev/null and b/target/classes/com/appleyk/pojos/ShpInfo.class differ
diff --git a/target/classes/com/appleyk/result/ResponseMessage.class b/target/classes/com/appleyk/result/ResponseMessage.class
new file mode 100644
index 0000000..6165869
Binary files /dev/null and b/target/classes/com/appleyk/result/ResponseMessage.class differ
diff --git a/target/classes/com/appleyk/result/ResponseResult.class b/target/classes/com/appleyk/result/ResponseResult.class
new file mode 100644
index 0000000..6937ec4
Binary files /dev/null and b/target/classes/com/appleyk/result/ResponseResult.class differ
diff --git a/target/classes/com/appleyk/service/ShpService.class b/target/classes/com/appleyk/service/ShpService.class
new file mode 100644
index 0000000..39949e7
Binary files /dev/null and b/target/classes/com/appleyk/service/ShpService.class differ
diff --git a/target/classes/logback-boot.xml b/target/classes/logback-boot.xml
new file mode 100644
index 0000000..6f93aa0
--- /dev/null
+++ b/target/classes/logback-boot.xml
@@ -0,0 +1,53 @@
+
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+ UTF-8
+
+
+
+
+
+
+
+ opt/spring-boot-web/logs/sys.log
+
+
+
+
+
+ log/sys.%d.%i.log
+
+ 30
+
+
+ 10MB
+
+
+
+
+
+ %d %p (%file:%line\)- %m%n
+
+
+ UTF-8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/target/classes/static/ReadMe b/target/classes/static/ReadMe
new file mode 100644
index 0000000..17f8377
--- /dev/null
+++ b/target/classes/static/ReadMe
@@ -0,0 +1,12 @@
+本项目的测试shp均在shpTest文件夹下
+
+============== 一个shp只支持一种几何类型
+
+Point类型 : 某地方的大棚数据
+LineString类型: 中国铁路网【部分】
+Polygon类型 : 中国建筑物【部分 -- 北京故宫】
+
+==============
+
+E:\Spring-boot\Spring-Boot-Shaper\src\main\resources\static\shpTest[Point]\dp_tl.shp
+E:\Spring-boot\Spring-Boot-Shaper\src\main\resources\static\shpTest[Polygon]\china_building_part.shp
\ No newline at end of file
diff --git a/target/classes/static/shpTest[LineString]/china_railways.cpg b/target/classes/static/shpTest[LineString]/china_railways.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/target/classes/static/shpTest[LineString]/china_railways.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/target/classes/static/shpTest[LineString]/china_railways.dbf b/target/classes/static/shpTest[LineString]/china_railways.dbf
new file mode 100644
index 0000000..d7baed4
Binary files /dev/null and b/target/classes/static/shpTest[LineString]/china_railways.dbf differ
diff --git a/target/classes/static/shpTest[LineString]/china_railways.prj b/target/classes/static/shpTest[LineString]/china_railways.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/target/classes/static/shpTest[LineString]/china_railways.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/target/classes/static/shpTest[LineString]/china_railways.qpj b/target/classes/static/shpTest[LineString]/china_railways.qpj
new file mode 100644
index 0000000..5fbc831
--- /dev/null
+++ b/target/classes/static/shpTest[LineString]/china_railways.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/target/classes/static/shpTest[LineString]/china_railways.shp b/target/classes/static/shpTest[LineString]/china_railways.shp
new file mode 100644
index 0000000..5c48a12
Binary files /dev/null and b/target/classes/static/shpTest[LineString]/china_railways.shp differ
diff --git a/target/classes/static/shpTest[LineString]/china_railways.shx b/target/classes/static/shpTest[LineString]/china_railways.shx
new file mode 100644
index 0000000..9accd8b
Binary files /dev/null and b/target/classes/static/shpTest[LineString]/china_railways.shx differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.dbf b/target/classes/static/shpTest[Point]/dp_tl.dbf
new file mode 100644
index 0000000..1054fc6
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.dbf differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.prj b/target/classes/static/shpTest[Point]/dp_tl.prj
new file mode 100644
index 0000000..f45cbad
--- /dev/null
+++ b/target/classes/static/shpTest[Point]/dp_tl.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]]
\ No newline at end of file
diff --git a/target/classes/static/shpTest[Point]/dp_tl.qix b/target/classes/static/shpTest[Point]/dp_tl.qix
new file mode 100644
index 0000000..1740d31
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.qix differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.sbn b/target/classes/static/shpTest[Point]/dp_tl.sbn
new file mode 100644
index 0000000..e674979
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.sbn differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.sbx b/target/classes/static/shpTest[Point]/dp_tl.sbx
new file mode 100644
index 0000000..c60a57d
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.sbx differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.shp b/target/classes/static/shpTest[Point]/dp_tl.shp
new file mode 100644
index 0000000..9899c49
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.shp differ
diff --git a/target/classes/static/shpTest[Point]/dp_tl.shp.xml b/target/classes/static/shpTest[Point]/dp_tl.shp.xml
new file mode 100644
index 0000000..ab10cb2
--- /dev/null
+++ b/target/classes/static/shpTest[Point]/dp_tl.shp.xml
@@ -0,0 +1,2 @@
+
+20180919 09584500 1.0 TRUE CalculateField dp_tl z [FID] VB # CalculateField dp_tl z [FID] VB # CalculateField dp_tl z "[z] +1" VB #
diff --git a/target/classes/static/shpTest[Point]/dp_tl.shx b/target/classes/static/shpTest[Point]/dp_tl.shx
new file mode 100644
index 0000000..6939a93
Binary files /dev/null and b/target/classes/static/shpTest[Point]/dp_tl.shx differ
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.cpg b/target/classes/static/shpTest[Polygon]/china_building_part.cpg
new file mode 100644
index 0000000..3ad133c
--- /dev/null
+++ b/target/classes/static/shpTest[Polygon]/china_building_part.cpg
@@ -0,0 +1 @@
+UTF-8
\ No newline at end of file
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.dbf b/target/classes/static/shpTest[Polygon]/china_building_part.dbf
new file mode 100644
index 0000000..3cf70e0
Binary files /dev/null and b/target/classes/static/shpTest[Polygon]/china_building_part.dbf differ
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.prj b/target/classes/static/shpTest[Polygon]/china_building_part.prj
new file mode 100644
index 0000000..a30c00a
--- /dev/null
+++ b/target/classes/static/shpTest[Polygon]/china_building_part.prj
@@ -0,0 +1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.qix b/target/classes/static/shpTest[Polygon]/china_building_part.qix
new file mode 100644
index 0000000..73f95fc
Binary files /dev/null and b/target/classes/static/shpTest[Polygon]/china_building_part.qix differ
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.qpj b/target/classes/static/shpTest[Polygon]/china_building_part.qpj
new file mode 100644
index 0000000..5fbc831
--- /dev/null
+++ b/target/classes/static/shpTest[Polygon]/china_building_part.qpj
@@ -0,0 +1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.shp b/target/classes/static/shpTest[Polygon]/china_building_part.shp
new file mode 100644
index 0000000..82a85c0
Binary files /dev/null and b/target/classes/static/shpTest[Polygon]/china_building_part.shp differ
diff --git a/target/classes/static/shpTest[Polygon]/china_building_part.shx b/target/classes/static/shpTest[Polygon]/china_building_part.shx
new file mode 100644
index 0000000..d325adc
Binary files /dev/null and b/target/classes/static/shpTest[Polygon]/china_building_part.shx differ
diff --git a/target/test-classes/com/appleyk/SpringbootshaperApplicationTests.class b/target/test-classes/com/appleyk/SpringbootshaperApplicationTests.class
new file mode 100644
index 0000000..cb35175
Binary files /dev/null and b/target/test-classes/com/appleyk/SpringbootshaperApplicationTests.class differ