Este projeto de trata de um MVP da proposta de um algorítimo para identificar pontos de ônibus desatendidos pela alteração do itinerário de uma determinada linha de transporte público.

Inicialmente é realizada a instanciação das bibliotecas necessárias para as funcionalidades do algorítimo.

rm(list = ls(all.names = TRUE))
require(RJSONIO)
## Loading required package: RJSONIO
## Warning: package 'RJSONIO' was built under R version 3.4.4
library(jsonlite)
## Warning: package 'jsonlite' was built under R version 3.4.4
## 
## Attaching package: 'jsonlite'
## The following objects are masked from 'package:RJSONIO':
## 
##     fromJSON, toJSON
library(magrittr)
## Warning: package 'magrittr' was built under R version 3.4.4
library(dplyr)
## Warning: package 'dplyr' was built under R version 3.4.4
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(leaflet)

A passo seguinte é informar o código da linha a ser objeto de análise. Para este exemplo utilizaremos a linha Assunção - Codigo 188. Vale lembrar que para fins de identificação dos itineários, cada linha é tratada separadamente nos sentidos Centro/Bairro e Birro/Centro, recebendo assim uma Id (5405 e 5406)e um código (188-1 e 188-2) para cada sentido. Inicialmente serácapturado na API do PoaTransporte o itinerário da linha 5405 e será feita a verificação dos atributos do objeto itinerário.

linha = 5405
path = paste('http://www.poatransporte.com.br/php/facades/process.php?a=il&p=', linha, sep = "")
path
## [1] "http://www.poatransporte.com.br/php/facades/process.php?a=il&p=5405"
json_file1 <- fromJSON(path)

json_file1 <- lapply(json_file1, function(x) {
  x[sapply(x, is.null)] <- NA
  unlist(x)
})


json_file1$idlinha
## [1] "5405"
json_file1$nome
## [1] "ASSUNCAO"
json_file1$codigo
## [1] "188-1"
json_file1$`0`
##                     lat                     lng 
## "-30.10473656832800000" "-51.23896113355400000"
length(json_file1)
## [1] 271

Posteriormente o objeto é transformado em um data frame.

aa = do.call("rbind", json_file1)
class(aa)
## [1] "matrix"
dim(aa)
## [1] 271   2
aa = as.data.frame(aa)

É realizada uma iteração que permita trnasformar o data frame em um objeto que possa ser tratado como uma linha com seu traçado determinado por suas coordenadas espaciais.

loop = c(4:length(aa$lat))
for(i in loop){
  print( paste((i-3), aa[i,1], aa[i,2], sep = ";"))
}
## [1] "1;-30.10473656832800000;-51.23896113355400000"
## [1] "2;-30.10729956832800000;-51.23777413355400000"
## [1] "3;-30.10752756832800000;-51.23840113355400000"
## [1] "4;-30.10777756832800000;-51.23909513355400000"
## [1] "5;-30.10796156832800000;-51.23961713355400000"
## [1] "6;-30.10857556832800000;-51.24132613355400000"
## [1] "7;-30.10879156832800000;-51.24202713355400000"
## [1] "8;-30.10904756832800000;-51.24260313355400000"
## [1] "9;-30.10947856832800000;-51.24382713355400000"
## [1] "10;-30.10963856832800000;-51.24426613355400000"
## [1] "11;-30.10967056832800000;-51.24436413355400000"
## [1] "12;-30.11003256832800000;-51.24421413355400000"
## [1] "13;-30.11066256832800000;-51.24391513355400000"
## [1] "14;-30.11079456832800000;-51.24387013355400000"
## [1] "15;-30.11108656832800000;-51.24469913355400000"
## [1] "16;-30.11132456832800000;-51.24531813355400000"
## [1] "17;-30.11176956832800000;-51.24656213355400000"
## [1] "18;-30.11271556832800000;-51.24922513355400000"
## [1] "19;-30.11367356832800000;-51.25187213355400000"
## [1] "20;-30.11464056832800000;-51.25454213355400000"
## [1] "21;-30.11426956832800000;-51.25472613355400000"
## [1] "22;-30.11388556832800000;-51.25487013355400000"
## [1] "23;-30.11356956832800000;-51.25498913355400000"
## [1] "24;-30.11346956832800000;-51.25505013355400000"
## [1] "25;-30.11301856832800000;-51.25524613355400000"
## [1] "26;-30.11296656832800000;-51.25526613355400000"
## [1] "27;-30.11257756832800000;-51.25530413355400000"
## [1] "28;-30.11213156832800000;-51.25534513355400000"
## [1] "29;-30.11185156832800000;-51.25535213355400000"
## [1] "30;-30.11170956832800000;-51.25532313355400000"
## [1] "31;-30.11155556832800000;-51.25526213355400000"
## [1] "32;-30.11141456832800000;-51.25519313355400000"
## [1] "33;-30.11018956832800000;-51.25414313355400000"
## [1] "34;-30.10992556832800000;-51.25410813355400000"
## [1] "35;-30.10829856832800000;-51.25399913355400000"
## [1] "36;-30.10724656832800000;-51.25391813355400000"
## [1] "37;-30.10773956832800000;-51.25535413355400000"
## [1] "38;-30.10795556832800000;-51.25595913355400000"
## [1] "39;-30.10825156832800000;-51.25684913355400000"
## [1] "40;-30.10720556832800000;-51.25731613355400000"
## [1] "41;-30.10639356832800000;-51.25767813355400000"
## [1] "42;-30.10520356832800000;-51.25821813355400000"
## [1] "43;-30.10547556832800000;-51.25927213355400000"
## [1] "44;-30.10558656832800000;-51.25970213355400000"
## [1] "45;-30.10587856832800000;-51.26080013355400000"
## [1] "46;-30.10591156832800000;-51.26099513355400000"
## [1] "47;-30.10589956832800000;-51.26107213355400000"
## [1] "48;-30.10541656832800000;-51.26192213355400000"
## [1] "49;-30.10532656832800000;-51.26203513355400000"
## [1] "50;-30.10513156832800000;-51.26248413355400000"
## [1] "51;-30.10490356832800000;-51.26307213355400000"
## [1] "52;-30.10472156832800000;-51.26366913355400000"
## [1] "53;-30.10458756832800000;-51.26427313355400000"
## [1] "54;-30.10452356832800000;-51.26470413355400000"
## [1] "55;-30.10445856832800000;-51.26526613355400000"
## [1] "56;-30.10436556832800000;-51.26567913355400000"
## [1] "57;-30.10421456832800000;-51.26602513355400000"
## [1] "58;-30.10410256832800000;-51.26615613355400000"
## [1] "59;-30.10390056832800000;-51.26625713355400000"
## [1] "60;-30.10360956832800000;-51.26623713355400000"
## [1] "61;-30.10293956832800000;-51.26578213355400000"
## [1] "62;-30.10276956832800000;-51.26568213355400000"
## [1] "63;-30.10269256832800000;-51.26565513355400000"
## [1] "64;-30.10157756832800000;-51.26552313355400000"
## [1] "65;-30.10081556832800000;-51.26543913355400000"
## [1] "66;-30.10064956832800000;-51.26538813355400000"
## [1] "67;-30.10056756832800000;-51.26536013355400000"
## [1] "68;-30.10032956832800000;-51.26522913355400000"
## [1] "69;-30.10014156832800000;-51.26506013355400000"
## [1] "70;-30.10004456832800000;-51.26490613355400000"
## [1] "71;-30.09999556832800000;-51.26479513355400000"
## [1] "72;-30.09995956832800000;-51.26467413355400000"
## [1] "73;-30.09992856832800000;-51.26441513355400000"
## [1] "74;-30.10002056832800000;-51.26396613355400000"
## [1] "75;-30.10027456832800000;-51.26318913355400000"
## [1] "76;-30.10055256832800000;-51.26234613355400000"
## [1] "77;-30.10101056832800000;-51.26095013355400000"
## [1] "78;-30.10122756832800000;-51.26029813355400000"
## [1] "79;-30.10132556832800000;-51.25995913355400000"
## [1] "80;-30.10158456832800000;-51.25918413355400000"
## [1] "81;-30.10189956832800000;-51.25824013355400000"
## [1] "82;-30.10231856832800000;-51.25696513355400000"
## [1] "83;-30.10251456832800000;-51.25639513355400000"
## [1] "84;-30.10257756832800000;-51.25619913355400000"
## [1] "85;-30.10281756832800000;-51.25547513355400000"
## [1] "86;-30.10327056832800000;-51.25410713355400000"
## [1] "87;-30.10340156832800000;-51.25371313355400000"
## [1] "88;-30.10371456832800000;-51.25277813355400000"
## [1] "89;-30.10380456832800000;-51.25265213355400000"
## [1] "90;-30.10359356832800000;-51.25220213355400000"
## [1] "91;-30.10319456832800000;-51.25149513355400000"
## [1] "92;-30.10297656832800000;-51.25121813355400000"
## [1] "93;-30.10276456832800000;-51.25100813355400000"
## [1] "94;-30.10258856832800000;-51.25086813355400000"
## [1] "95;-30.10216956832800000;-51.25058313355400000"
## [1] "96;-30.10170656832800000;-51.25027013355400000"
## [1] "97;-30.10137956832800000;-51.24990613355400000"
## [1] "98;-30.10103256832800000;-51.24928413355400000"
## [1] "99;-30.10077556832800000;-51.24892213355400000"
## [1] "100;-30.10060756832800000;-51.24877913355400000"
## [1] "101;-30.09996656832800000;-51.24854713355400000"
## [1] "102;-30.09853956832800000;-51.24822413355400000"
## [1] "103;-30.09818056832800000;-51.24814513355400000"
## [1] "104;-30.09747156832800000;-51.24799813355400000"
## [1] "105;-30.09694456832800000;-51.24780413355400000"
## [1] "106;-30.09432856832800000;-51.24403713355400000"
## [1] "107;-30.09386656832800000;-51.24335313355400000"
## [1] "108;-30.09352956832800000;-51.24298413355400000"
## [1] "109;-30.09330956832800000;-51.24280513355400000"
## [1] "110;-30.09313256832800000;-51.24268213355400000"
## [1] "111;-30.09299956832800000;-51.24260813355400000"
## [1] "112;-30.09289056832800000;-51.24255113355400000"
## [1] "113;-30.09277556832800000;-51.24250713355400000"
## [1] "114;-30.09247356832800000;-51.24240113355400000"
## [1] "115;-30.09216556832800000;-51.24232813355400000"
## [1] "116;-30.09160656832800000;-51.24218513355400000"
## [1] "117;-30.09009756832800000;-51.24180413355400000"
## [1] "118;-30.08878056832800000;-51.24146913355400000"
## [1] "119;-30.08745856832800000;-51.24114313355400000"
## [1] "120;-30.08614756832800000;-51.24081813355400000"
## [1] "121;-30.08481356832800000;-51.24048813355400000"
## [1] "122;-30.08407956832800000;-51.24028613355400000"
## [1] "123;-30.08288556832800000;-51.24211613355400000"
## [1] "124;-30.08235356832800000;-51.24293013355400000"
## [1] "125;-30.08190356832800000;-51.24362913355400000"
## [1] "126;-30.08166156832800000;-51.24404613355400000"
## [1] "127;-30.08153756832800000;-51.24413113355400000"
## [1] "128;-30.08125556832800000;-51.24424813355400000"
## [1] "129;-30.08077556832800000;-51.24436413355400000"
## [1] "130;-30.08017956832800000;-51.24440213355400000"
## [1] "131;-30.07994756832800000;-51.24432713355400000"
## [1] "132;-30.07963656832800000;-51.24422513355400000"
## [1] "133;-30.07900056832800000;-51.24405813355400000"
## [1] "134;-30.07820756832800000;-51.24384613355400000"
## [1] "135;-30.07787356832800000;-51.24375013355400000"
## [1] "136;-30.07744056832800000;-51.24350113355400000"
## [1] "137;-30.07733956832800000;-51.24344213355400000"
## [1] "138;-30.07725356832800000;-51.24339613355400000"
## [1] "139;-30.07660056832800000;-51.24307013355400000"
## [1] "140;-30.07621556832800000;-51.24292313355400000"
## [1] "141;-30.07555256832800000;-51.24258013355400000"
## [1] "142;-30.07432956832800000;-51.24163013355400000"
## [1] "143;-30.07418056832800000;-51.24146513355400000"
## [1] "144;-30.07377556832800000;-51.24108613355400000"
## [1] "145;-30.07347856832800000;-51.24075013355400000"
## [1] "146;-30.07317956832800000;-51.24051513355400000"
## [1] "147;-30.07262756832800000;-51.24026313355400000"
## [1] "148;-30.07187756832800000;-51.23997613355400000"
## [1] "149;-30.07142056832800000;-51.23987313355400000"
## [1] "150;-30.07106056832800000;-51.23965413355400000"
## [1] "151;-30.07067256832800000;-51.23933513355400000"
## [1] "152;-30.07022256832800000;-51.23899513355400000"
## [1] "153;-30.07011856832800000;-51.23889113355400000"
## [1] "154;-30.06911156832800000;-51.23789113355400000"
## [1] "155;-30.06812156832800000;-51.23690113355400000"
## [1] "156;-30.06742456832800000;-51.23620413355400000"
## [1] "157;-30.06665756832800000;-51.23536113355400000"
## [1] "158;-30.06446256832800000;-51.23259113355400000"
## [1] "159;-30.06430956832800000;-51.23239213355400000"
## [1] "160;-30.06389456832800000;-51.23198613355400000"
## [1] "161;-30.06375356832800000;-51.23188113355400000"
## [1] "162;-30.06320456832800000;-51.23160913355400000"
## [1] "163;-30.06145956832800000;-51.23103113355400000"
## [1] "164;-30.06077556832800000;-51.23086313355400000"
## [1] "165;-30.05962356832800000;-51.23069513355400000"
## [1] "166;-30.05948256832800000;-51.23067813355400000"
## [1] "167;-30.05869556832800000;-51.23058313355400000"
## [1] "168;-30.05852056832800000;-51.23056213355400000"
## [1] "169;-30.05718256832800000;-51.23045913355400000"
## [1] "170;-30.05681656832800000;-51.23045113355400000"
## [1] "171;-30.05637256832800000;-51.23039513355400000"
## [1] "172;-30.05477256832800000;-51.23021113355400000"
## [1] "173;-30.05491256832800000;-51.22885613355400000"
## [1] "174;-30.05388156832800000;-51.22867213355400000"
## [1] "175;-30.05314956832800000;-51.22854113355400000"
## [1] "176;-30.05213456832800000;-51.22836113355400000"
## [1] "177;-30.05137956832800000;-51.22823113355400000"
## [1] "178;-30.05110056832800000;-51.22818313355400000"
## [1] "179;-30.05025856832800000;-51.22804113355400000"
## [1] "180;-30.04905356832800000;-51.22783513355400000"
## [1] "181;-30.04806656832800000;-51.22767213355400000"
## [1] "182;-30.04782556832800000;-51.22763213355400000"
## [1] "183;-30.04760256832800000;-51.22759513355400000"
## [1] "184;-30.04695556832800000;-51.22749213355400000"
## [1] "185;-30.04625056832800000;-51.22739113355400000"
## [1] "186;-30.04612756832800000;-51.22737513355400000"
## [1] "187;-30.04592756832800000;-51.22739813355400000"
## [1] "188;-30.04558356832800000;-51.22744313355400000"
## [1] "189;-30.04491156832800000;-51.22753913355400000"
## [1] "190;-30.04450256832800000;-51.22759713355400000"
## [1] "191;-30.04423756832800000;-51.22763513355400000"
## [1] "192;-30.04311456832800000;-51.22779413355400000"
## [1] "193;-30.04182556832800000;-51.22797713355400000"
## [1] "194;-30.04170356832800000;-51.22799413355400000"
## [1] "195;-30.04125256832800000;-51.22806413355400000"
## [1] "196;-30.04104856832800000;-51.22812913355400000"
## [1] "197;-30.04085956832800000;-51.22821213355400000"
## [1] "198;-30.04066556832800000;-51.22832513355400000"
## [1] "199;-30.04032356832800000;-51.22857913355400000"
## [1] "200;-30.04028556832800000;-51.22857713355400000"
## [1] "201;-30.03997356832800000;-51.22855713355400000"
## [1] "202;-30.03977856832800000;-51.22853813355400000"
## [1] "203;-30.03870556832800000;-51.22838813355400000"
## [1] "204;-30.03782456832800000;-51.22826513355400000"
## [1] "205;-30.03781456832800000;-51.22822113355400000"
## [1] "206;-30.03768156832800000;-51.22804413355400000"
## [1] "207;-30.03764756832800000;-51.22793813355400000"
## [1] "208;-30.03764656832800000;-51.22789013355400000"
## [1] "209;-30.03765056832800000;-51.22755513355400000"
## [1] "210;-30.03767156832800000;-51.22741213355400000"
## [1] "211;-30.03771556832800000;-51.22731913355400000"
## [1] "212;-30.03780256832800000;-51.22722913355400000"
## [1] "213;-30.03792756832800000;-51.22715513355400000"
## [1] "214;-30.03813756832800000;-51.22715113355400000"
## [1] "215;-30.03835256832800000;-51.22717213355400000"
## [1] "216;-30.03850556832800000;-51.22744013355400000"
## [1] "217;-30.03857756832800000;-51.22762013355400000"
## [1] "218;-30.03864456832800000;-51.22786113355400000"
## [1] "219;-30.03870656832800000;-51.22822213355400000"
## [1] "220;-30.03870556832800000;-51.22838813355400000"
## [1] "221;-30.03869156832800000;-51.22870213355400000"
## [1] "222;-30.03860156832800000;-51.22908413355400000"
## [1] "223;-30.03851156832800000;-51.22931713355400000"
## [1] "224;-30.03837856832800000;-51.22957513355400000"
## [1] "225;-30.03828756832800000;-51.22970413355400000"
## [1] "226;-30.03810456832800000;-51.22993413355400000"
## [1] "227;-30.03788156832800000;-51.23018013355400000"
## [1] "228;-30.03775756832800000;-51.23036013355400000"
## [1] "229;-30.03764556832800000;-51.23057013355400000"
## [1] "230;-30.03755256832800000;-51.23081913355400000"
## [1] "231;-30.03749556832800000;-51.23104213355400000"
## [1] "232;-30.03745656832800000;-51.23129513355400000"
## [1] "233;-30.03732756832800000;-51.23277113355400000"
## [1] "234;-30.03704956832800000;-51.23507913355400000"
## [1] "235;-30.03694056832800000;-51.23648713355400000"
## [1] "236;-30.03722656832800000;-51.23724813355400000"
## [1] "237;-30.03705756832800000;-51.23905613355400000"
## [1] "238;-30.03695956832800000;-51.23962313355400000"
## [1] "239;-30.03682756832800000;-51.23994213355400000"
## [1] "240;-30.03662856832800000;-51.24029513355400000"
## [1] "241;-30.03647556832800000;-51.24050413355400000"
## [1] "242;-30.03636456832800000;-51.24062913355400000"
## [1] "243;-30.03613356832800000;-51.24083213355400000"
## [1] "244;-30.03593956832800000;-51.24093613355400000"
## [1] "245;-30.03577556832800000;-51.24099413355400000"
## [1] "246;-30.03560656832800000;-51.24100813355400000"
## [1] "247;-30.03537856832800000;-51.24099713355400000"
## [1] "248;-30.03509556832800000;-51.24090313355400000"
## [1] "249;-30.03402356832800000;-51.24042013355400000"
## [1] "250;-30.03341356832800000;-51.24002213355400000"
## [1] "251;-30.03131956832800000;-51.23859813355400000"
## [1] "252;-30.03098156832800000;-51.23829913355400000"
## [1] "253;-30.03086556832800000;-51.23814713355400000"
## [1] "254;-30.03087556832800000;-51.23793013355400000"
## [1] "255;-30.03054656832800000;-51.23694413355400000"
## [1] "256;-30.03035556832800000;-51.23639213355400000"
## [1] "257;-30.03017056832800000;-51.23588913355400000"
## [1] "258;-30.02988456832800000;-51.23503613355400000"
## [1] "259;-30.02954056832800000;-51.23402013355400000"
## [1] "260;-30.02906856832800000;-51.23263013355400000"
## [1] "261;-30.02890556832800000;-51.23215013355400000"
## [1] "262;-30.02867656832800000;-51.23147313355400000"
## [1] "263;-30.02845356832800000;-51.23081513355400000"
## [1] "264;-30.02829756832800000;-51.23035713355400000"
## [1] "265;-30.02800556832800000;-51.22949813355400000"
## [1] "266;-30.02784856832800000;-51.22903613355400000"
## [1] "267;-30.02781956832800000;-51.22902513355400000"
## [1] "268;-30.02731656832800000;-51.22926313355400000"
lim = length(aa$lat) - 3
lim
## [1] 268
head(aa)
aa = aa[4:lim,]
dim(aa)
## [1] 265   2
aa$lat =  as.numeric(as.character(aa$lat))
aa$lng =  as.numeric(as.character(aa$lng))

b_c = aa #aaa
map <- leaflet(data = b_c) %>%
  addTiles() %>%
  addPolylines(b_c[, 2],b_c[, 1],weight=2.25,color="red") 
map

Os passos seguintes repetem as ações anteriores sendo aplicadas para o sentido inverso da linha de transporte.

## Sentido oposto
linha = '5406'
path = paste('http://www.poatransporte.com.br/php/facades/process.php?a=il&p=', linha, sep = "")
path
## [1] "http://www.poatransporte.com.br/php/facades/process.php?a=il&p=5406"
json_file1 <- fromJSON(path)

json_file1 <- lapply(json_file1, function(x) {
  x[sapply(x, is.null)] <- NA
  unlist(x)
})

#View(json_file)

json_file1$idlinha
## [1] "5406"
json_file1$nome
## [1] "ASSUNCAO"
json_file1$codigo
## [1] "188-2"
json_file1$`0`
##                     lat                     lng 
## "-30.02731656832800000" "-51.22926313355400000"
length(json_file1)
## [1] 264
aa = do.call("rbind", json_file1)
class(aa)
## [1] "matrix"
dim(aa)
## [1] 264   2
aa = as.data.frame(aa)
loop = c(4:length(aa$lat))
for(i in loop){
  print( paste((i-3), aa[i,1], aa[i,2], sep = ";"))
}
## [1] "1;-30.02731656832800000;-51.22926313355400000"
## [1] "2;-30.02669556832800000;-51.22956313355400000"
## [1] "3;-30.02689056832800000;-51.23000813355400000"
## [1] "4;-30.02727156832800000;-51.23080013355400000"
## [1] "5;-30.02749256832800000;-51.23125313355400000"
## [1] "6;-30.02779256832800000;-51.23187213355400000"
## [1] "7;-30.02810856832800000;-51.23252213355400000"
## [1] "8;-30.02832456832800000;-51.23296513355400000"
## [1] "9;-30.02896856832800000;-51.23428613355400000"
## [1] "10;-30.02943656832800000;-51.23524513355400000"
## [1] "11;-30.02982756832800000;-51.23604313355400000"
## [1] "12;-30.03006156832800000;-51.23652113355400000"
## [1] "13;-30.03086556832800000;-51.23814713355400000"
## [1] "14;-30.03098156832800000;-51.23829913355400000"
## [1] "15;-30.03131956832800000;-51.23859813355400000"
## [1] "16;-30.03341356832800000;-51.24002213355400000"
## [1] "17;-30.03402356832800000;-51.24042013355400000"
## [1] "18;-30.03509556832800000;-51.24090313355400000"
## [1] "19;-30.03537856832800000;-51.24099713355400000"
## [1] "20;-30.03560656832800000;-51.24100813355400000"
## [1] "21;-30.03577556832800000;-51.24099413355400000"
## [1] "22;-30.03593956832800000;-51.24093613355400000"
## [1] "23;-30.03613356832800000;-51.24083213355400000"
## [1] "24;-30.03636456832800000;-51.24062913355400000"
## [1] "25;-30.03647556832800000;-51.24050413355400000"
## [1] "26;-30.03662856832800000;-51.24029513355400000"
## [1] "27;-30.03682756832800000;-51.23994213355400000"
## [1] "28;-30.03695956832800000;-51.23962313355400000"
## [1] "29;-30.03705756832800000;-51.23905613355400000"
## [1] "30;-30.03722656832800000;-51.23724813355400000"
## [1] "31;-30.03724356832800000;-51.23705313355400000"
## [1] "32;-30.03740656832800000;-51.23507913355400000"
## [1] "33;-30.03739556832800000;-51.23439113355400000"
## [1] "34;-30.03735756832800000;-51.23348213355400000"
## [1] "35;-30.03736456832800000;-51.23325313355400000"
## [1] "36;-30.03732756832800000;-51.23277113355400000"
## [1] "37;-30.03745656832800000;-51.23129513355400000"
## [1] "38;-30.03749556832800000;-51.23104213355400000"
## [1] "39;-30.03755256832800000;-51.23081913355400000"
## [1] "40;-30.03764556832800000;-51.23057013355400000"
## [1] "41;-30.03775756832800000;-51.23036013355400000"
## [1] "42;-30.03788156832800000;-51.23018013355400000"
## [1] "43;-30.03876356832800000;-51.23028213355400000"
## [1] "44;-30.03892956832800000;-51.23027813355400000"
## [1] "45;-30.03901756832800000;-51.23025713355400000"
## [1] "46;-30.03913956832800000;-51.23019513355400000"
## [1] "47;-30.03998156832800000;-51.22940713355400000"
## [1] "48;-30.04002556832800000;-51.22934813355400000"
## [1] "49;-30.04006256832800000;-51.22925913355400000"
## [1] "50;-30.04009556832800000;-51.22898613355400000"
## [1] "51;-30.04028556832800000;-51.22857713355400000"
## [1] "52;-30.04032356832800000;-51.22857913355400000"
## [1] "53;-30.04077556832800000;-51.22860213355400000"
## [1] "54;-30.04104856832800000;-51.22861013355400000"
## [1] "55;-30.04184856832800000;-51.22869413355400000"
## [1] "56;-30.04301956832800000;-51.22884113355400000"
## [1] "57;-30.04410956832800000;-51.22896713355400000"
## [1] "58;-30.04433956832800000;-51.22899513355400000"
## [1] "59;-30.04454256832800000;-51.22901713355400000"
## [1] "60;-30.04565456832800000;-51.22915213355400000"
## [1] "61;-30.04578356832800000;-51.22916813355400000"
## [1] "62;-30.04610356832800000;-51.22920513355400000"
## [1] "63;-30.04746356832800000;-51.22936313355400000"
## [1] "64;-30.04759056832800000;-51.22937713355400000"
## [1] "65;-30.04766856832800000;-51.22938613355400000"
## [1] "66;-30.04776856832800000;-51.22939713355400000"
## [1] "67;-30.04793256832800000;-51.22941513355400000"
## [1] "68;-30.05096356832800000;-51.22976513355400000"
## [1] "69;-30.05200856832800000;-51.22988613355400000"
## [1] "70;-30.05477256832800000;-51.23021113355400000"
## [1] "71;-30.05637256832800000;-51.23039513355400000"
## [1] "72;-30.05817856832800000;-51.23078313355400000"
## [1] "73;-30.05886556832800000;-51.23089813355400000"
## [1] "74;-30.05926556832800000;-51.23096913355400000"
## [1] "75;-30.05969356832800000;-51.23101613355400000"
## [1] "76;-30.06145956832800000;-51.23103113355400000"
## [1] "77;-30.06320456832800000;-51.23160913355400000"
## [1] "78;-30.06375356832800000;-51.23188113355400000"
## [1] "79;-30.06389456832800000;-51.23198613355400000"
## [1] "80;-30.06430956832800000;-51.23239213355400000"
## [1] "81;-30.06446256832800000;-51.23259113355400000"
## [1] "82;-30.06665756832800000;-51.23536113355400000"
## [1] "83;-30.06742456832800000;-51.23620413355400000"
## [1] "84;-30.06812156832800000;-51.23690113355400000"
## [1] "85;-30.06911156832800000;-51.23789113355400000"
## [1] "86;-30.07011856832800000;-51.23889113355400000"
## [1] "87;-30.07022256832800000;-51.23899513355400000"
## [1] "88;-30.07054656832800000;-51.23950613355400000"
## [1] "89;-30.07083456832800000;-51.23979413355400000"
## [1] "90;-30.07142056832800000;-51.24021513355400000"
## [1] "91;-30.07239356832800000;-51.24049613355400000"
## [1] "92;-30.07280856832800000;-51.24070713355400000"
## [1] "93;-30.07322956832800000;-51.24102613355400000"
## [1] "94;-30.07349856832800000;-51.24127713355400000"
## [1] "95;-30.07388056832800000;-51.24162313355400000"
## [1] "96;-30.07388256832800000;-51.24162413355400000"
## [1] "97;-30.07409456832800000;-51.24178713355400000"
## [1] "98;-30.07414856832800000;-51.24186413355400000"
## [1] "99;-30.07447956832800000;-51.24208613355400000"
## [1] "100;-30.07472456832800000;-51.24229913355400000"
## [1] "101;-30.07528856832800000;-51.24292613355400000"
## [1] "102;-30.07550156832800000;-51.24313413355400000"
## [1] "103;-30.07577556832800000;-51.24336313355400000"
## [1] "104;-30.07599856832800000;-51.24351413355400000"
## [1] "105;-30.07652756832800000;-51.24391413355400000"
## [1] "106;-30.07690256832800000;-51.24431713355400000"
## [1] "107;-30.07695556832800000;-51.24439313355400000"
## [1] "108;-30.07718856832800000;-51.24472513355400000"
## [1] "109;-30.07739056832800000;-51.24507913355400000"
## [1] "110;-30.07817656832800000;-51.24653513355400000"
## [1] "111;-30.07832756832800000;-51.24672613355400000"
## [1] "112;-30.07848256832800000;-51.24684713355400000"
## [1] "113;-30.07866856832800000;-51.24695313355400000"
## [1] "114;-30.07886156832800000;-51.24699913355400000"
## [1] "115;-30.07925756832800000;-51.24705713355400000"
## [1] "116;-30.07945656832800000;-51.24707413355400000"
## [1] "117;-30.07964456832800000;-51.24706713355400000"
## [1] "118;-30.07981256832800000;-51.24703613355400000"
## [1] "119;-30.07996756832800000;-51.24696613355400000"
## [1] "120;-30.08024456832800000;-51.24676313355400000"
## [1] "121;-30.08084956832800000;-51.24625913355400000"
## [1] "122;-30.08108556832800000;-51.24603913355400000"
## [1] "123;-30.08122956832800000;-51.24582813355400000"
## [1] "124;-30.08134156832800000;-51.24560613355400000"
## [1] "125;-30.08143156832800000;-51.24536613355400000"
## [1] "126;-30.08157656832800000;-51.24456813355400000"
## [1] "127;-30.08166156832800000;-51.24404613355400000"
## [1] "128;-30.08190356832800000;-51.24362913355400000"
## [1] "129;-30.08235356832800000;-51.24293013355400000"
## [1] "130;-30.08288556832800000;-51.24211613355400000"
## [1] "131;-30.08407956832800000;-51.24028613355400000"
## [1] "132;-30.08481356832800000;-51.24048813355400000"
## [1] "133;-30.08614756832800000;-51.24081813355400000"
## [1] "134;-30.08745856832800000;-51.24114313355400000"
## [1] "135;-30.08878056832800000;-51.24146913355400000"
## [1] "136;-30.09009756832800000;-51.24180413355400000"
## [1] "137;-30.09160656832800000;-51.24218513355400000"
## [1] "138;-30.09216556832800000;-51.24232813355400000"
## [1] "139;-30.09247356832800000;-51.24240113355400000"
## [1] "140;-30.09277556832800000;-51.24250713355400000"
## [1] "141;-30.09289056832800000;-51.24255113355400000"
## [1] "142;-30.09299956832800000;-51.24260813355400000"
## [1] "143;-30.09313256832800000;-51.24268213355400000"
## [1] "144;-30.09330956832800000;-51.24280513355400000"
## [1] "145;-30.09352956832800000;-51.24298413355400000"
## [1] "146;-30.09386656832800000;-51.24335313355400000"
## [1] "147;-30.09432856832800000;-51.24403713355400000"
## [1] "148;-30.09694456832800000;-51.24780413355400000"
## [1] "149;-30.09747156832800000;-51.24799813355400000"
## [1] "150;-30.09818056832800000;-51.24814513355400000"
## [1] "151;-30.09853956832800000;-51.24822413355400000"
## [1] "152;-30.09996656832800000;-51.24854713355400000"
## [1] "153;-30.10060756832800000;-51.24877913355400000"
## [1] "154;-30.10077556832800000;-51.24892213355400000"
## [1] "155;-30.10103256832800000;-51.24928413355400000"
## [1] "156;-30.10137956832800000;-51.24990613355400000"
## [1] "157;-30.10170656832800000;-51.25027013355400000"
## [1] "158;-30.10216956832800000;-51.25058313355400000"
## [1] "159;-30.10258856832800000;-51.25086813355400000"
## [1] "160;-30.10276456832800000;-51.25100813355400000"
## [1] "161;-30.10297656832800000;-51.25121813355400000"
## [1] "162;-30.10319456832800000;-51.25149513355400000"
## [1] "163;-30.10359356832800000;-51.25220213355400000"
## [1] "164;-30.10380456832800000;-51.25265213355400000"
## [1] "165;-30.10371456832800000;-51.25277813355400000"
## [1] "166;-30.10340156832800000;-51.25371313355400000"
## [1] "167;-30.10327056832800000;-51.25410713355400000"
## [1] "168;-30.10281756832800000;-51.25547513355400000"
## [1] "169;-30.10257756832800000;-51.25619913355400000"
## [1] "170;-30.10251456832800000;-51.25639513355400000"
## [1] "171;-30.10231856832800000;-51.25696513355400000"
## [1] "172;-30.10189956832800000;-51.25824013355400000"
## [1] "173;-30.10158456832800000;-51.25918413355400000"
## [1] "174;-30.10132556832800000;-51.25995913355400000"
## [1] "175;-30.10122756832800000;-51.26029813355400000"
## [1] "176;-30.10101056832800000;-51.26095013355400000"
## [1] "177;-30.10055256832800000;-51.26234613355400000"
## [1] "178;-30.10027456832800000;-51.26318913355400000"
## [1] "179;-30.10002056832800000;-51.26396613355400000"
## [1] "180;-30.09993056832800000;-51.26423613355400000"
## [1] "181;-30.09984856832800000;-51.26435113355400000"
## [1] "182;-30.09974156832800000;-51.26442713355400000"
## [1] "183;-30.09966956832800000;-51.26445113355400000"
## [1] "184;-30.09958056832800000;-51.26444013355400000"
## [1] "185;-30.09947756832800000;-51.26441913355400000"
## [1] "186;-30.09933356832800000;-51.26435013355400000"
## [1] "187;-30.09993256832800000;-51.26490613355400000"
## [1] "188;-30.10014156832800000;-51.26506013355400000"
## [1] "189;-30.10032956832800000;-51.26522913355400000"
## [1] "190;-30.10056756832800000;-51.26536013355400000"
## [1] "191;-30.10064956832800000;-51.26538813355400000"
## [1] "192;-30.10081556832800000;-51.26543913355400000"
## [1] "193;-30.10157756832800000;-51.26552313355400000"
## [1] "194;-30.10269256832800000;-51.26565513355400000"
## [1] "195;-30.10276956832800000;-51.26568213355400000"
## [1] "196;-30.10293956832800000;-51.26578213355400000"
## [1] "197;-30.10360956832800000;-51.26623713355400000"
## [1] "198;-30.10390056832800000;-51.26625713355400000"
## [1] "199;-30.10410256832800000;-51.26615613355400000"
## [1] "200;-30.10421456832800000;-51.26602513355400000"
## [1] "201;-30.10436556832800000;-51.26567913355400000"
## [1] "202;-30.10445856832800000;-51.26526613355400000"
## [1] "203;-30.10452356832800000;-51.26470413355400000"
## [1] "204;-30.10458756832800000;-51.26427313355400000"
## [1] "205;-30.10472156832800000;-51.26366913355400000"
## [1] "206;-30.10490356832800000;-51.26307213355400000"
## [1] "207;-30.10513156832800000;-51.26248413355400000"
## [1] "208;-30.10532656832800000;-51.26203513355400000"
## [1] "209;-30.10541656832800000;-51.26192213355400000"
## [1] "210;-30.10589956832800000;-51.26107213355400000"
## [1] "211;-30.10591156832800000;-51.26099513355400000"
## [1] "212;-30.10587856832800000;-51.26080013355400000"
## [1] "213;-30.10558656832800000;-51.25970213355400000"
## [1] "214;-30.10547556832800000;-51.25927213355400000"
## [1] "215;-30.10520356832800000;-51.25821813355400000"
## [1] "216;-30.10639356832800000;-51.25767813355400000"
## [1] "217;-30.10720556832800000;-51.25731613355400000"
## [1] "218;-30.10825156832800000;-51.25684913355400000"
## [1] "219;-30.11048656832800000;-51.25582913355400000"
## [1] "220;-30.11147356832800000;-51.25538513355400000"
## [1] "221;-30.11150556832800000;-51.25535513355400000"
## [1] "222;-30.11155556832800000;-51.25526213355400000"
## [1] "223;-30.11170956832800000;-51.25532313355400000"
## [1] "224;-30.11185156832800000;-51.25535213355400000"
## [1] "225;-30.11213156832800000;-51.25534513355400000"
## [1] "226;-30.11257756832800000;-51.25530413355400000"
## [1] "227;-30.11296656832800000;-51.25526613355400000"
## [1] "228;-30.11301856832800000;-51.25524613355400000"
## [1] "229;-30.11346956832800000;-51.25505013355400000"
## [1] "230;-30.11356956832800000;-51.25498913355400000"
## [1] "231;-30.11388556832800000;-51.25487013355400000"
## [1] "232;-30.11336156832800000;-51.25339513355400000"
## [1] "233;-30.11325256832800000;-51.25314713355400000"
## [1] "234;-30.11321256832800000;-51.25312113355400000"
## [1] "235;-30.11292956832800000;-51.25305213355400000"
## [1] "236;-30.11288456832800000;-51.25303013355400000"
## [1] "237;-30.11282856832800000;-51.25297313355400000"
## [1] "238;-30.11275756832800000;-51.25285613355400000"
## [1] "239;-30.11261756832800000;-51.25239913355400000"
## [1] "240;-30.11176956832800000;-51.25007913355400000"
## [1] "241;-30.11163456832800000;-51.24974113355400000"
## [1] "242;-30.11064956832800000;-51.24709713355400000"
## [1] "243;-30.10999356832800000;-51.24528113355400000"
## [1] "244;-30.10967056832800000;-51.24436413355400000"
## [1] "245;-30.10963856832800000;-51.24426613355400000"
## [1] "246;-30.10947856832800000;-51.24382713355400000"
## [1] "247;-30.10904756832800000;-51.24260313355400000"
## [1] "248;-30.10879156832800000;-51.24202713355400000"
## [1] "249;-30.10857556832800000;-51.24132613355400000"
## [1] "250;-30.10796156832800000;-51.23961713355400000"
## [1] "251;-30.10777756832800000;-51.23909513355400000"
## [1] "252;-30.10752756832800000;-51.23840113355400000"
## [1] "253;-30.10729956832800000;-51.23777413355400000"
## [1] "254;-30.10679056832800000;-51.23634013355400000"
## [1] "255;-30.10640856832800000;-51.23528613355400000"
## [1] "256;-30.10457656832800000;-51.23613613355400000"
## [1] "257;-30.10395256832800000;-51.23644113355400000"
## [1] "258;-30.10388056832800000;-51.23645913355400000"
## [1] "259;-30.10417156832800000;-51.23730513355400000"
## [1] "260;-30.10429356832800000;-51.23765813355400000"
## [1] "261;-30.10473656832800000;-51.23896113355400000"
lim = length(aa$lat) - 3
lim
## [1] 261
aa = aa[4:lim,]
dim(aa)
## [1] 258   2
aa$lat =  as.numeric(as.character(aa$lat))
aa$lng =  as.numeric(as.character(aa$lng))

