使用 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>
作为 lat
和 lon
的适当替换,例如:
{\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 可视化正则表达式:
我正在尝试将 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>
作为 lat
和 lon
的适当替换,例如:
{\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 可视化正则表达式: