1

私はこのような緯度と経度の束を持つ文字列を持っています

LINESTRING (-79.0578544444577 43.0929133770364, -79.0559554404751 43.0929995585932, -79.0540564364926 43.09308574015, -79.0504086322323 43.0931797561892, -79.0503228015438 43.0911427096913)

文字列から配列に座標を取得したいと思います。私はこれがでできることを知っていますがstring splitting、文字列から座標だけを取得する式を書く方法を理解していません。

誰かがこれで私を助けることができますか

4

5 に答える 5

4
  1. 最初(と最後の間の部分文字列)
  2. 分割する", "と、次のようなペアを含むString[]配列が取得されます。"-79.0578544444577 43.0929133770364","-79.0559554404751 43.0929995585932",...
  3. これで、そのペアのそれぞれをスペースで分割し" "て、別のString[]配列を取得できます。"-79.0578544444577", "43.0929133770364"

正規表現を使用して、[オプション-][1桁または2桁][ドット][1桁以上]の形式で数値を検索することもできます。そのようなパターンは次のようになります"-?\\d{1,2}[.]\\d+"

于 2013-03-06T20:12:27.307 に答える
2
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Coordinates {
   static class LatLon {
      double lat;
      double lon;
      public LatLon( double lat, double lon ) {
         this.lat = lat;
         this.lon = lon;
      }
      @Override public String toString(){ return lat + ", " + lon; }
   }
   public static void main( String[] args ){
      String info =
         "LINESTRING (" +
            "-79.0578544444577 43.0929133770364, " +
            "-79.0559554404751 43.0929995585932, " +
            "-79.0540564364926 43.09308574015, " +
            "-79.0504086322323 43.0931797561892, " +
            "-79.0503228015438 43.0911427096913)";
      Pattern p = Pattern.compile( "[^\\(]+\\(([^\\)]+).*" );
      Matcher m = p.matcher( info );
      if( m.matches()) {
         List< LatLon > coordinates = new java.util.LinkedList<>();
         String[] coords = m.group( 1 ).split( "," );
         for( int i = 0; i < coords.length; ++i ) {
            String[] latLon = coords[i].trim().split( " " );
            coordinates.add(
               new LatLon(
                  Double.parseDouble( latLon[0] ),
                  Double.parseDouble( latLon[1] )));
         }
         System.out.println( coordinates );
      }
   }
}

出力:

[-79.0578544444577, 43.0929133770364, -79.0559554404751, 43.0929995585932, -79.0540564364926, 43.09308574015, -79.0504086322323, 43.0931797561892, -79.0503228015438, 43.0911427096913]
于 2013-03-06T20:21:22.437 に答える
1

それらすべてを1つの配列にまとめることに満足している場合:

String str = "LINESTRING (-79.0578544444577 43.0929133770364, -79.0559554404751 43.0929995585932, -79.0540564364926 43.09308574015, -79.0504086322323 43.0931797561892, -79.0503228015438 43.0911427096913)";
String[] arr = str.split("\\(|\\)")[1].split(",? ");
for (String s: arr)
   System.out.println(a);

split("\\(|\\)")(またはで分割することを意味し)ます。だからそれは{"LINESTRING ", "-79...", ""}

[1]これはを含む位置だからです"-79..."

split(",? ")分割された,後にスペースまたは単にスペースが続くことを意味します。

ペアで座標を抽出する場合:

for (int i = 0; i < arr.length; i += 2)
{
   System.out.println("coordinate 1 = "+arr[i]);
   System.out.println("coordinate 2 = "+arr[i+1]);
}
于 2013-03-06T20:16:05.473 に答える
0

LineStringが変数の名前であり、括弧内にあるものがその値(括弧を除く)である場合、次のようになります。

String[] coords = LINESTRING.split(" ");

動作するはずです!

于 2013-03-06T20:11:22.047 に答える
0

これを試して:

String[] coordinates = LINESTRING.split(",*\\s+");

これは、スペースとコンマの両方ですぐに分割する必要があります。この正規表現は、0個以上のコンマを検索し、次に1つ以上の空白文字を区切り文字として検索します。

于 2013-03-06T20:14:30.293 に答える