c_b = aa #aab

map <- leaflet(data = c_b) %>%
  addTiles() %>%
  addPolylines(c_b[, 2],c_b[, 1],weight=2.25,color="blue") 
map

O próximo passo será coletar as paradas de ônibus existentes na cidade por meio da API do PoaTransporte e realizar os tratamentos necessários.

## paradas
path = paste('http://www.poatransporte.com.br/php/facades/process.php?a=tp&p=((-30.14296222668432,%20-51.87917968750003),%20(-29.79200328961529,%20-50.56082031250003))))')
path
## [1] "http://www.poatransporte.com.br/php/facades/process.php?a=tp&p=((-30.14296222668432,%20-51.87917968750003),%20(-29.79200328961529,%20-50.56082031250003))))"
json_file2 <- fromJSON(path)

paradas = as.data.frame(json_file2)
paradas[1, ]
paradas$latitude = as.numeric(as.character(paradas$latitude))
paradas$longitude  = as.numeric(as.character(paradas$longitude))

O pesso seguinte é realizar um subset para obter as paradas de ônibus atendidas por cada sentido do etinerário da linha 188-Assunção. Após o subset é possivel identificar as paradas e a quantidade de paradas em cada sentido.

paradas_linha188_1 = paradas[grep("188-1", paradas$linhas), ]
paradas_linha188_2 = paradas[grep("188-2", paradas$linhas), ]
dim(paradas_linha188_1)
## [1] 69  5
dim(paradas_linha188_2)
## [1] 64  5

Como o dataframe contém a Id, o código e o nome da linha aninhados em um único atributo, realizamos uma iteração para refatorar o atributo e gerar três novos atributos com os dados identificados separadamente.

#loop = c(1:length(paradas$codigo))
loop = c(1:3)

for(i in loop){
  paradas$IdLinha[i] = paradas$linhas[[i]][1]
  paradas$codLinha[i] = paradas$linhas[[i]][2]
  paradas$nomeLinha[i] = paradas$linhas[[i]][3]
}

Utilizamos os dados de ambositinerários e os plotamos em mapa juntamente com todas as paradas do município e os dois sentidos de itinerário.

map <- leaflet(data = paradas) %>%
  addTiles() %>%
  addPolylines(b_c[, 2],b_c[, 1],weight=2.25,color="red")  %>%
  addPolylines(c_b[, 2],c_b[, 1],weight=2.25,color="blue")  %>%
  addCircles(~paradas$longitude, ~paradas$latitude, popup=~paste("<br>Id", IdLinha, "<p>Cod", codLinha, "<p>Nome", nomeLinha,  sep = " "),
             weight = 1, radius=30, color= 'blue', stroke = TRUE, fillOpacity = 0.8)
map

Repete-se a mesma operação, mantendo apenas um sentido do itinerário.

