Eu tenho um quadro de dados geopandas de um monte de cadeias de linhas que têm alguns dados associados a cada vértice / ponto:
Point_x = (Lat, Lon, Time, ID, Data1, Data2, Data3)
Os pontos são convertidos em cadeias de linhas com base no ID e ordenados por Hora.
Eu quero quebrar as cadeias de linhas onde, no ponto em que alguma condição é atendida. Agora é quando a distância entre os pontos é maior que algum valor. No futuro, pode ser que uma função dos campos Dados tenha algum valor. Por exemplo, divida uma cadeia de linhas quando o Speed ultrapassar 5 km / h.
O problema atual é que algumas das faixas são formadas a partir de pontos com IDs duplicados, de modo que a cadeia de linhas salta para frente e para trás por grandes distâncias e eu quero um limite para quebrar essas linhas.
Alguma idéia sobre a maneira correta de estruturar isso ou bibliotecas / métodos que possam ser úteis?
O dataframe possui mais de 150 mil trilhas com muitos pontos por trilha, portanto a eficiência seria boa.
Aqui está um exemplo das faixas DF:
ID geometry
204235000 LINESTRING (37.62001 -28.99535, 37.62015 -28.9...
205400000 LINESTRING (3.807816666666666 -18.083181666666...
207138000 LINESTRING (22.73206 -34.97915833333333, 22.73...
209016000 LINESTRING (8.447673333333331 -23.522783333333...
Aqui está uma amostra dos pontos DF. Existem 18 colunas, incluindo Datetime, Point (Lon, Lat), Speed, Size etc etc:
Index Heading Latitude Longitude ID
20 92.8 -35.946802 13.089695 210725000
21 93.5 -35.946912 13.091808 210725000
22 95.4 -35.965520 13.497698 210725000
23 94.7 -35.965803 13.501898 210725000
24 94.9 -35.965987 13.504573 210725000
EDIT: Tentei ser um pouco mais claro.
gd.head()
seria bem-vinda.Respostas:
Ainda não usei o shapely / geopandas, então só posso fornecer o pseudocódigo:
A função de distância deve ser algo que suas bibliotecas já oferecem, ou você terá que implementá-la você mesmo (o velho Pythagoras o ajudará).
A eficiência pode ser melhorada conforme necessário a partir daí, mas deve ser um bom ponto de partida.
fonte