首页 > 编程语言 >java将wkt面数据转geojson和elasticsearch的shape数据

java将wkt面数据转geojson和elasticsearch的shape数据

时间:2023-05-24 11:22:28浏览次数:41  
标签:java String JSONObject coordinates shape geojson new import wkt

wkt面数据转geojson


import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.ParseException;
import org.locationtech.jts.io.WKTReader;

public class WKTToGeoJSONConverter {
    public static void main(String[] args) {
        // 示例 WKT 数据
        String wkt = "POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))";
//        String wkt = "MULTIPOLYGON (((43876460.5886 4557211.8423999995, 43876830.28126473 4556955.511663466, 43876986.7596 4557164.5297, 43877421.5759 4556935.826300001, 43877187.270899996 4556494.7279, 43876662.615 4556731.5492, 43876685.96516568 4556762.739497202, 43876381.637099996 4556848.7905, 43876460.5886 4557211.8423999995)), ((43876345.0617 4554530.7226, 43876456.4056 4554102.8003, 43876505.4387 4553914.3882, 43876174.8098 4553986.221999999, 43876345.0617 4554530.7226)), ((43870876.6665 4555441.290999999, 43871569.0309 4554423.7804000005, 43870343.883 4554950.150800001, 43870876.6665 4555441.290999999)), ((43868943.252 4557351.4333, 43869426.9282 4556516.4758, 43868810.4922 4556664.367900001, 43868943.252 4557351.4333)), ((43869754.1936 4557739.0306, 43870215.0965 4557386.9695999995, 43870052.7795 4557198.6493, 43869594.6533 4557321.0469, 43869754.1936 4557739.0306)), ((43870813.5107 4556876.008400001, 43871375.0251 4556910.135600001, 43871326.7948 4556450.8159, 43870814.3933 4556562.5789, 43870813.5107 4556876.008400001)), ((43872151.6271 4556024.8948, 43872675.3091 4555329.136499999, 43872605.5269 4555008.774, 43871926.1364 4554910.698999999, 43872151.6271 4556024.8948)), ((43872488.9108 4557651.6379, 43873378.8445 4557412.302100001, 43873087.9918 4556990.192399999, 43872425.9887 4557258.852499999, 43872488.9108 4557651.6379)))";

        // 将 WKT 转换为 GeoJSON
        String geoJson = convertWKTToGeoJSON(wkt);

        // 打印转换后的 GeoJSON
        System.out.println(geoJson);
    }




    //返回值{"coordinates":{"coordinates":[[0.0,0.0],[0.0,10.0],[10.0,10.0],[10.0,0.0],[0.0,0.0]]},"type":"Polygon"}
    public static String convertWKTToGeoJSON(String wkt) {
        WKTReader reader = new WKTReader();
        try {
            Geometry geometry = reader.read(wkt);

            // 创建 GeoJSON 对象
            JSONObject geoJson = new JSONObject();
            geoJson.put("type", geometry.getGeometryType());

            // 添加坐标信息
            JSONObject coordinates = new JSONObject();
            coordinates.put("coordinates", geometryToJSONArray(geometry));
            geoJson.put("coordinates", coordinates);
            return geoJson.toString();
        } catch (ParseException | JSONException e) {
            e.printStackTrace();
            return null;
        }
    }

    private static Object geometryToJSONArray(Geometry geometry) {
        int numGeometries = geometry.getNumGeometries();
        if (numGeometries == 1) {
            return coordinatesToJSONArray(geometry.getCoordinates());
        } else {
            Object[] geometries = new Object[numGeometries];
            for (int i = 0; i < numGeometries; i++) {
                geometries[i] = coordinatesToJSONArray(geometry.getGeometryN(i).getCoordinates());
            }
            return geometries;
        }
    }

    private static Object coordinatesToJSONArray(Coordinate[] coordinates) {
        Object[] jsonArray = new Object[coordinates.length];
        for (int i = 0; i < coordinates.length; i++) {
            double[] coordArray = new double[]{coordinates[i].getX(), coordinates[i].getY()};
            jsonArray[i] = coordArray;
        }
        return jsonArray;
    }
}

  

 

wkt转elasticsearch的shape数据


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.util.ArrayList;
import java.util.List;

/**
 * @Author: luojie
 * @Date: 2022/11/14 9:07
 */
public class WKTUtil {

    public static void main(String[] args) {
                String wkt = "POLYGON ((0 0, 0 10, 10 10, 10 0, 0 0))";

        System.out.println(wkt2Shape(wkt));
    }

    public static String geomToWkt(Geometry geometry) {
        if(geometry == null){
            return null;
        }
        String wkt = null;
        WKTWriter writer = new WKTWriter();
        wkt = writer.write(geometry);
        return wkt;
    }

    public static Geometry wktToGeom(String wkt) {
        Geometry geometry = null;
        WKTReader reader = new WKTReader();
        try {
            geometry = reader.read(wkt);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return geometry;
    }

    public static JSONObject wkt2Shape(String wkt){
        String geoJSONStr = WKTToGeoJSONConverter.convertWKTToGeoJSON(wkt);
        if(geoJSONStr == null){
            return null;
        }
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("type", "Polygon");
        if(geoJSONStr.contains("[[[")){
            JSONObject data = JSONObject.parseObject(geoJSONStr);
            JSONObject coordinates = data.getJSONObject("coordinates");
            JSONArray array = coordinates.getJSONArray("coordinates");
            List<List<List<Double>>> listList = new ArrayList<>();

            for(int i = 0; i < array.size(); i++){
                List<List<Double>> lists = new ArrayList<>();
                JSONArray second = array.getJSONArray(i);
                for(int j = 0; j < second.size(); j++){
                    List<Double> list = JSONArray.parseArray(second.getString(j), Double.class);
                    lists.add(list);
                }

                listList.add(lists);
            }
            jsonObject.put("coordinates", listList);
        }else if(geoJSONStr.contains("[[")){
            JSONObject data = JSONObject.parseObject(geoJSONStr);
            JSONObject coordinates = data.getJSONObject("coordinates");
            JSONArray array = coordinates.getJSONArray("coordinates");
            List<List<List<Double>>> listList = new ArrayList<>();
            List<List<Double>> lists = new ArrayList<>();
            for(int i = 0; i < array.size(); i++){
                List<Double> list = JSONArray.parseArray(array.getString(i), Double.class);
                lists.add(list);
            }
            listList.add(lists);
            jsonObject.put("coordinates", listList);
        }
        return jsonObject;
    }

}

  

标签:java,String,JSONObject,coordinates,shape,geojson,new,import,wkt
From: https://www.cnblogs.com/james-roger/p/17427465.html

相关文章

  • 如何实现java8 list按照元素的某个字段去重
    list按照元素的某个字段去重1234567@Data@AllArgsConstructor@NoArgsConstructorpublicclassStudent{privateIntegerage;privateStringname;}测试数据12345List<Student>studentList=Lists.newArrayList();studentL......
  • Java运算及理解篇一
    this()与super()区别super()是用于调用父类构造方法的关键字,必须子类构造的第一行。this()指向本对象的指针,用于调用当前类的其他构造方法。publicclassAnimal{privateStringname;publicAnimal(Stringname){this.name=name;System.out.println("Ani......
  • Java语言springboot框架实现的停车位管理系统
    技术架构技术框架:jQuery+MySQL5.7+mybatis+shiro+Layui+HTML+CSS+JS+thymeleaf运行环境:jdk8+IntelliJIDEA+maven3+宝塔面板宝塔部署教程1.回到IDEA,点击编辑器右侧maven图标,执行package,完成后就会在根目录里生成一个target目录,在里面会打包出一个jar文件......
  • 你见过哪些优雅的 java代码优化技巧
    今天分享一些实用的有助于提高代码质量的建议,建议收藏!避免炫技式单行代码代码没必要一味追求“短”,是否易于阅读和维护也非常重要。像炫技式的单行代码就非常难以理解、排查和修改起来都比较麻烦且耗时。反例:if(response.getData()!=null&&CollectionUtils.isNotEmpty(respons......
  • Java语言开发实现的酒店管理系统功能
    技术架构技术框架:ssm+layui+mybatis+bootstrap+jquery+mysql5.7运行环境:jdk8+nginx1.20+tomcat9+IntelliJIDEA+maven+宝塔面板系统本地搭建教程1.下载源码,本地电脑新建一个数据库,导入jiudian.sql文件至数据库中。2.使用IDEA打开jiudians目录,修改数据库信......
  • Java比较器
    Java比较器背景:在Java中经常会涉及到对象数组的排序问题,那么就涉及到对象之间的比较问题。Java实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator方式一:自然排序:java.lang.ComparableComparable接口强行对实现它的每个类的对象进行整体排......
  • #yyds干货盘点#JavaScript的数学对象——Math对象
    Math对象●js给我们提供了一些操作数字的方法●也是一种数据类型是复杂数据类型●Math对象的通用语法:Math.xxx()random()●Math.random()这个方法是用来生成一个0~1之间的随机数●每次执行生成的数字都不一样,但是一定是0~1之间的●生成的数字包含0,但是不包含1var......
  • 这可能是最全面的Java面试八股文了
    Java的特点Java是一门面向对象的编程语言。面向对象和面向过程的区别参考下一个问题。Java具有平台独立性和移植性。Java有一句口号:Writeonce,runanywhere,一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编译的Java程序可以在任何带有JV......
  • 哈夫曼树的实现-Java实现
    哈夫曼的核心思想在于,wpl最小;1packagedataSrtuct.TreeAlgorithm;23importjava.util.ArrayList;4importjava.util.Collections;5importjava.util.List;67publicclassHuffmanTree{8publicstaticvoidmain(String[]args){9int[]......
  • 编写javaweb用到的基本依赖,mybatis-config.xml代码,SqlSessionFactoryUtils.java
    这篇文章仅仅作为记录,供以后复制粘贴使用pom.xml<dependencies><!--Servlet--><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</vers......