a = paradas[2,]$linhas[[1]]
class(a)
## [1] "data.frame"
a$codigoLinha
## [1] "608-1"  "617-1"  "620-1"  "6171-1" "B05-1"  "520-1"  "5202-1" "T13-1"
map <- leaflet(data = paradas) %>%
  addTiles() %>%
  addPolylines(aa[, 2],aa[, 1],weight=2.25,color="red")  %>%
  addCircles(~paradas$longitude, ~paradas$latitude, popup=~paste("Dados: ", paradas$linhas[],  sep = " "),
             weight = 1, radius=30, color= 'pink', stroke = TRUE, fillOpacity = 0.8)
map

Agora que já há uma compreensão de como os dadospodem ser exibidos, o próximo mapa irá conter apenas as linhas dos dois itinerários da linha Assunção, bem como as paradas identificadas separadamete conforme atendem a um ou outro sentido do itinérario tomado como exemplo.

map2 <- leaflet(data = paradas_linha188_1) %>%
  addTiles() %>%
  addCircles(group="Paradas B/C", ~paradas_linha188_1$longitude, ~paradas_linha188_1$latitude, popup=~paste("<br>Id", paradas_linha188_1$IdLinha, "<p>Cod", paradas_linha188_1$codLinha, "<p>Nome", paradas_linha188_1$nomeLinha,  sep = " "),
             weight = 1, radius=60, color= 'blue', stroke = TRUE, fillOpacity = 0.8) %>%
  addCircles(group="Paradas C/B", ~paradas_linha188_2$longitude, ~paradas_linha188_2$latitude, popup=~paste("<br>Id", paradas_linha188_2$IdLinha, "<p>Cod", paradas_linha188_2$codLinha, "<p>Nome", paradas_linha188_2$nomeLinha,  sep = " "),
             weight = 1, radius=60, color= 'red', stroke = TRUE, fillOpacity = 0.8) %>%
  addPolylines(group="Linha B/C", b_c[, 2],b_c[, 1],weight=5,color="green") %>% 
  addPolylines(group="Linha C/B", c_b[, 2],c_b[, 1],weight=5,color="magenta") %>% 
  addLayersControl(overlayGroups = c("Paradas C/B", "Paradas B/C", "Linha B/C", "Linha C/B"),
                   options = layersControlOptions(collapsed = TRUE))
