geojson 简介

官网地址:

  • https://geojson.org/

  • http://geojson.io/

GeoJSON 是一种用于编码各种地理数据结构的格式。

{"type": "Feature","geometry": {"type": "Point","coordinates": [125.6, 10.1]},"properties": {"name": "Dinagat Islands"}
}

GeoJSON 支持以下几何类型:Point、LineString、 Polygon、MultiPoint、MultiLineString和MultiPolygon。具有附加属性的几何对象是Feature对象。特征集包含在FeatureCollection对象中。

wkt简介

WKT(Well-known text)是一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。它的二进制表示方式,亦即WKB(well-known binary)则胜于在传输和在数据库中存储相同的信息。该格式由开放地理空间联盟(OGC)制定。

WKT可以表示的几何对象包括:点,线,多边形,TIN(不规则三角网)及多面体。可以通过几何集合的方式来表示不同维度的几何对象。

几何物体的坐标可以是2D(x,y),3D(x,y,z),4D(x,y,z,m),加上一个属于线性参照系统的m值。以下为几何WKT字串样例:

POINT(6 10)

LINESTRING(3 4,10 50,20 25)

POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2))

MULTIPOINT(3.5 5.6, 4.8 10.5)

MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))

MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2,2 3,3 3,3 2,2 2)),((6 3,9 2,9 4,6 3)))

GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))

POINT ZM (1 1 5 60)

POINT M (1 1 80)

POINT EMPTY

MULTIPOLYGON EMPTY

geojson 和 wtk 的区别

WKT是用来单独表示空间点、线、面数据,GeoJSON还可以用来表示空间数据和属性数据的集合 (crs、bbox属性)。

通常在大多数时候,两种会同时使用。例如postgis中可以同时转换geojson(ST_AsGeoJSON(geometry geom) )和wkt(ST_AsText(geometry geom)).

geojson 和 wkt相互转换【java版本】

通过geotools的依赖包转换

官网:https://www.geotools.org/

通常和空间信息数据操作的包均可以通过geotools的包来实现。同时也带来了一些弊端,geotools的包体量较大。

pom

        <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.13.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.13.2</version></dependency><!-- geo --><dependency><groupId>org.geotools</groupId><artifactId>gt-geojson</artifactId><version>21.0</version></dependency><dependency><groupId>org.locationtech.jts</groupId><artifactId>jts-core</artifactId><version>1.16.1</version></dependency>

代码实现

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.StringUtils;
import org.geotools.geojson.geom.GeometryJSON;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.io.WKTWriter;import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;/*** @author: wangpeng* @date: 2022/06/04  10:17*/
public class DataTypeConvertOldUtils {public static Geometry geojson2Geometry(String geojson) throws IOException {GeometryJSON gjson = new GeometryJSON(7);return gjson.read(new StringReader(geojson));}public static String geometry2Geojson(Geometry geometry) throws IOException {GeometryJSON gjson = new GeometryJSON(7);StringWriter writer = new StringWriter();gjson.write(geometry, writer);return writer.toString();}public static Geometry wkt2Geometry(String wkt) throws ParseException {WKTReader reader = new WKTReader();return reader.read(wkt);}public static String geometry2Wkt(Geometry geometry) throws ParseException {WKTWriter writer = new WKTWriter();return writer.write(geometry);}/*** geojson 转 wtk** @param geojson* @return* @throws Exception*/public static String geojson2Wkt(String geojson) throws Exception {Geometry geometry = geojson2Geometry(geojson);return geometry2Wkt(geometry);}/*** wkt 转 geojson** @param wkt* @return* @throws Exception*/public static String wkt2Geojson(String wkt) throws Exception {Geometry geometry = wkt2Geometry(wkt);return geometry2Geojson(geometry);}/*** obj 转** @param obj* @param <T>* @return*/public static <T> String obj2StringPretty(T obj) {ObjectMapper mapper = new ObjectMapper();if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);} catch (IOException e) {return null;}}public static <T> T string2Obj(String str, Class<T> clazz) {ObjectMapper mapper = new ObjectMapper();if (StringUtils.isEmpty(str) || clazz == null) {return null;}try {return clazz.equals(String.class) ? (T) str : mapper.readValue(str, clazz);} catch (IOException e) {return null;}}
}

测试

    public static void main(String[] args) throws Exception {String geojson = "{\"type\":\"Polygon\",\"coordinates\":[[[116.2078857421875,39.928694653732364],[116.20925903320312,39.91078961774283],[116.20651245117188,39.89393354266699],[116.23397827148436,39.86547951378614],[116.24496459960938,39.82752244475985],[116.29852294921876,39.78954439311165],[116.3397216796875,39.78532331459258],[116.3836669921875,39.78848914776114],[116.41799926757811,39.79904087286648],[116.444091796875,39.80748108746673],[116.45919799804688,39.818029898770206],[116.48117065429686,39.83490462943255],[116.50314331054688,39.86231722624386],[116.50588989257812,39.88023492849342],[116.5045166015625,39.90973623453719],[116.4935302734375,39.925535281697286],[116.5045166015625,39.94975340768179],[116.47979736328125,39.98132938627215],[116.47567749023438,39.99395569397331],[116.45507812500001,40.000267972646796],[116.43859863281249,40.000267972646796],[116.4166259765625,39.998163944585805],[116.36581420898438,40.00868343656941],[116.35208129882812,40.00447583427404],[116.30264282226562,40.01078714046552],[116.27792358398436,39.999215966720165],[116.24771118164061,39.99500778093748],[116.23260498046874,39.990799335838034],[116.21200561523438,39.95606977009003],[116.2078857421875,39.928694653732364]]]}";String wkt = DataTypeConvertOldUtils.geojson2Wkt(geojson);System.out.println(wkt);String newGeojson = DataTypeConvertOldUtils.wkt2Geojson(wkt);System.out.println(newGeojson);}

通过jts2geojson包来转换

该方式比较轻量,推荐尝试。

GitHub仓库地址

https://github.com/bjornharrtell/jts2geojson

pom

        <dependency><groupId>org.wololo</groupId><artifactId>jts2geojson</artifactId><version>0.17.0</version></dependency>

代码实现

import com.fasterxml.jackson.databind.ObjectMapper;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.WKTReader;
import org.locationtech.jts.io.WKTWriter;
import org.wololo.geojson.GeoJSON;
import org.wololo.jts2geojson.GeoJSONReader;
import org.wololo.jts2geojson.GeoJSONWriter;import java.io.IOException;/*** wkt gsojson 相互转换** @author: wangpeng* @date: 2022/06/04  10:01*/
public class DataTypeConvertUtils {/*** geojson 转 geometry** @param geojson* @return* @throws Exception*/public static Geometry geojson2Geometry(String geojson) throws Exception {GeoJSONReader reader = new GeoJSONReader();Geometry geometry = reader.read(geojson);return geometry;}/*** geometry 转 geojson** @param geometry* @return* @throws Exception*/public static String geometry2Geojson(Geometry geometry) throws Exception {GeoJSONWriter writer = new GeoJSONWriter();GeoJSON json = writer.write(geometry);return json.toString();}/*** wkt 转 geometry** @param wkt* @return* @throws Exception*/public static Geometry wkt2Geometry(String wkt) throws Exception {WKTReader reader = new WKTReader();return reader.read(wkt);}/*** geometry 转 wkt** @param geometry* @return* @throws Exception*/public static String geometry2Wkt(Geometry geometry) throws Exception {WKTWriter writer = new WKTWriter();return writer.write(geometry);}/*** geojson 转 wkt** @param geojson* @return* @throws Exception*/public static String geojson2Wkt(String geojson) throws Exception {Geometry geometry = geojson2Geometry(geojson);return geometry2Wkt(geometry);}/*** wkt 转 geojson** @param wkt* @return* @throws Exception*/public static String wkt2Geojson(String wkt) throws Exception {Geometry geometry = wkt2Geometry(wkt);return geometry2Geojson(geometry);}/*** obj 转 json** @param obj* @param <T>* @return*/public static <T> String obj2StringPretty(T obj) {ObjectMapper mapper = new ObjectMapper();if (obj == null) {return null;}try {return obj instanceof String ? (String) obj : mapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);} catch (IOException e) {return null;}}/*** json 转 obj** @param str* @param clazz* @param <T>* @return*/public static <T> T string2Obj(String str, Class<T> clazz) {ObjectMapper mapper = new ObjectMapper();if (isEmpty(str) || clazz == null) {return null;}try {return clazz.equals(String.class) ? (T) str : mapper.readValue(str, clazz);} catch (IOException e) {return null;}}/*** 为空判断** @param str* @return*/private static boolean isEmpty(String str) {return str == null || str.length() == 0;}}

测试

