Проверете дали географската ширина и дължина са в кръг

Вижте тази илюстрация:

въведете описание на изображението тук

Това, което бих искал да знам е:

  1. Как да създадете област (кръг), когато са дадени географска ширина и дължина и разстоянието (10 километра)
  2. Как да проверите (изчислите) дали географската ширина и дължина са вътре или извън района

Бих предпочел, ако можете да ми дадете примерен код в Java или специално за Android с Google Maps API V2


person Peter Warbo    schedule 27.02.2014    source източник
comment
Е, що се отнася до втория въпрос, кръгът е просто колекция от точки на едно и също разстояние от една точка, центъра. Ако е вътре в кръга, това означава, че е по-близо (по-малко разстояние) до центъра, ако е извън, тогава разстоянието е по-голямо от радиуса. Радиусът във вашия пример е предполагам 10 километра.   -  person dkasipovic    schedule 27.02.2014


Отговори (8)


Това, от което се нуждаете, е разстоянието между две точки на картата:

float[] results = new float[1];
Location.distanceBetween(centerLatitude, centerLongitude, testLatitude, testLongitude, results);
float distanceInMeters = results[0];
boolean isWithin10km = distanceInMeters < 10000;

Ако вече имате Location обекта:

Location center;
Location test;
float distanceInMeters = center.distanceTo(test);
boolean isWithin10km = distanceInMeters < 10000;

Ето интересната част от използвания API: https://developer.android.com/reference/android/location/Location.html

person flx    schedule 27.02.2014
comment
Здравейте, искам да внедря същата функционалност с java Това, което бих искал да знам е: 1) Как да създам област (кръг), когато са дадени географска ширина и дължина и разстоянието (в метри) 2) Как да проверя (изчисля) дали географската ширина и дължина са вътре или извън района - person Mangesh Mandavgane; 12.02.2016
comment
@MangeshMandavgane просто трябва да копирате двете функции, наречени computeDistanceAndBearing и distanceBetween android.googlesource.com/platform/frameworks/base/+/refs/heads/ - person Flo354; 06.07.2016
comment
@Flo354, Благодаря за отговора, проверих предложения URL код. Това е много полезен код, но направих внедряване преди 4 месеца, препоръчам това stackoverflow.com/questions/120283/ - person Mangesh Mandavgane; 07.07.2016
comment
Здравейте всички! кой буркан трябва да включа в моето java приложение, за да използвам метода Location.distanceBetween(). - person srihari; 27.07.2016
comment
Имам въпроса. Дали това е разстоянието, включително пътя до местоположение или просто разстоянието между две точки. - person Ajinkya; 25.07.2017

Виж това:

 private boolean isMarkerOutsideCircle(LatLng centerLatLng, LatLng draggedLatLng, double radius) {
    float[] distances = new float[1];
    Location.distanceBetween(centerLatLng.latitude,
            centerLatLng.longitude,
            draggedLatLng.latitude,
            draggedLatLng.longitude, distances);
    return radius < distances[0];
}
person gulab ahirwar    schedule 21.01.2019
comment
Здравейте, сър, нов съм в Google Maps. имам няколко кръга. Има ли някакъв начин да намеря текущото ми местоположение в кой кръг е посочено? - person Aravindhan Gs; 17.05.2019

Преминахте ли през новия GeoFencing API. Би трябвало да ти помогне. Нормалното изпълнение отнема много време. Това трябва да ви помогне да го внедрите лесно.

person Seshu Vinay    schedule 27.02.2014

вижте https://developer.android.com/reference/android/location/Location.html

Location areaOfIinterest = new Location;
Location currentPosition = new Location;

areaOfIinterest.setLatitude(aoiLat);
areaOfIinterest.setLongitude(aoiLong);

currentPosition.setLatitude(myLat);
currentPosition.setLongitude(myLong);

float dist = areaOfIinterest.distanceTo(currentPosition);

return (dist < 10000);
person Android Newbie    schedule 27.02.2014
comment
??? по дефиниция всяка точка от кръга е на 10 км от центъра. разстоянието между зоната на интерес и текущата позиция е линията между центъра на кръга и текущата позиция - person Android Newbie; 27.02.2014

Само в случай, че някой използва GoogleMap и се опита да приложи обхват на местоположението по дължина и ширина. Можете да опитате google.maps.Circle()

т.е. (mkr е вашият маркер)

  let yourcircle = new google.maps.Circle({
    strokeColor: "#0079C3",
    strokeOpacity: .8,
    strokeWeight: 2,
    fillColor: "#0079C3",
    fillOpacity: 0.2,
    map: this.map,
    center:  {'lat':your latitude, 'lng':your longitude},
    radius: Math.sqrt(your distance range) * 1000,
  });
person JaMondo    schedule 19.01.2021
comment
това е малко без значение за въпроса, но това ми помогна в това, което исках да направя след това! така че наздраве! :) - person Keval Langalia; 25.07.2021

Ако имате предвид под „Как да създадете област“, ​​че искате да начертаете зоната на картата, ще намерите пример точно в препратката към карта V2 документ за класа Circle.

За да проверите дали разстоянието между центъра на кръга и вашата точка е по-голямо от 10 км, бих предложил да използвате статичния метод Location.distanceBetween(...), тъй като избягва ненужните създаване на обекти.

Вижте също тук ( в самия край на отговора) за примерен код в случай, че областта е многоъгълник, а не кръг.

person user2808624    schedule 28.02.2014

Местоположението не работи за мен, ето какво направих.

import 'dart:math' show cos, sqrt, asin;


double calculateDistanceBetweenTwoLatLongsInKm(
    double lat1, double lon1, double lat2, double lon2) {
  var p = 0.017453292519943295;
  var c = cos;
  var a = 0.5 -
      c((lat2 - lat1) * p) / 2 +
      c(lat1 * p) * c(lat2 * p) * (1 - c((lon2 - lon1) * p)) / 2;
  return 12742 * asin(sqrt(a));
}

След това просто проверете дали това разстояние е повече (отвън) или по-малко (отвътре) от вашия радиус в KM

person Ruan    schedule 19.06.2020

Версия на Kotlin

Използване на метод на екземпляр distanceTo, нещо като това под формата на функция за разширение:

fun Location.checkIsInBound(radius: Double,center:Location):Boolean
        =  this.distanceTo(center)<radius

Пример за употреба:

fusedLocationClient.lastLocation
        .addOnSuccessListener { location : Location? ->
        val isWithin2km = location?.checkIsInBound(2000.0,center) }

Освен използването на API за местоположение distanceTo или < a href="https://developer.android.com/reference/android/location/Location.html#distanceBetween(double,%20double,%20double,%20double,%20float%5B%5D)" rel="nofollow noreferrer ">distanceBetween, както е посочено в отговорите по-горе, можете също да използвате Google Map Utility SphericalUtil на библиотека "nofollow noreferrer">computeDistanceBetween също, но приема LatLng като вход.

person Kalai    schedule 13.02.2021