Como posso encontrar o ponto mais distante de um conjunto de pontos existentes?

17

Eu tenho um conjunto de pontos como um arquivo de forma e quero encontrar (as coordenadas) de um novo ponto que tenha a maior distância possível de cada um dos pontos existentes. Isso é possível? Se sim, existe algum código VB de amostra? Obrigado Demetris

Demetris
fonte
Você quer dizer um novo ponto para cada ponto já existente ou um ponto que esteja de alguma forma "mais distante" de todos eles? E por mais distante, você quer dizer "o outro lado do globo"? Nesse caso, você pode multiplicar a latitude por -1 e adicionar 180 à longitude (subtraindo 360 se o valor resultante for> 180) se você os tiver em graus decimais.
Nmpeterson
Penso que a pergunta interessante seria: dados os pontos existentes espalhados pelo globo, encontre um novo ponto no globo mais distante de todos os pontos existentes.
Kirk Kuykendall
Seria, efetivamente, o ponto no final de um triângulo isósceles, no qual a distância é limitada apenas pela distância que você deseja percorrer. Se eu li a pergunta corretamente, você quer o argumento mais distante dos dois? Igualmente?
Hairy
1
Oh! Meu post criou uma discussão e material fantásticos! NMpeterson: Em primeiro lugar, tenho que dizer que meus pontos estão dentro de uma pequena área plana; portanto, não há necessidade de cálculos globais. Estou procurando a segunda questão levantada; ou seja, um ponto que está de alguma forma "mais distante" de todos os pontos existentes. Então, por favor, foque nisto.
Demetris 29/11
Gostaria de saber se algum código VB de exemplo está disponível conforme solicitado na pergunta original. Talvez esse código já seja óbvio, dadas as respostas dos especialistas. Mas como iniciante, espero começar recriando a solução gentilmente fornecida pela whuber. Peço desculpas antecipadamente por colocar isso como uma resposta em vez de um comentário.

Respostas:

12

A recomendação de Kirk Kuykendall de construir um diagrama esférico de Voronoi (polígonos de Thiessen) é boa, mas pode ter alguns problemas técnicos para resolver. Enquanto isso, como alternativa, é possível aplicar a solução rasterizada padrão, conforme descrito em outro segmento . Use distâncias esféricas em vez de distâncias euclidianas.

Aqui está um exemplo usando cinco pontos, dados aqui como (lat, lon):

 82.7051   -145.256
 60.3321     81.2881
-17.076     105.125
-38.792    -122.686
  0.000     180.000

Mapa de distância

Este mapa de distância esférica abrange o globo de -180 a 180 graus de longitude horizontalmente e de -90 a 90 graus de latitude verticalmente. Os pontos são mostrados com grandes pontos vermelhos. As distâncias aumentam com o brilho. Os cumes aparentes devem ser partes de grandes círculos. O pequeno ponto preto próximo a (-15,3268, -2,04352) marca o ponto de distância máxima de 11.227 km. (As distâncias foram calculadas no dado elipsoidal ITRF00.)

A resolução dessa grade é de um grau. Para obter uma solução mais precisa, é possível ampliar esse ponto (e qualquer outro máximo local com um valor suficientemente próximo do máximo global) e repetir o cálculo em uma grade menor, mas com maior resolução.

whuber
fonte
muito mais bonita que vetores. Não sei por que pensei que os raspadores exigiam um modelo de terra plana.
Kirk Kuykendall
Bonito, sim, mas ineficiente. Seria bom ver a solução esférica Voronoi baseada em vetor funcionar.
whuber
@Whuber: Como você pode obter automaticamente as coordenadas do ponto preto? "
Demetris
@Demetris Uma maneira é calcular o valor máximo na grade, selecionar todas as células iguais a esse valor e usar as coordenadas do centro dessa célula.
whuber
@ Whuber: Muito obrigado. Essa é uma boa ideia. No entanto, eu tenho que cortar o raster de saída com base em uma classe de recurso (um polígono exclusivo). Posso fazer isso?
Demetris
8

insira a descrição da imagem aqui

Eu nunca tentei isso, mas parece que isso iria funcionar:

Crie um diagrama voronoi 3D da esfera. Os polígonos resultantes serão centralizados aproximadamente nos pontos originais (semente) existentes.

Passe por cada vértice resultante para encontrar o que está mais distante do seu ponto existente mais próximo. Este ponto deve ser o ponto mais remoto do globo.

