Сортировка координат с использованием полярных координат на картах не работает должным образом - PullRequest
0 голосов
/ 19 июня 2020

Я пытался использовать полярные координаты для сортировки на карте, но есть некоторые точки, которые не отсортированы правильно ... приветствуются любые другие идеи.

Эта функция вычисляет расстояние между нулевой точкой и другими точками и после этого сделайте Polar.

OBS: первый элемент в json равен нулю.

public function geoDistance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo, $earthRadius = 6371000){
    // convert from degrees to radians
    $latFrom = deg2rad($latitudeFrom);
    $lonFrom = deg2rad($longitudeFrom);
    $latTo = deg2rad($latitudeTo);
    $lonTo = deg2rad($longitudeTo);

    $latDelta = $latTo - $latFrom;
    $lonDelta = $lonTo - $lonFrom;

    $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)));
    $result = $angle * $earthRadius;
    $ar_result = array((int) $result,$angle);
    return $ar_result;
}

Результат Json в порядке:

[{  "0": -22.959518200000001542093741591088473796844482421875, "1": -47.31821699999999708552422816865146160125732421875 }, {"0": -22.89199740000000105055733001790940761566162109375, "1": -47.20887599999999650890458724461495876312255859375, }, {"0": -22.883436299999999619103618897497653961181640625, "1": -47.208885100000003376408130861818790435791015625, }, {"0": -22.866217599999998810744727961719036102294921875, "1": -47.2184359999999969659256748855113983154296875, }, {"0": -22.856176399999998949397195247001945972442626953125, "1": -47.22217309999999912406565272249281406402587890625, }, {"0": -22.953410500000000382669895770959556102752685546875, "1": -47.164660400000002482556737959384918212890625, }, {"0": -22.944490800000000518821252626366913318634033203125, "1": -47.15899370000000345726220984943211078643798828125, }, {"0": -22.96785200000000060072125052101910114288330078125, "1": -47.1469929000000007590642780996859073638916015625, }, {"0": -22.9323456999999990557626006193459033966064453125, "1": -47.11162920000000298159648082219064235687255859375, }, {"0": -22.925108699999999117835614015348255634307861328125, "1": -47.11131280000000032259777071885764598846435546875, }, {"0": -22.91034619999999932815626380033791065216064453125, "1": -47.10023549999999659121385775506496429443359375, }, {"0": -22.852931999999999135297912289388477802276611328125, "1": -47.11009899999999817055140738375484943389892578125, }, {"0": -22.951945800000000730278770788572728633880615234375, "1": -47.0565342000000015332261682488024234771728515625, }, {"0": -22.9184403000000003203240339644253253936767578125, "1": -47.05696999999999974306774674914777278900146484375, }, {"0": -22.9184403000000003203240339644253253936767578125, "1": -47.05696999999999974306774674914777278900146484375, }, {"0": -22.88961809999999985620888764970004558563232421875, "1": -47.06218960000000350873960996977984905242919921875, }, {"0": -22.851477599999999057445165817625820636749267578125, "1": -47.04847960000000028912836569361388683319091796875, }, {"0": -22.9295022000000017214915715157985687255859375, "1": -47.0244162999999986141119734384119510650634765625, }, {"0": -22.805689699999998509838405880145728588104248046875, "1": -47.06347989999999725796442362479865550994873046875, }, {"0": -22.85992759999999890396793489344418048858642578125, "1": -46.9689211999999969293639878742396831512451171875, }, {"0": -23.1099971000000010690200724638998508453369140625, "1": -48.6069255999999967343683238141238689422607421875, }, {"0": -23.10312509999999974752427078783512115478515625, "1": -48.61533899999999874808054300956428050994873046875, }, {"0": -20.58343310000000059289959608577191829681396484375, "1": -47.36835409999999768615452921949326992034912109375, }, {"0": -20.56136490000000094369170255959033966064453125, "1": -47.37054979999999915207808953709900379180908203125, }, {"0": -20.555940799999998347402652143500745296478271484375, "1": -47.383621099999999159990693442523479461669921875, }, {"0": -20.552360400000001305897967540659010410308837890625, "1": -47.41386849999999952842699713073670864105224609375, }, {"0": -20.54103810000000152058419189415872097015380859375, "1": -47.36767160000000131958586280234158039093017578125, }, {"0": -20.5264537999999987505361787043511867523193359375, "1": -47.41771399999999658803062629885971546173095703125, }, {"0": -20.52717080000000038353391573764383792877197265625, "1": -47.4412655000000000882209860719740390777587890625, }, {"0": -20.526592300000000790305421105585992336273193359375, "1": -47.444337999999987687260727398097515106201171875, }, {"0": -20.5035692000000011603333405219018459320068359375, "1": -47.4124661000000031663148547522723674774169921875, } ]

Этот результат на карте выглядит так: введите здесь описание изображения

Как показано внутри круга, ожидаемая сортировка - 8,9,10,12,17,13,15,11,16,18, но результат был другим.

Есть ли какие-нибудь идеи, которые могут помочь в этом лучше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...