public static void main(String[] args) throws Exception {String geojson = "{\"type\":\"Polygon\",\"coordinates\":[[[116.2078857421875,39.928694653732364],[116.20925903320312,39.91078961774283],[116.20651245117188,39.89393354266699],[116.23397827148436,39.86547951378614],[116.24496459960938,39.82752244475985],[116.29852294921876,39.78954439311165],[116.3397216796875,39.78532331459258],[116.3836669921875,39.78848914776114],[116.41799926757811,39.79904087286648],[116.444091796875,39.80748108746673],[116.45919799804688,39.818029898770206],[116.48117065429686,39.83490462943255],[116.50314331054688,39.86231722624386],[116.50588989257812,39.88023492849342],[116.5045166015625,39.90973623453719],[116.4935302734375,39.925535281697286],[116.5045166015625,39.94975340768179],[116.47979736328125,39.98132938627215],[116.47567749023438,39.99395569397331],[116.45507812500001,40.000267972646796],[116.43859863281249,40.000267972646796],[116.4166259765625,39.998163944585805],[116.36581420898438,40.00868343656941],[116.35208129882812,40.00447583427404],[116.30264282226562,40.01078714046552],[116.27792358398436,39.999215966720165],[116.24771118164061,39.99500778093748],[116.23260498046874,39.990799335838034],[116.21200561523438,39.95606977009003],[116.2078857421875,39.928694653732364]]]}";String wkt = DataTypeConvertUtils.geojson2Wkt(geojson);System.out.println(wkt);String newGeojson = DataTypeConvertUtils.wkt2Geojson(wkt);System.out.println(newGeojson);

geojson和wkt互转[java版本]相关推荐

  1. cytoscape要求的JAVA版本_微生物研究必备:Cytoscape绘制网络图(一)

    原标题:微生物研究必备:Cytoscape绘制网络图(一) Cytoscape 是一个专用于互作网络数据可视化的软件.在微生物研究领域,通过对不同样本间的物种丰度信息进行相关性分析,可以获得物种在环境 ...

  2. 下载最新版本Maven 3.3.9 ,检测安装是否成功时发现Java版本JDK却低于1.7时报错

    下线最新版本Maven 3.3.9 ,检测安装是否成功时发现Java版本JDK却低于1.7时报错 cmd: mvn -v Exception in thread "main" ja ...

  3. linux 修改java版本_Linux 有问必答:如何在 Linux 中改变默认的 Java 版本

    提问:当我尝试在Linux中运行一个Java程序时,我遇到了一个错误.看上去像程序编译所使用的Java版本与我本地的不同.我该如何在Linux上切换默认的Java版本? 当Java程序编译时,编译环境 ...

  4. java jnlp被阻止_JNLP应使用特定的Java版本,但会出现错误结果

    我在这里面临一个问题.我想使用特殊版本来运行我们的 java webstart应用程序,但只需要一个jnlp. ("经过测试,- blabla我们不能使用新版本- blabla"随 ...

  5. Ubuntu/Debian 系统切换Java(JVM),修改Java版本,JAVA_HOME

    http://blog.mypapit.net/2007/10/how-to-switch-between-different-java-jvm-in-ubuntu-and-debian-gnu-li ...

  6. mac os x java_Mac OS X和多个Java版本

    守着一只汪 在Mac上管理多个Java版本的最简洁方法是使用Homebrew.在内Homebrew,使用:homebrew-cask 安装java的版本jenv 管理已安装的java版本如http:/ ...

  7. centos 更换java版本_centos7 更换jdk版本

    查看java版本   java -version 如果有java版本(如果没有直接看红色虚线以下的) 输入 rpm -qa | grep java会显示以下几条内容: ******* ******** ...

  8. 【错误记录】Android 编译时技术版本警告 ( 注解处理器与主应用支持的 Java 版本不匹配 )

    文章目录 一.报错信息 二.问题分析 三.解决方案 一.报错信息 在使用 Android 编译时技术 , 涉及 编译时注解 , 注解处理器 ; 开发注解处理器后 , 编译报如下警告 ; 该警告不会影响 ...

  9. 【Android APT】注解处理器 ( 配置注解依赖、支持的注解类型、Java 版本支持 )

    文章目录 一.注解处理器 依赖 编译时注解 二.设置 注解处理器 支持的注解类型 三.设置 注解处理器 支持的 Java 版本 四.博客资源 Android APT 学习进阶路径 : 推荐按照顺序阅读 ...

最新文章

  1. 变量置换方式linux,Shell变量测试与内容置换
  2. 编写高质量代码:改善Java的151个建议五(类、对象、方法)31-51
  3. 合并两个有序链表—leetcode21
  4. Maven 配置文件 POM 的常用插件配置代码
  5. 求立方根_初一数学立方根考点详解,立足基础,把握题型,学会方法
  6. java去掉图片上的meta信息_正确的java 8设置用于类卸载(Metaspace清理)/ cxf问题
  7. Python数据可视化案例二:动态更新数据
  8. 打印机生产食物?3D打印技术推出人造肉口感佳
  9. vscode的常用插件
  10. 收藏!闲鱼卖货实操,小白轻松入门
  11. 磁盘块管理器DiskBlockManager
  12. STM32的三种BOOT模式
  13. 企业购买团体商业保险有助提升公司形象
  14. iOS开发系列-音频、视频以及摄像
  15. 三废的日常——什么是负载均衡
  16. 长波猝灭剂QSY 21NHS,304014-13-9,QSY21 活性酯特点有哪些
  17. 一个关于SDWAN单臂部署方案验证的实验
  18. 英语单词记忆 词源法-思维导图(07)词源od/hod-21
  19. 魔术之间:自变量与因变量的交互
  20. 九零起航服务器(港澳服务器) 如何设置404页面

热门文章

  1. mysql 表 rowid_SQLite数据表的rowid
  2. 嵌入式Linux驱动开发基础
  3. 万字干货:大道至简,用户增长模型体系/完整方法论/实操经验分享
  4. 自动控制原理——绪论
  5. js刷新页面方法大全
  6. 迈普交换机添加用户、授权用户级别及删除用户
  7. ECharts实现中国地图数据可视化
  8. 闭环式互联网营销工具,汇桔宝五周年纪念庆典
  9. java毕业设计星之语明星周边产品销售网站Mybatis+系统+数据库+调试部署
  10. 生信分析流程框架概述