Kirk Kuykendall
fonte
Essa é uma ótima ideia (+1). Mas como é o diagrama esférico de Voronoi quando todos os pontos estão dentro de um hemisfério comum? O código a que você se refere o obtém com um casco convexo, mas parece que não vai funcionar.
whuber
hmm, sim, acho que mesmo que eles não estejam todos em um hemisfério comum, haverá um polígono que não possui um ponto inicial. E se você construísse um ponto usando o ponto antipodal do centróide dos cascos convexos? Além disso, além de percorrer cada vértice, esse ponto-antípoda convexo seria examinado para verificar se está mais distante de seus vizinhos do que a distância máxima do vértice.
Kirk Kuykendall
Esse foi o meu pensamento inicial, mas os pontos antipodais criarão polígonos artefatos. Pense no que aconteceria em sua ilustração se o antípoda de todos os pontos fosse incluído, por exemplo! Provavelmente existe uma solução dessa natureza, mas parece que não é simples.
whuber
1

Você pode usar uma função de distância ponderada para identificar a que distância cada célula da sua varredura está de todos os outros pontos.

djq
fonte
Qual custo você usaria?
whuber
Se você definir o custo como uma unidade; você pode identificar qual seria o ponto mais distante com base na distância.
DJQ
@whuber Embora talvez isso não seja diferente no cálculo da abordagem da distância euclidiana já mencionada.
DJQ
Essa é a distância euclidiana. Na verdade, nem é isso: é um tipo estranho de distância octogonal (os círculos são na verdade octógonos). Nesta situação (distâncias apenas dos pontos, sem barreiras), é muito mais preciso e muito mais rápido calcular diretamente uma distância euclidiana ou uma grade de distância esférica, em vez de tentar explorar a CostDistance para isso.
whuber
Não tenho certeza de que o custo da distância percorrida ajudaria, porque preciso das coordenadas de apenas um ponto e tenho um conjunto de vetores existentes, mas tentarei. Obrigado.
Demetris 29/11
1

Até onde eu sei, essa análise do " pólo de inacessibilidade " deve ser feita iterativamente.

Uma abordagem de varredura iterativa seria apropriada desde que você esteja vendo uma área pequena com mínima distorção da projeção. Para cada célula, calcule a distância de todos os pontos e depois a distância mínima. A célula com o valor mais alto é o polo. Você também pode usar a Distância euclidiana no analista espacial para fazer isso.

Uma abordagem de vetor iterativo é mais complicada. Garcia-Castellanos et al. 2007 descrevem um método iterativo baseado em uma terra esférica. Parece que eles disponibilizaram o código C online . Eu posso imaginar maneiras de fazer isso no Arc com buffers, mas ainda seria iterativo e lento.

dmahr
fonte
0

você pode usar a distância do ponto (análise) A ferramenta cria uma tabela com distâncias entre dois conjuntos de pontos. se o raio de pesquisa padrão for usado, as distâncias de todos os pontos de entrada até todos os pontos próximos serão calculadas. A tabela de saída pode ser bastante grande. Por exemplo, se os recursos de entrada e próximo tiverem 1.000 pontos cada, a tabela de saída poderá conter um milhão de registros.

salehamra
fonte
Como isso pode ser aplicado para encontrar as coordenadas de um novo ponto que não aparece na entrada? Talvez você tenha interpretado mal a pergunta?
whuber
0

O ponto mais distante do seu conjunto de pontos seria o recíproco ao ponto mais interno do seu conjunto. Por exemplo, se o seu ponto mais interno do seu conjunto tivesse coordenadas 49 graus norte e -144 graus leste, o ponto recíproco e o extremo mais distante teriam coordenadas 49 graus sul e 36 graus oeste. Isso não é exatamente verdade porque a Terra não é perfeitamente esférica, e sim geoidal; portanto, a correção do ponto de resultado depende muito de quais sistemas de projeção e geográficos (ortográficos, ortorretificados ...) você usa. Pode ser útil encontrar um recíproco para todo o conjunto (transferir um antípoda para um conjunto) e, em seguida, executar a análise da superfície dentro do terreno coberto pelo conjunto de pontos antípoda, já que o terreno pode muito. Suponho que sua pergunta não se refira a pontos em corpos extraterrestres, como outros planetas ou luas. Desculpe, Eu não tenho código VB para você. 🙄

Yuriy Shevchuk
fonte
O ponto mais distante de todos os outros pontos de um conjunto seria o mais interno (aquele que estiver mais distante de todos os pontos mais externos da borda), ainda assim seria o mais próximo de cada ponto imediatamente ao lado dele, não importa o quê. Esta é uma análise de cluster, não é divertida. É provavelmente melhor olhar para os mesmos átomos de carga em Physics.😐
Yuriy Shevchuk