map2

No proximo passo é feita a alteração do Itinerário da linha no centido Bairro/Centro na região correspondende à Av. Praia de Belas. Nesse cenário hipotético a Av. Borges de Medeiros passa a ter uma faixa no contra-fluxo para atender o novo itinerário.

alt1 = b_c[1:170,]
alt2 = b_c[190:265,]
alt = rbind(alt1, alt2)
head(alt)
leaflet(data = paradas) %>%
  addTiles() %>%
  addPolylines(alt[, 2],alt[, 1],weight=2.25,color="red") %>%
  addPolylines(b_c[, 2],b_c[, 1],weight=2.25,color="green") %>%
  addCircles(group="Paradas B/C", ~paradas_linha188_1$longitude, ~paradas_linha188_1$latitude, popup=~paste("<br>Id", paradas_linha188_1$IdLinha, "<p>Cod", paradas_linha188_1$codLinha, "<p>Nome", paradas_linha188_1$nomeLinha,  sep = " "),
             weight = 1, radius=15, color= 'blue', stroke = TRUE, fillOpacity = 0.8)

Transforma-se o dataframe em objetos do tipo Line e posteriormente SpatialLines

library(sp)
## Warning: package 'sp' was built under R version 3.4.4
Sl1 = cbind(alt$lng, alt$lat)
Sl1 <- Line(Sl1)
class(Sl1)
## [1] "Line"
## attr(,"package")
## [1] "sp"
S1 <- Lines(list(Sl1), ID = "c_b")
Sl <- SpatialLines(list(S1))
class(Sl)
## [1] "SpatialLines"
## attr(,"package")
## [1] "sp"

è feita a plotagem da linha para verificar se tudo ocorreu como esperado

library(rgeos)
## Warning: package 'rgeos' was built under R version 3.4.4
## rgeos version: 0.3-26, (SVN revision 560)
##  GEOS runtime version: 3.6.1-CAPI-1.10.1 r0 
##  Linking to sp version: 1.2-7 
##  Polygon checking: TRUE
df <- data.frame(len = sapply(1:length(Sl), function(i) gLength(Sl[i, ])))
rownames(df) <- sapply(1:length(Sl), function(i) Sl@lines[[i]]@ID)

Sldf <- SpatialLinesDataFrame(Sl, data = df)

plot(Sldf, col = "red")

#text(labels = paste0("length = ", round(Sldf@data$len, 2)), 
#     x = gCentroid(Sldf, byid = TRUE)$x,
#     y = gCentroid(Sldf, byid = TRUE)$y)

É aplicado um efeito de buffer na linha para que ela se torne um polígono util para os passos seguintes.

lin_to_poly = gBuffer(Sldf, width=.0003, quadsegs=5, capStyle="ROUND", joinStyle="ROUND", mitreLimit=0.01)

Se attribui um sistema de coordenadas ao objeto polígono para que operações de geodata possa ser realizadas sobre o objeto.

library(raster)
## Warning: package 'raster' was built under R version 3.4.4
## 
## Attaching package: 'raster'
## The following object is masked from 'package:dplyr':
## 
##     select
## The following object is masked from 'package:magrittr':
## 
##     extract
projection(Sldf)=CRS("+init=epsg:4326")

É feita a plotagem do polígono para visualizar os resultados.

plot(lin_to_poly)

É feita a transformação do dataframe de paradas em um SpatialPointDataFrame para que o mesmo possa ser operado por meio de funções de geodata. O segundo passo será aplicar a este objeto o mesmo sistema de projeção do polígono criado anteriormente.Por fim os pontos e o polígono são plotados em conjunto.

xy <- paradas_linha188_1[,c(3,2)]
head(xy)
plot(xy)

spdf <- SpatialPointsDataFrame(coords = xy, data = paradas_linha188_1,
                               proj4string = CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0"))

projection(spdf)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")
projection(lin_to_poly)=CRS("+proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0")

plot(spdf)
plot(lin_to_poly, add = TRUE)

É iniciado um processo de verificação para realizar a interseção entre o polígono criado e as paradas contidas ná área de abrangência do mesmo.

#res = gIntersects(lin_to_poly, spdf)
#res

Utilizamos os métodos: gIntersects para testar se as geometrias têm pelo menos um ponto em comum ou nenhum ponto em comum gCrosses: para verificar se alguma sgeometrias compartilham pontos interiores, mas não todos gContains:para testar se uma geometria contém ou está contida em outra geometria gIntersection: para determinar a intersecção entre as duas geometrias dadas gDifference para determinar a diferença entre duas geometrias. Por fim é feita a plotagem da interseção (contendo o polígono e as paradas atendidas pelo novo itinerário) e a diferença exibindo as paradas desatendidas.

gIntersects(spdf, lin_to_poly)
## [1] TRUE
gCrosses(spdf, lin_to_poly)
## [1] TRUE
gContains(spdf, lin_to_poly)
## [1] FALSE
inter <- gIntersection(spdf, lin_to_poly)
plot(inter)
lines(lin_to_poly)
out <- gDifference(spdf, lin_to_poly)
plot(out, col = "red", add=TRUE)

É feita a exibição da lozalização das paradas desatendidas.

out_df = as.data.frame(out)
## Warning in data.row.names(row.names, rowsi, i): some row.names duplicated:
## 2,3,4,5 --> row.names NOT used
out_df

Novamente é gerado o mapa, agora com a exibição do novo e antigo itinerários, as paradas contidas no novo itinerário e aquelas desatendidas.

leaflet(data = paradas) %>%
  addTiles() %>%
  addPolylines(alt[, 2],alt[, 1],weight=2.25,color="red") %>%
  addPolylines(b_c[, 2],b_c[, 1],weight=2.25,color="green") %>%
  addCircles(group="Paradas B/C", ~paradas_linha188_1$longitude, ~paradas_linha188_1$latitude, popup=~paste("<br>Id", paradas_linha188_1$IdLinha, "<p>Cod", paradas_linha188_1$codLinha, "<p>Nome", paradas_linha188_1$nomeLinha,  sep = " "),
             weight = 1, radius=15, color= 'blue', stroke = TRUE, fillOpacity = 0.8) %>%
    addCircles(group="Paradas Eliminadas", ~out_df$x, ~out_df$y,
               weight = 1, radius=25, color= 'red', stroke = TRUE, fillOpacity = 0.8)

Verifica-se quantas paradas foram desatendidas

head(paradas_linha188_1)
paradas_extintas = paradas[grep(out_df$y, paradas_linha188_1$latitude), ]
## Warning in grep(out_df$y, paradas_linha188_1$latitude): argumento 'pattern'
## tem comprimento > 1 e somente o primeiro elemento será usado
dim(paradas_extintas)
## [1] 1 8
paradas_extintas

Identifica-se as paradas.

toMatch <- as.list(substr(out_df$y, start = 1, stop = 9))
class(toMatch)
## [1] "list"
toMatch
## [[1]]
## [1] "-30.02729"
## 
## [[2]]
## [1] "-30.05370"
## 
## [[3]]
## [1] "-30.05171"
## 
## [[4]]
## [1] "-30.04996"
## 
## [[5]]
## [1] "-30.04532"

É gerada a lista de paradas desatendidas.

out_df
paradas_extintas = grep(pattern = paste(toMatch,collapse="|"), x = paradas_linha188_1$latitude)
paradas_extintas
## [1] 42 50 66 67 69
paradas_extintas = result <- filter(paradas, grepl(paste(toMatch, collapse="|"), latitude))
## Warning: package 'bindrcpp' was built under R version 3.4.4
dim(paradas_extintas)
## [1] 8 8
paradas_extintas