使用 Java 将 GeoJSON 坐标中的 Lat 和 Long 值分别提取为所需格式

Extract Lat and Long values from GeoJSON coordinates separately to a required format using Java

我正在尝试将 GeoJSON 坐标拆分为单独的纬度和经度值,以达到所需的格式(如所需输出所示)。

我有一个 GeoJSON 文件,通过它我只提取坐标值。这些坐标值存储为 String 变量,如下所示: GeoJSON : ":[[[7.365046,46.948655],[7.365046,46.949254],[7.367558,46.949254],[7.367558,46.948655],[7.365046,46.948655]]]}}。 如何从给定的字符串中分别提取纬度和经度的特定值。从GeoJSON文件中提取坐标的代码片段如下所示:


String GeoJSON = GeoJSONFromFile().split("coordinates")[1];
System.out.println("GeoJSON : " + GeoJSON );

//Splitting within the brackets
String delims = "\[(.*?)\]";
String[] tokens = GeoJSON.split(delims);

GeoJSON = GeoJSON.split("}")[0];

我想要实现的预期输出如下:

\"points\": [\n" +
"            {\n" +
"              \"@type\": \"Point\",\n" +
"              \"lat\": 46.948655,\n" +
"              \"lon\": 7.365046\n" +
"            },\n" +
"            {\n" +
"              \"@type\": \"Point\",\n" +
"              \"lat\": 46.949254,\n" +
"              \"lon\": 7.365046\n" +
"            },\n" +
"            {\n" +
"              \"@type\": \"Point\",\n" +
"              \"lat\": 46.949254,\n" +
"              \"lon\": 7.367558\n" +
"            },\n" +
"            {\n" +
"              \"@type\": \"Point\",\n" +
"              \"lat\": 46.948655,\n" +
"              \"lon\": 7.367558\n" +
"            },\n" +
"            {\n" +
"              \"@type\": \"Point\",\n" +
"              \"lat\": 46.948655,\n" +
"              \"lon\": 7.365046\n" +
"            }\n" 
"          ]

最终结果应该是单独包含坐标,如上面的格式所示。

我猜表达式类似于:

(?::\[\[)?\[([-+]?\d+\.\d+)\s*,\s*([-+]?\d+\.\d+)\]\s*,?(?:\]\]}})?

使用 </code> 和 <code> 作为 latlon 的适当替换,例如:

{\n"@type": "point",\n"lat":"",\n"lon":""\n},\n

可能在某种程度上起作用,但不完全。

Demo

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "(?::\[\[)?\[([-+]?\d+\.\d+)\s*,\s*([-+]?\d+\.\d+)\]\s*,?(?:\]\]\}})?";
        final String string = ":[[[7.365046,46.948655],[7.365046,46.949254],[7.367558,46.949254],[7.367558,46.948655],[7.365046,46.948655]]]}}";
        final String subst = "{\"@type\": \"point\",\"lat\":\"\",\"lon\":\"\"},";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    }
}

输出

{"@type": "point","lat":"7.365046","lon":"46.948655"},{"@type": "point","lat":"7.365046","lon":"46.949254"},{"@type": "point","lat":"7.367558","lon":"46.949254"},{"@type": "point","lat":"7.367558","lon":"46.948655"},{"@type": "point","lat":"7.365046","lon":"46.948655"},

正则表达式电路

jex.im 可视化正则表达式: