Atualmente, estou desenvolvendo um site de mapeamento OpenLayers. As medições podem ser feitas usando uma ferramenta de linha e uma ferramenta de área. Atualmente, ambos estão definidos para calcular medidas geodésicas, conforme descrito na API do OpenLayers .
Uso medições geodésicas em vez de medições planares, pois durante o teste do usuário as pessoas questionam as medições da ferramenta quanto a distâncias já conhecidas (como dirigir entre cidades).
Um novo recurso do site é que um usuário pode desenhar um círculo no mapa de um raio definido. O OpenLayers apenas permite desenhar círculos usando distâncias planas; portanto, quando um usuário mede o círculo com a ferramenta de medição geodésica, os valores não correspondem. Na imagem abaixo, o raio planar do círculo é de 10 km, mas a medição da linha geodésica para o diâmetro é de 12 km.
Claramente, isso deixará um usuário (e eu) imaginando qual é o correto.
Olhando para esta resposta , parece que a maioria dos sistemas GIS de desktop "ignora" esse problema e retorna medições e distâncias planares. Então, qual é a melhor prática em termos de interface com o usuário e precisão para lidar com medições planares e geodésicas?
Atualizar
Encontrei este exemplo do Google que ilustra a questão dos raios e a projeção de Mercator:
http://maps.forum.nu/gm_sensitive_circle2.html
O código JavaScript para desenhar o círculo é o seguinte:
var lat1 = (PI/180)* center.lat(); // radians
var lng1 = (PI/180)* center.lng(); // radians
for (var a = 0 ; a < 361 ; a++ ) {
var tc = (PI/180)*a;
var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
circlePoints.push(point);
bounds.extend(point);
}
Esse círculo leva em consideração a curvatura da Terra?
Atualização final
Código de trabalho publicado em http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers
fonte
Respostas:
Se você estiver produzindo em casa no navegador, poderá obter um "círculo" (não será redondo na tela devido à sua projeção; é aproximado por um polígono com tantos pontos quanto você deseja desenhar) a forma direta de cálculos geodésicos: dado um ponto, uma direção (azimute) e uma distância que fornece o ponto resultante. Detalhes sangrentos: http://en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method
Parece que alguém já fez uma tradução para javascript: http://www.movable-type.co.uk/scripts/latlong-vincenty-direct.html . Sortudo!
Para finalizar:
Felicidades!
fonte
Para obter um círculo geodésico, você pode usar a operação de buffer no serviço de geometria da ESRI.
Um disponível gratuitamente está disponível aqui .
fonte