ここには、バウンディングボックスを指定し、ポイントがその内部にあるかどうかをチェックする完全なJavaクラスがあります。このボックスは、南西と北東の座標(緯度と経度)によって定義されます。
class Bbox
{
public double swLatitude = 0.0;
public double swLongitude = 0.0;
public double neLatitude = 0.0;
public double neLongitude = 0.0;
/*************************************************************************
Constructor.
@param bboxSpecification A comma-separated string containing the
southwest latitude, soutwest longitude, northest latitude, and
northest longitude.
*************************************************************************/
public Bbox(String bboxSpecification)
{
String tokens[] = bboxSpecification.split("(?:,\\s*)+");
if (tokens.length != 4)
{
throw new IllegalArgumentException(
String.format("Expected 4 values in bbox string but found %d: %s\n",
tokens.length, bboxSpecification));
}
swLatitude = Double.parseDouble(tokens[0]);
swLongitude = Double.parseDouble(tokens[1]);
neLatitude = Double.parseDouble(tokens[2]);
neLongitude = Double.parseDouble(tokens[3]);
}
@Override
public String toString()
{
return String.format("swLatitude=%f, swLongitude=%f, neLatitude=%f, neLongitude=%f",
swLatitude, swLongitude, neLatitude, neLongitude);
}
/*************************************************************************
Checks if the bounding box contains the latitude and longitude. Note that
the function works if the box contains the prime merdian but does not
work if it contains one of the poles.
*************************************************************************/
public boolean contains(double latitude, double longitude)
{
boolean longitudeContained = false;
boolean latitudeContained = false;
// Check if the bbox contains the prime meridian (longitude 0.0).
if (swLongitude < neLongitude)
{
if (swLongitude < longitude && longitude < neLongitude)
{
longitudeContained = true;
}
}
else
{
// Contains prime meridian.
if ((0 < longitude && longitude < neLongitude) ||
(swLongitude < longitude && longitude < 0))
{
longitudeContained = true;
}
}
if (swLatitude < neLatitude)
{
if (swLatitude < latitude && latitude < neLatitude)
{
latitudeContained = true;
}
}
else
{
// The poles. Don't care.
}
return (longitudeContained && latitudeContained);
}
public static void test()
{
Bbox bbox;
double latitude = 0;
double longitude = 0;
bbox = new Bbox("37.43, -122.38, 37.89, -121.98");
latitude = 37.5;
longitude = -122.0;
System.out.printf("bbox (%s) contains %f, %f: %s\n",
bbox, latitude, longitude, bbox.contains(latitude, longitude));
bbox = new Bbox("50.99, -2.0, 54, 1.0");
latitude = 51.0;
longitude = 0.1;
System.out.printf("bbox (%s) contains %f, %f: %s\n",
bbox, latitude, longitude, bbox.contains(latitude, longitude));
}
}
あなたの質問に(2つのバウンディングポイントで)言い方をすると、あなたの「マップ」は単純な行に制限されます。 2つ以上のディメンションを持つリージョンを指定する場合は、少なくとも3つのポイント(オルランド、シカゴ、ニューヨークなど)が必要です。 –
@Tom私は彼がバウンディングボックスについて話していると仮定しました。 – Dev
あなたが求めているのは、実際にポイントが四角形の中にあるかどうかを調べる方法です。これは、このサイトや他のすべての場所で、何回もカバーされています。 – Thor84no