O que um banco de dados como o PostGIS faz para acelerar isso é primeiro fazer uma comparação de caixa delimitadora de índice. Primeiro, ele encontra todos os polígonos que possuem caixas delimitadoras que interagem com a caixa delimitadora da linha. O problema no seu caso pode ser que a cadeia de linhas seja longa e tenha uma caixa delimitadora muito grande interceptando muitos polígonos que não são de interesse.
Se as linhas forem muito longas, você provavelmente também precisará trabalhar com funções geodésicas muito mais complexas e lentas que as funções planares.
Pode ser bastante complexo fazer as coisas funcionarem sem problemas.
Por que você não deseja confiar em um banco de dados? Isso não resolverá todos os seus problemas, mas há muitas otimizações incorporadas no PostGIS, por exemplo. Lá você também tem os cálculos geodésicos de interseção, se necessário.
Atualização:
li sua pergunta novamente e percebi que você não está usando a cadeia de linhas dos formulários trac, mas cada vértice.
Eu acho que você está no trac errado;)
Tanto porque você está faltando para verificar se a borda entre os pontos de vértice cruza o polígono e porque você está movendo a iteração entre os pontos de vértice para python, em vez de alguma implementação C, que eu acho que é muito mais rápida . Então você tem esse problema com índices. Para tornar as coisas mais rápidas, você precisará criar e manipular algum tipo de índice espacial.
Por outro lado, se você está fazendo muito do trabalho em seu próprio código, por que não faz o teste de interseção também. Esse teste é apenas um ponto no teste de polígono se você estiver lidando com os pontos de vértice. Google para "point in polygon" e você encontrará vários algoritmos.
Mas, eu iria para uma abordagem orientada a banco de dados. Isso lhe dará a possibilidade de usar índices espaciais.
/ Nicklas