ElasticSearch中的Geo Shape Type:
 
从熟知文本或熟知二进制数据中生成的 ST_Geometry:
 
package com.nihaorz.utils;

import com.vividsolutions.jts.geom.*;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import org.geotools.geometry.jts.JTSFactoryFinder; /**
* Created by Administrator on 2016/4/1.
*/
public class GisUtil { private final static WKTReader wktReader = new WKTReader(JTSFactoryFinder.getGeometryFactory()); /**
* 将WKT文本字符串转换为ES中的GeoShape字符串格式
* @param wkt
* @return
* @throws ParseException
*/
public static String getESGeoTextFromWkt(String wkt) throws ParseException {
String result = null;
Geometry geom = wktReader.read(wkt);
String type = geom.getClass().getSimpleName().toLowerCase();
Point point;
MultiPoint multiPoint;
LineString lineString;
MultiLineString multiLineString;
Polygon polygon;
MultiPolygon multiPolygon;
if(type.equals("point")){
point = (Point) geom;
result = getESPointText(point);
}else if(type.equals("linestring")){
lineString = (LineString) geom;
result = getESLineStringText(lineString);
}else if(type.equals("polygon")){
polygon = (Polygon) geom;
result = getESPolygonText(polygon);
}else if(type.equals("multipoint")){
multiPoint = (MultiPoint) geom;
result = getESMultiPointText(multiPoint);
}else if(type.equals("multilinestring")){
multiLineString = (MultiLineString) geom;
result = getESMultiLineStringText(multiLineString);
}else if(type.equals("multipolygon")){
multiPolygon = (MultiPolygon) geom;
result = getESMultiPolygonText(multiPolygon);
}
return result;
} /**
* 通过MultiPolygon对象拼接中括号表示的字符串
* @param multiPolygon
* @return
*/
private static String getESMultiPolygonText(MultiPolygon multiPolygon) throws ParseException {
Polygon polygon;
int num = multiPolygon.getNumGeometries();
StringBuffer sb = new StringBuffer("[");
for(int i = 0; i < num; i++){
polygon = (Polygon) multiPolygon.getGeometryN(i);
sb.append(getESPolygonText(polygon)+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
} /**
* 通过MultiLineString对象拼接中括号表示的字符串
* @param multiLineString
* @return
*/
private static String getESMultiLineStringText(MultiLineString multiLineString) {
LineString lineString;
int num = multiLineString.getNumGeometries();
StringBuffer sb = new StringBuffer("[");
for(int i = 0; i < num; i++){
lineString = (LineString) multiLineString.getGeometryN(i);
sb.append(getESLineStringText(lineString)+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
} /**
* 通过MultiPoint对象拼接中括号表示的字符串
* @param multiPoint
* @return
*/
private static String getESMultiPointText(MultiPoint multiPoint) {
Point point;
int num = multiPoint.getNumGeometries();
StringBuffer sb = new StringBuffer("[");
for(int i = 0; i < num; i++){
point = (Point) multiPoint.getGeometryN(i);
sb.append(getESPointText(point)+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
} /**
* 通过Polygon对象拼接中括号表示的字符串
* @param polygon
* @return
* @throws ParseException
*/
private static String getESPolygonText(Polygon polygon){
String result;
/**
* 内部闭合环形的数量
*/
int num = polygon.getNumInteriorRing();
if(num > 0){
StringBuffer sb = new StringBuffer("["+getESLineStringText(polygon.getExteriorRing())+",");
for(int i = 0; i < num; i++){
sb.append(getESLineStringText(polygon.getInteriorRingN(i))+",");
}
sb.setCharAt(sb.length() - 1, ']');
result = sb.toString();
}else{
result = "["+getESLineStringText(polygon.getExteriorRing())+"]";
}
return result;
} /**
* 通过LineString对象拼接中括号表示的字符串
* @param lineString
* @return
*/
public static String getESLineStringText(LineString lineString){
Coordinate[] corrds = lineString.getCoordinates();
StringBuffer sb = new StringBuffer("[");
for(Coordinate corrd : corrds) {
sb.append(getCoordinateText(corrd)+",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
} /**
* 通过Point对象拼接中括号表示的字符串
* @param point
* @return
*/
public static String getESPointText(Point point){
return getCoordinateText(point.getCoordinate());
} /**
* 通过Coordinate对象拼接中括号表示的字符串
* @param coord
* @return
*/
public static String getCoordinateText(Coordinate coord) {
return "["+coord.x+","+coord.y+"]";
} }

  

 

附:

空心面的WKT文本格式:

POLYGON  (( 114.69311270 32.15375671, 114.69311270 30.38273703, 117.16663685 30.38273703, 117.16663685 32.15375671, 114.69311270 32.15375671),( 115.46055456 31.36860465, 115.96824687 31.67558140, 116.33425760 31.37450805, 115.81475850 31.01440072, 115.46055456 31.36860465))

ArcMap中的预览效果:

GisUtil工具类:将WKT(wellKnownText)文本转换为ElasticSearch识别的空间对象字符串形式的更多相关文章

  1. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第4节: recycler中获取对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第四节: recycler中获取对象 这一小节剖析如何从对象回收站中获取对象: 我们回顾上一小节demo的ma ...

  2. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第5节: 同线程回收对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第五节: 同线程回收对象 上一小节剖析了从recycler中获取一个对象, 这一小节分析在创建和回收是同线程的 ...

  3. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第6节: 异线程回收对象

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第六节: 异线程回收对象 异线程回收对象, 就是创建对象和回收对象不在同一条线程的情况下, 对象回收的逻辑 我 ...

  4. 泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象

    1.commons-beanutils的使用 commons-beanutils-1.9.3.jar 依赖 commons-logging-1.2.jar 代码1: String className ...

  5. 2015第30周三Spring常用工具类

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  6. spring中常用工具类介绍

    http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作     Spring 定义了一个 org.springframework.core.io ...

  7. fastdfs-client-java工具类封装

    FastDFS是通过StorageClient来执行上传操作的 通过看源码我们知道,FastDFS有两个StorageClient工具类.

  8. Android工具类整合

    Android-JSONUtil工具类 常用的Json工具类,包含Json转换成实体.实体转json字符串.list集合转换成json.数组转换成json public class JSONUtil ...

  9. Java 数字数组随机数工具类 NumberUtils、ArrayUtils、RandomUtils用法

    commons-lang3-3-3.8.1 //----------------------------------------------------------------------- /** ...

随机推荐

  1. BZOJ2118墨墨的等式[数论 最短路建模]

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1317  Solved: 504[Submit][Status][Discus ...

  2. 《MySchool数据库设计优化》内部测试

    1) 在SQL Server 中,为数据库表建立索引能够( C ). A. 防止非法的删除操作 B. 防止非法的插入操作 C. 提高查询性能 D. 节约数据库的磁盘空间 解析:索引的作用是通过使用索引 ...

  3. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  4. 关于ubuntu的sources.list总结

    一.作用 文件/etc/apt/sources.list是一个普通可编辑的文本文件,保存了ubuntu软件更新的源服务器的地址.和sources.list功能一样的是/etc/apt/sources. ...

  5. MVC code first数据迁移 转

    coptto:http://www.cnblogs.com/miro/p/4164076.html 本篇是相对独立的一篇,主要讲解不丢失数据进行数据库结构升级. 前面我们讲解EF功能时(见第三篇文章) ...

  6. jquery的工具方法isFunction/isArray/isWindow/isNumeric/isPlainObject/isEmptyObject

    isFunction : 是否函数 isArray : 是否数组 isWindow : 是否window isNumeric : 是否数字 type : 数据类型方法 isPlainObject : ...

  7. IntelliJ Idea14 创建Maven多模块项目

    Maven多模块项目的参考资料 Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html 在这个教程里, ...

  8. SharePoint 2013:自定义ECB菜单项的添加

    本文分别介绍了两种常用的添加ECB菜单项的方式. 声明式创建 这也是微软最佳实践推荐的方式.在VS中创建一个SharePoint空解决方案,并添加一个“空元素”类型的SPI. 在Elements.xm ...

  9. codevs1958 刺激

    难度等级:黄金 1958 刺激 题目描述 Description saffah的一个朋友S酷爱滑雪,并且追求刺激(exitement,由于刺激过度导致拼写都缺了个字母),喜欢忽高忽低的感觉.现在S拿到 ...

  10. 2014-2015-2 《Java程序设计》课程学生博客列表

    20135101 曹钰晶 20135103 王海宁 20135104 刘 帅 20135105 王雪铖 20135109 高艺桐 20135111 李光豫 20135114 王朝宪 20135116 ...