Извлечение значений Lat и Long из координат GeoJSON отдельно в требуемый формат с использованием Java - PullRequest
3 голосов
/ 13 октября 2019

Я пытаюсь разделить координаты GeoJSON на отдельные значения широты и долготы в требуемом формате (как показано в требуемом выводе).

У меня есть файл GeoJSON, из которого я извлекаю только значения координат,Эти значения координат сохраняются в виде строковой переменной, как показано: 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" 
"          ]

Конечный результат должен бытьсодержащие координаты отдельно, как показано в вышеуказанном формате.

1 Ответ

3 голосов
/ 13 октября 2019

Я предполагаю выражение, похожее на:

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

с правильной заменой, которая будет использовать $1 и $2 в качестве lat и lon, например:

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

может работать до некоторой степени, но не полностью.

Демонстрация

Тест

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\":\"$1\",\"lon\":\"$2\"},";

        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 "},

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

...