How to check if a Latitude / Longitude point is on a map (and not on Google maps)

If I have a class that defines a map with top / left defined by longitude and latitude, and bottom / right also defined by longitude and latitude, how can I check if a given latitude / longitude map bounding points? {This is not a Google Maps issue). for example (Orlando on a map that covers Talhass in Miami).

public class MapContext {

 private  mMapTop = null; private  mMapBottom = null; public MapContext (String topLatitude, String topLongitude, String bottomLatitude, String bottomLongitude) {   double theTopLat = Location.convert(topLatitude);   double theTopLong = Location.convert(topLongitude);   mMapTop =   ("private");   mMapTop.setLongitude(theTopLong);   mMapTop.setLatitude(theTopLat);   double theBottomLat = Location.convert(bottomLatitude);   double theBottomLong = Location.convert(bottomLongitude);   mMapBottom =   ("private");   mMapBottom.setLongitude(theBottomLong);   mMapBottom.setLatitude(theBottomLat); > 

} public boolean testIfPointOnMap (Location Location) {? ? return TRUE or FALSE}}

+4
source share
4 answers

Can you just check if the lat between the borders is long?

  /* * top: north latitude of bounding box. * left: left longitude of bounding box (western bound). * bottom: south latitude of the bounding box. * right: right longitude of bounding box (eastern bound). * latitude: latitude of the point to check. * longitude: longitude of the point to check. */ boolean isBounded(double top, double left, double bottom, double right, double latitude, double longitude){ /* Check latitude bounds first. */ if(top >= latitude && latitude >= bottom){ /* If your bounding box doesn't wrap the date line the value must be between the bounds. If your bounding box does wrap the date line it only needs to be higher than the left bound or lower than the right bound. */ if(left <= right && left <= longitude && longitude <= right){ return true; } else if(left > right && (left <= longitude || longitude <= right)) { return true; } } return false; } 
+4
source

Please post your code, but provided that you have something like this:

 public class Map{ public int x1, y1, x2, y2; } 

Your check will be something simple:

 boolean isPointInMap(Map m, int x, int y){ return m.x1 <= x && x <= m.x2 && m.y1 <= y && y <= m.y2; } 
+1
source

I did not find the ideal solution, but with a simple border check in order, as the zoom level becomes stronger, the position difference becomes less pronounced. Not the way I want, but within GPS accuracy.

0
source

Here is a complete Java class for specifying a bounding box and checking for a dot inside it. A box is defined by its southwestern and northeastern geo-coordinates (latitude and longitude).

 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)); } } 
0
source

Source: https://habr.com/ru/post/1386791/


All Articles